diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..253ec693
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,134 @@
+# Change log
+
+## (UNRELEASED)
+ * Documentation: Move changelog to a dedicated file [#556](https://github.com/xenharmonic-devs/scale-workshop/issues/556)
+
+## 2.3.6
+ * Feature: Be more informative about why vals or commas do not span a rank-2 temperament [#540](https://github.com/xenharmonic-devs/scale-workshop/issues/540)
+ * Feature: Implement more MOS coloring options [#554](https://github.com/xenharmonic-devs/scale-workshop/issues/554)
+ * Bug fix: Fix rank-2 modal crashing when changing number of periods [#553](https://github.com/xenharmonic-devs/scale-workshop/issues/553)
+ * Bug fix: Display custom validation messages on input elements [#540](https://github.com/xenharmonic-devs/scale-workshop/issues/540)
+ * Bug fix: Implement soft limits to approximation numerators and denominators [#544](https://github.com/xenharmonic-devs/scale-workshop/issues/544)
+
+## 2.3.5
+ * Bug fix: Parse nothing-of-EDO [#537](https://github.com/xenharmonic-devs/scale-workshop/issues/537)
+
+## 2.3.4
+ * Feature: Support primes as equaves in lattice visualization
+ * Feature: Clear scale title when clearing scale data [#530](https://github.com/xenharmonic-devs/scale-workshop/issues/530)
+ * Bug fix: Bypass complex monzo calculations in tuning table [#528](https://github.com/xenharmonic-devs/scale-workshop/issues/528)
+ * Bug fix: Fix MIDI visualization when base = 0 [#526](https://github.com/xenharmonic-devs/scale-workshop/issues/526)
+ * Bug fix: Fix MIDI In channel messages leaking to deactivated Out channels
+ * Refactoring: Use Pinia to manage app state [#367](https://github.com/xenharmonic-devs/scale-workshop/issues/367)
+ * Refactoring: Persist modal data in Pinia when changing tabs [#529](https://github.com/xenharmonic-devs/scale-workshop/issues/529)
+
+## 2.3.3
+ * Feature: Add a link to the Discord channel on About page [#468](https://github.com/xenharmonic-devs/scale-workshop/issues/468)
+ * Improvement: Improve loading times with asynchronous components [#520](https://github.com/xenharmonic-devs/scale-workshop/issues/520)
+ * Bug fix: Fix tempering in exotic subgroups [#518](https://github.com/xenharmonic-devs/scale-workshop/issues/518)
+ * Bug fix: Close Korg export modal when pressing escape [#524](https://github.com/xenharmonic-devs/scale-workshop/issues/524)
+ * Refactoring: Split isomorhic QWERTY to s re-usable package [#336](https://github.com/xenharmonic-devs/scale-workshop/issues/336)
+
+## 2.3.2
+ * Bug fix: Make copy & paste possible outside of scale data [#515](https://github.com/xenharmonic-devs/scale-workshop/issues/515)
+ * Quality assurance: End-to-end test scale generation / approximation [#516](https://github.com/xenharmonic-devs/scale-workshop/issues/516)
+ * Quality assurance: Use node version 18 in GitHub Workflows
+
+## 2.3.1
+ * Feature: Historical temperaments, target-tempered generator stacks and well temperaments [#461](https://github.com/xenharmonic-devs/scale-workshop/issues/461), [#477](https://github.com/xenharmonic-devs/scale-workshop/issues/477)
+ * Bug fix: Fix audio issues in the 404 page [#512](https://github.com/xenharmonic-devs/scale-workshop/issues/512)
+ * Bug fix: Fix rank-2 generation [#514](https://github.com/xenharmonic-devs/scale-workshop/issues/514)
+ * Bug fix: Fix merging negative offsets [#511](https://github.com/xenharmonic-devs/scale-workshop/issues/511)
+ * Refactoring: Use `xen-dev-utils` for circle difference
+
+## 2.3.0
+ * Bug fix: Minor type issues
+ * Refactoring: Re-initialize the Vue project
+ * Refactoring: Re-format code
+ * Quality assurance: Implement Cypress test to verify URL encoding [#508](https://github.com/xenharmonic-devs/scale-workshop/issues/508)
+
+## 2.2.2
+ * Feature: Add radio buttons for changing interval matrix indexing [#499](https://github.com/xenharmonic-devs/scale-workshop/issues/499)
+ * Refactoring: Use Pinia to manage app audio state [#367](https://github.com/xenharmonic-devs/scale-workshop/issues/367)
+ * Documentation: Point README links to plainsound.org
+ * Documentation: Replace decimal example with pi
+
+## 2.2.1
+ * Feature: Stretch scale to match a specified interval
+ * Feature: Merge an offset copy of the scale with the original
+ * Feature: On-screen QWERTY keyboard (for playing) can now be enabled in the preferences
+ * Feature: Light-weight algorithms for tempering in extremely large just intonation subgroups
+ * Feature: Visualize how the various MIDI mappings assign scale degrees
+ * Feature: Implement visual MIDI channel indicators
+ * Feature: Interprete non-integer equal temperaments as cET
+ * Feature: Implement basic reverb using a ping-pong delay
+ * Feature: Implement new metric prefixes from quecto to quetta
+ * Standardization: Rename reference pitch to A4
+ * Bug fix: Text inputs no longer disappears when filled with invalid intervals
+ * Bug fix: Import base frequency from Anamark v2 tunings
+ * Bug fix: Support monzo syntax in most modal dialogs that accept intervals
+ * Bug fix: Show values that more accurately represent the scale in the interval matrix
+ * Bug fix: Respect the preferred number of signifying digits when manipulating the scale
+ * Bug fix: Make sure that the text always fits in the chord wheels on the Analysis tab
+ * Bug fix: Fix issues with multiple touches on the virtual keyboard
+ * Bug fix: Prevent garbage lines turning into valid URL data
+ * Bug fix: Make sure the base MIDI note is an integer
+ * Bug fix: Adhere to Korg maximum cents limits
+
+
+## 2.2.0
+ * Feature: Improved Korg export including Minilogue XD
+ * Feature: Export MTS SysEx dumps
+ * Feature: Single val tempering can now produce N-of-EDO steps
+ * Bug fix: Fix how `1/1` are spelled `1\1` after equalizing the scale
+
+## 2.1.2
+ * Bug fix: Make the syntax more consistent
+
+## 2.1.1
+* Feature: A new tab for visualizing 23-limit just intonation lattices
+* Bug fix: The "Not Found" page should again produce the intended easter egg
+
+## 2.1.0
+* Feature: New *Modify scale* option for merging an offset copy with the scale
+* Feature: On-screen QWERTY keyboard now available if enabled in the *Preferences* tab.
+* Feature: Loading preset scales now assigns corresponding key colors as well
+* Feature: Replaced top export with simple URL copy to clipboard
+* Feature: Rank-2 scales can now be manipulated interactively by clicking on the period circle in a new tab inside the modal for *New scale → Rank-2 temperament*
+* Refactoring: Core functionality now at [scale-workshop-core](https://github.com/xenharmonic-devs/scale-workshop-core) for better reusability
+* Refactoring: Utility packages [xen-dev-utils](https://www.npmjs.com/package/xen-dev-utils), [moment-of-symmetry](https://www.npmjs.com/package/moment-of-symmetry) and [temperaments](https://www.npmjs.com/package/temperaments) are now sourced from npm.
+* Bug fix: Decimal dots in the interval matrix is now consistent with the tunng table
+* Bug fix: Touching the screen in piano layout played multiple notes in unison
+* Bug fix: Typing out text in some of the scale creation modals made sound
+* Bug fix: Disable browser specific features like quick find on Firefox
+* Regression: Korg 'logue exports have been fixed to match Scale Workshop 1
+* Optimization: Tuning table frequencies are computed using a faster strategy
+* Documentation: Better documentation and logging support for the class that handles keyboard input
+
+### 2.0.1
+* Feature: The synth can now be played while manipulating slider, radio or checkbox inputs
+* Bug fix: Scala import wouldn't read plain numbers and didn't ignore line comments
+* Bug fix: Using a piano-style layout in all-white/all-black could crash the app
+* Bug fix: Tuning table rows were highlighting inconsistently
+* Bug fix: Virtual keys got stuck when a click was released outside the virtual keyboard
+
+### 2.0.0
+* Project update: Application rewritten from the ground up. Scale Workshop is now powered by Vue.
+* Feature: Equal temperament now supports subsets when generating scales
+* Feature: Generate Rank-2 temperaments from vals or comma list
+* Feature: Combination product set supports arbitrary equaves besides the octave (2/1)
+* Feature: Generate Moment of Symmetry scales
+* Feature: Generate Euler-Fokker genera
+* Feature: Generate Dwarf scales
+* Feature: Generate Cross polytope scales (generalized octahedra in monzo-space)
+* Feature: Span lattices of arbitrary rank
+* Feature: Approximate by ratios using odd- and prime-limits
+* Feature: Temper modifier for converting scales in just intonation to lower ranks
+* Feature: Convert intervals to different types
+* Feature: New interval type: monzo e.g `[-4 4 -1>` = 2-4·34·5-1 = 81/80
+* Feature: New interval type: composite e.g `3/2 - 1.995` ≈ 700.0 cents
+* Feature: Analysis - Interval matrix (modes)
+* Feature: Analysis - Visualize currently played chord as otonal or utonal concentric cogs
+* Feature: Piano-style virtual keyboard
+* Feature: Piano-style mapping for the QWERTY keyboard (layout determined by key colors)
+* Feature: Mapping white (physical) MIDI keys to white colored (virtual) scale degrees
\ No newline at end of file
diff --git a/README.md b/README.md
index 335e34e4..25497983 100644
--- a/README.md
+++ b/README.md
@@ -104,86 +104,7 @@ Please base any work on `main` branch, and make pull requests against `main` as
## Changelog
-
-## 2.2.1
- * Feature: Stretch scale to match a specified interval
- * Feature: Merge an offset copy of the scale with the original
- * Feature: On-screen QWERTY keyboard (for playing) can now be enabled in the preferences
- * Feature: Light-weight algorithms for tempering in extremely large just intonation subgroups
- * Feature: Visualize how the various MIDI mappings assign scale degrees
- * Feature: Implement visual MIDI channel indicators
- * Feature: Interprete non-integer equal temperaments as cET
- * Feature: Implement basic reverb using a ping-pong delay
- * Feature: Implement new metric prefixes from quecto to quetta
- * Standardization: Rename reference pitch to A4
- * Bug fix: Text inputs no longer disappears when filled with invalid intervals
- * Bug fix: Import base frequency from Anamark v2 tunings
- * Bug fix: Support monzo syntax in most modal dialogs that accept intervals
- * Bug fix: Show values that more accurately represent the scale in the interval matrix
- * Bug fix: Respect the preferred number of signifying digits when manipulating the scale
- * Bug fix: Make sure that the text always fits in the chord wheels on the Analysis tab
- * Bug fix: Fix issues with multiple touches on the virtual keyboard
- * Bug fix: Prevent garbage lines turning into valid URL data
- * Bug fix: Make sure the base MIDI note is an integer
- * Bug fix: Adhere to Korg maximum cents limits
-
-
-## 2.2.0
- * Feature: Improved Korg export including Minilogue XD
- * Feature: Export MTS SysEx dumps
- * Feature: Single val tempering can now produce N-of-EDO steps
- * Bug fix: Fix how `1/1` are spelled `1\1` after equalizing the scale
-
-## 2.1.2
- * Bug fix: Make the syntax more consistent
-
-## 2.1.1
-* Feature: A new tab for visualizing 23-limit just intonation lattices
-* Bug fix: The "Not Found" page should again produce the intended easter egg
-
-## 2.1.0
-* Feature: New *Modify scale* option for merging an offset copy with the scale
-* Feature: On-screen QWERTY keyboard now available if enabled in the *Preferences* tab.
-* Feature: Loading preset scales now assigns corresponding key colors as well
-* Feature: Replaced top export with simple URL copy to clipboard
-* Feature: Rank-2 scales can now be manipulated interactively by clicking on the period circle in a new tab inside the modal for *New scale → Rank-2 temperament*
-* Refactoring: Core functionality now at [scale-workshop-core](https://github.com/xenharmonic-devs/scale-workshop-core) for better reusability
-* Refactoring: Utility packages [xen-dev-utils](https://www.npmjs.com/package/xen-dev-utils), [moment-of-symmetry](https://www.npmjs.com/package/moment-of-symmetry) and [temperaments](https://www.npmjs.com/package/temperaments) are now sourced from npm.
-* Bug fix: Decimal dots in the interval matrix is now consistent with the tunng table
-* Bug fix: Touching the screen in piano layout played multiple notes in unison
-* Bug fix: Typing out text in some of the scale creation modals made sound
-* Bug fix: Disable browser specific features like quick find on Firefox
-* Regression: Korg 'logue exports have been fixed to match Scale Workshop 1
-* Optimization: Tuning table frequencies are computed using a faster strategy
-* Documentation: Better documentation and logging support for the class that handles keyboard input
-
-### 2.0.1
-* Feature: The synth can now be played while manipulating slider, radio or checkbox inputs
-* Bug fix: Scala import wouldn't read plain numbers and didn't ignore line comments
-* Bug fix: Using a piano-style layout in all-white/all-black could crash the app
-* Bug fix: Tuning table rows were highlighting inconsistently
-* Bug fix: Virtual keys got stuck when a click was released outside the virtual keyboard
-
-### 2.0.0
-* Project update: Application rewritten from the ground up. Scale Workshop is now powered by Vue.
-* Feature: Equal temperament now supports subsets when generating scales
-* Feature: Generate Rank-2 temperaments from vals or comma list
-* Feature: Combination product set supports arbitrary equaves besides the octave (2/1)
-* Feature: Generate Moment of Symmetry scales
-* Feature: Generate Euler-Fokker genera
-* Feature: Generate Dwarf scales
-* Feature: Generate Cross polytope scales (generalized octahedra in monzo-space)
-* Feature: Span lattices of arbitrary rank
-* Feature: Approximate by ratios using odd- and prime-limits
-* Feature: Temper modifier for converting scales in just intonation to lower ranks
-* Feature: Convert intervals to different types
-* Feature: New interval type: monzo e.g `[-4 4 -1>` = 2-4·34·5-1 = 81/80
-* Feature: New interval type: composite e.g `3/2 - 1.995` ≈ 700.0 cents
-* Feature: Analysis - Interval matrix (modes)
-* Feature: Analysis - Visualize currently played chord as otonal or utonal concentric cogs
-* Feature: Piano-style virtual keyboard
-* Feature: Piano-style mapping for the QWERTY keyboard (layout determined by key colors)
-* Feature: Mapping white (physical) MIDI keys to white colored (virtual) scale degrees
+See [CHANGELOG.md](CHANGELOG.md).
## Contributors
@@ -272,7 +193,7 @@ npm run lint
## License
-MIT, see [LICENCE](https://github.com/xenharmonic-devs/scale-workshop/blob/main/LICENSE) for details.
+MIT, see [LICENCE](LICENSE) for details.
## Related projects