<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.socialstack.dev/index.php?action=history&amp;feed=atom&amp;title=Migration_Framework</id>
	<title>Migration Framework - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.socialstack.dev/index.php?action=history&amp;feed=atom&amp;title=Migration_Framework"/>
	<link rel="alternate" type="text/html" href="https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;action=history"/>
	<updated>2026-10-16T07:26:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=794&amp;oldid=prev</id>
		<title>Luke: /* Compatibility */</title>
		<link rel="alternate" type="text/html" href="https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=794&amp;oldid=prev"/>
		<updated>2026-01-24T12:24:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Compatibility&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:24, 24 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Any mappings from core 2024 and earlier would be skipped. This is because in core 2025 and onwards, they changed to being inline in rows/documents instead.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Any mappings from core 2024 and earlier would be skipped. This is because in core 2025 and onwards, they changed to being inline in rows/documents instead.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Permalinks did not exist in core 2024 and earlier. There is a custom built routing engine inside core 2025 which made automated link preservation possible, complex multi-directory slugs as well as removing the dependency on having a reverse proxy (you can run core 2026 onwards without NGINX, redirect rules included). In a core 2024 -&amp;gt; 2025+ migration, the URLs on pages will implicitly be dropped. The page structure itself is the same however.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Permalinks did not exist in core 2024 and earlier. There is a custom built routing engine inside core 2025 which made automated link preservation possible, complex multi-directory slugs as well as removing the dependency on having a reverse proxy (you can run core 2026 onwards without NGINX, redirect rules included). In a core 2024 -&amp;gt; 2025+ migration, the URLs on pages will implicitly be dropped. The page structure itself is the same however&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, albeit a core 2025+ project defaults to generating pages with wrapping templates&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need any assistance with generating permalinks or migrating mappings as well please do ask! In short you can see the target format if you allow core 2025+ to startup and generate its default data, and then look at e.g. the site_page table. In there is a JSON column called Mappings which holds that data instead. For permalinks, it is site_permalink where you will see a relatively simple source URL and target locator, usually of the form &amp;quot;page:X&amp;quot; where X is an ID.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need any assistance with generating permalinks or migrating mappings as well please do ask! In short you can see the target format if you allow core 2025+ to startup and generate its default data, and then look at e.g. the site_page table. In there is a JSON column called Mappings which holds that data instead. For permalinks, it is site_permalink where you will see a relatively simple source URL and target locator, usually of the form &amp;quot;page:X&amp;quot; where X is an ID.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Luke</name></author>
	</entry>
	<entry>
		<id>https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=793&amp;oldid=prev</id>
		<title>Luke: /* Compatibility */</title>
		<link rel="alternate" type="text/html" href="https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=793&amp;oldid=prev"/>
		<updated>2026-01-24T12:23:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Compatibility&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:23, 24 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Due to the copy transfer mechanism, note that it does not passively upgrade or downgrade. Most things are cross-compatible through a wide range of socialstack versions, however there are two notable compatibility points:  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Due to the copy transfer mechanism, note that it does not passively upgrade or downgrade. Most things are cross-compatible through a wide range of socialstack versions, however there are two notable compatibility points:  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Any mappings from core 2024 and earlier would be skipped. This is because in core 2025 and onwards, they changed to being inline in rows/documents instead. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Similarly you would also be missing &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Any mappings from core 2024 and earlier would be skipped. This is because in core 2025 and onwards, they changed to being inline in rows/documents instead.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Permalinks did not exist in core 2024 and earlier. There is a custom built routing engine inside core 2025 which made automated link preservation possible, complex multi-directory slugs as well as removing the dependency on having a reverse proxy (you can run core 2026 onwards without NGINX, redirect rules included). In a core 2024 -&amp;gt; 2025+ migration, the URLs on pages will implicitly be dropped. The page structure itself is the same however.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Permalinks did not exist in core 2024 and earlier. There is a custom built routing engine inside core 2025 which made automated link preservation possible, complex multi-directory slugs as well as removing the dependency on having a reverse proxy (you can run core 2026 onwards without NGINX, redirect rules included). In a core 2024 -&amp;gt; 2025+ migration, the URLs on pages will implicitly be dropped. The page structure itself is the same however.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need any assistance with generating permalinks or migrating mappings as well please do ask! In short you can see the target format if you allow core 2025+ to startup and generate its default data, and then look at e.g. the site_page table. In there is a JSON column called Mappings which holds that data instead. For permalinks, it is site_permalink where you will see a relatively simple source URL and target locator, usually of the form &amp;quot;page:X&amp;quot; where X is an ID.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If you need any assistance with generating permalinks or migrating mappings as well please do ask! In short you can see the target format if you allow core 2025+ to startup and generate its default data, and then look at e.g. the site_page table. In there is a JSON column called Mappings which holds that data instead. For permalinks, it is site_permalink where you will see a relatively simple source URL and target locator, usually of the form &amp;quot;page:X&amp;quot; where X is an ID.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Luke</name></author>
	</entry>
	<entry>
		<id>https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=792&amp;oldid=prev</id>
		<title>Luke: Created page with &quot;If you&#039;d like to move your data in either direction between any database engine (currently 3) supported by Socialstack, there is a built in migration mechanism at /v1/migratio...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.socialstack.dev/index.php?title=Migration_Framework&amp;diff=792&amp;oldid=prev"/>
		<updated>2026-01-24T12:21:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;If you&amp;#039;d like to move your data in either direction between any database engine (currently 3) supported by Socialstack, there is a built in migration mechanism at /v1/migratio...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;If you&amp;#039;d like to move your data in either direction between any database engine (currently 3) supported by Socialstack, there is a built in migration mechanism at /v1/migration/migrate. This mechanism is best used for sidegrades rather than up/downgrading.&lt;br /&gt;
&lt;br /&gt;
The following example assumes MySQL to MongoDB.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
You first need to have installed Api/DatabaseMySQL and Api/DatabaseMongoDB in to your project. In your appsettings.json, you then connect to both:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ConnectionStrings&amp;quot;: {&lt;br /&gt;
  &amp;quot;DefaultConnection&amp;quot;: &amp;quot;server=localhost;port=3306;SslMode=none;AllowPublicKeyRetrieval=true;database=X;user=Y;password=Z&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;MongoConnectionStrings&amp;quot;: {&lt;br /&gt;
  &amp;quot;IsPrimary&amp;quot;: true,&lt;br /&gt;
  &amp;quot;DefaultConnection&amp;quot;: &amp;quot;mongodb://localhost:27017/X?ssl=false&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mark the target database engine as IsPrimary: true. Start it up and you should see &amp;quot;MySQL is installed and configured but not mounting as it is not the primary DBE&amp;quot; appear in the console.&lt;br /&gt;
&lt;br /&gt;
From here, login as the admin account as normal (using details from the primary database, Mongo in this case). Then, load the migrate URL:&lt;br /&gt;
&lt;br /&gt;
/v1/migration/migrate?from=mysql&amp;amp;to=mongodb&lt;br /&gt;
&lt;br /&gt;
The files for this are in Api/Database/Migration/ - it is recommended to look over that to understand how it works and what it will do. Importantly, it does not delete anything at any point by default, it essentially just loads objects from one database engine and creates them in the other, transferring the ID&amp;#039;s as-is. You may want to delete any generated contents of your target database in between starting up the site and running this.&lt;br /&gt;
&lt;br /&gt;
= Compatibility =&lt;br /&gt;
&lt;br /&gt;
Due to the copy transfer mechanism, note that it does not passively upgrade or downgrade. Most things are cross-compatible through a wide range of socialstack versions, however there are two notable compatibility points: &lt;br /&gt;
&lt;br /&gt;
* Any mappings from core 2024 and earlier would be skipped. This is because in core 2025 and onwards, they changed to being inline in rows/documents instead. Similarly you would also be missing &lt;br /&gt;
&lt;br /&gt;
* Permalinks did not exist in core 2024 and earlier. There is a custom built routing engine inside core 2025 which made automated link preservation possible, complex multi-directory slugs as well as removing the dependency on having a reverse proxy (you can run core 2026 onwards without NGINX, redirect rules included). In a core 2024 -&amp;gt; 2025+ migration, the URLs on pages will implicitly be dropped. The page structure itself is the same however.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance with generating permalinks or migrating mappings as well please do ask! In short you can see the target format if you allow core 2025+ to startup and generate its default data, and then look at e.g. the site_page table. In there is a JSON column called Mappings which holds that data instead. For permalinks, it is site_permalink where you will see a relatively simple source URL and target locator, usually of the form &amp;quot;page:X&amp;quot; where X is an ID.&lt;/div&gt;</summary>
		<author><name>Luke</name></author>
	</entry>
</feed>