diff --git a/CHANGELOG.md b/CHANGELOG.md
index 45a9ca3416d97060c942a4bb920f8b12129b1ad7..f2b8332c400ccf323d39cc55dd00c700b62afd36 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,160 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
-## [Unreleased]
+## [1.3.0] - 2023-11-26
+### Summary
+- Wifi connection UI
+- Media framework
+- Performance improvements
+- Backend improvements
+- Wider micropython API
+- Improved preloaded applications
+- ...and many bugfixes!
+
+### Added
+- Added the `Audio Passthrough` app for toggling audio passthrough through
+  line-in/mic to speaker or lineout.
+- Added the `w1f1` app for managing wifi access to Settings, incorporates
+  an in-progress cap-touch multi-tap keyboard (`k3yboard`).
+- Added the `Scalar` app in `Music` category for playing scales.
+- Added the `Mandelbrot` app, which illustrates how one can do direct
+  framebuffer access and control 8bpp palettized modes from python.
+- Added configuration of audio adjustments and startup dB level to `settings.json`.
+- Added configuration of wifi credentials + hostname via `settings.json`
+- Added support for apps to set wifi state automatically (configurable in
+  settings: `Let apps change WiFi`)
+- Added task profiler which prints over serial (configurable in
+  settings: `Debug: ftop`)
+- Added an error screen to the `Nick` app when `nick.json` is invalid.
+- Added `urequests` and `uos` support in the simulator.
+- Added audio/video media framework, and `Wurzelitzer` app as a small jukebox
+  frontend - currently supporting mp3 audio, mpeg1 video, GIF and protracker
+  .mod files.
+- Added exporting of built firmwares as part of CI.
+- Added basic implementation of `os.statvfs()` to fetch full/available
+  disk space on flash and SD.
+- Added `set_position` and `scroll_to` methods to `ScrollController`
+- graphics: sprite sheet support for `ctx.image()`
+- graphics: `ctx.parse()` for parsing SVG-path-data/ctx-protocol.
+- graphics: 1,2,4,8,16,24 and 32 bits-per-pixel graphics modes.
+- graphics: direct framebuffer access.
+- graphics: palette setting in 1,2,4 and 8bpp graphics modes.
+- graphics: flags for 2x 3x and 4x pixel doubling, low-latency and direct-ctx modes.
+- graphics: experimental smart redraw mode
+- graphics: clipped and composited overlay buffer
+- graphics: allow a graphics state depth of up to 10 (`ctx.save()` `ctx.restore()`)
+- graphics: virtual framebuffer with scrolling
+- battery: Main menu shows a charge percentage estimate based on real battery characterization
+- Added basic media playback in the `fil3s` app.
+- Added a delete button to `fil3s`/Files app to allow for deleting files,
+  folders and apps on-device.
+- Added new menu categories, `Media` and `Games`, and made category handling more robust
+  to correctly handle introducing new categories in the future.
+- Added configuration UI for audio, appearance and graphics settings.
+- Added configurable LED patterns for the main menu.
+- Added "restore defaults" option in the settings menu.
+- Added wah modulation in `Otamatone`.
+- Added several API functions for `ViewManager` to make complex view handling in apps
+  easier and robust.
+- Added firmware update app, `updat3r`.
+- Added storage information in `About` app.
+- Added audio equalization for built-in speakers.
+- Added a function to retrieve scope data for manual drawing/processing.
+- Added I2C scanner app.
+- Added sensor demo app.
+- Added `CONFIG_DEBUG_GDB_ENABLED` flag for easy debugging over USB JTAG.
+- Added saving/restoring state to several apps.
+- Added variable sequence length support in `gay drums`.
+
+### Changed
+- Changed the st3m\_tar logic to only update files on flash after an update
+  if they've been changed, greatly improving start times after an update.
+- Flashing flow3r through idf.py now automatically restarts it.
+- Switched the REPL/fatal/disk restart button to the OS shoulder button (right
+  shoulder button, unless swapped in settings).
+- Improved performance of the `gr33nhouse` app list by not rendering hidden
+  entries and scrolling ones too long to fit on screen.
+- Changed the audio adjustment logic, and added support for holding down the
+  shoulder to keep increasing/decreasing level.
+- Improved download reliability of the `gr33nhouse` app by adding chunked
+  downloads, some `gc.collect()` calls, progress bar and an error screen.
+- Settings are now automatically loaded and saved when entering and leaving
+  the settings page.
+- Moved the `Clouds` app to the `Badge` menu and updated it to use IMU data.
+- Added a more sane commandline interface to the simulator.
+- More stub functions for the simulator.
+- Improved performance of system menus by not rendering hidden entries.
+- Added visualization of state, instead of an audio scope in UI of `harmonic
+  demo` and `melodic demo`.
+- The system provided scope is now always stroked.
+- Improved BPM tap accuracy in `gay drums`.
+- Some shell code rewritten to avoid the expensive calls `ctx.start_group()` and
+  `ctx.end_group()`.
+- Overlay graphics gets rendered to a separate framebuffer, of which a clipped rectangle
+  is composited during scan-out. The python overlay code has been adapted to keep track
+  of which parts of overlay need refresh.
+- Slightly lower AA quality; for a 3x performance boost in the
+  worst-case scanline rasterization code path.
+- The entry section in `flow3r.toml` can now be omitted if the Application
+  class is called `App`.
+- disabled support for compositing group API in ctx, where used global\_alpha on
+  its own did was responsible for it seeming to work.
+- Split the `settings.py` file into two, creating `settings_menu.py` to hold
+  UI-related code and allow `settings` to be used import loops without
+  in many cases.
+- When running apps through REPL mode (with `mpremote` etc), multi-view apps
+  are now properly handled and don't restart whenever OS shoulder is pressed.
+- A multitude of built-in apps now scroll names to fit the screen.
+- Apps are now sorted and deduplicated by display name, not by folder name.
+- Improved handedness in buttons.
+- `harmonic demo` turned into a fully-featured `chord organ`
+- `menu` key in `flow3r.toml` has been replaced with `category`. The old key can still
+  be used to maintain backwards compatibility with older firmwares.
+- Backported recent improvements for micropython's garbage collection to make it faster.
+- `shoegaze` can now use chords configured in `chord organ`.
+- Changed the priority of additional threads spawned by micropython to be equal to its
+  main thread's priority.
+- Apps that require Wi-Fi connection can directly take the user to Wi-Fi settings.
+- Changed the default app installation directory on flash to `/flash/apps`.
+- `gr33nhouse` now installs apps on SD card if available.
+- Increased the frequency of LED animations.
+- Changed the way LED colors are blended when using slew rates lower than 255 to be
+  more in line with color perception.
+- Rearranged system menu.
+- Made system indicator icons bigger.
+- Removed CCCamp's Wi-Fi settings from the default config.
+- Made InputState and parts of InputController lazily evaluated.
+- bl00mbox: allow circular signal dependencies
+- bl00mbox: several plugins and patches deprecated and replaced with updated
+  versions, see https://gitlab.com/moon2embeddedaudio/bl00mbox/-/blob/main/README.md
+
+### Fixed
+- Fixed `tiny sampler` keeping the microphone active after app exit.
+- Fixed missing `include/` dir on builds on Darwin.
+- Fixed the `time` module in the simulator being broken for apps trying to use it.
+- Fixed wrong petal ordering in the simulator.
+- Fixed simulator not exiting when closed.
+- Fixed `Comic Mono` missing in the simulator.
+- Fixed initialization orientation of display and transform initialization for
+  ctx contexts, (this enables arbitrary transformations to images and gradients.)
+- Fixed broken anti-aliasing for compressed side of curved strokes.
+- Fixed cleanup at exit for firmware apps
+- Fixed sampler start bug in bl00mbox
+- Fixed reset of graphics subsystem upon entering REPL / using mpremote.
+- Fixed multitude of issues with transition animations.
+- Fixed lost captouch and button presses when they're shorter than a think cycle.
+- Fixed `ScrollController`'s handling of high delta values.
+- Fixed many crashes in `fil3s` app.
+- Fixed a crash in `CapScrollController`.
+- Fixed gamma LUT setting for LEDs.
+- Fixed bl00mbox channels leaking on micropython's soft reboot.
+- Fixed importing bl00mbox's fake stub in the simulator.
+- Performance fixes for bl00mbox.
+- Fixed troubles with deleting files on some SD cards (like the bundled one).
+- Fixed the default I2C1 pins in micropython's I2C interface.
+- Fixed large files being truncated when installing apps via `gr33nhouse`.
+- Fixed LED color handling in the simulator.
+- Fixed flickering .down property of Pressable when going through REPEATED state.
 
 
 ## [1.2.0] - 2023-08-18
@@ -45,7 +198,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
 ### Changed
 - `ctx.get_font_name()` now raises an exception for unknown fonts.
-- Raised umber of concurrent textures to 32.
+- Raised max concurrent texture limit to 32.
 
 ### Fixed
 - Fixed PNG without alpha and JPEG support by enabling `CTX_FORMAT_RGB8`.