diff --git a/CHANGELOG.md b/CHANGELOG.md
index fc46492d67f137a88de2f7dd17d4d3711f22663c..c88d2ed654a024675a26003e5adbb68c05494198 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,41 @@
+## [0.4.0](https://dev.funkwhale.audio/funkwhale/ui/compare/v0.3.0...v0.4.0) (2024-11-14)
+
+
+### Features
+
+* add Layout component (Stack, Grid, ...) ([09140fc](https://dev.funkwhale.audio/funkwhale/ui/commit/09140fcf82183d6fe09df60c820d282a165ea2db))
+* add max modal height ([89b9d83](https://dev.funkwhale.audio/funkwhale/ui/commit/89b9d8328016e3dfd921a610891d2c9fbeed9a0d))
+* **card, docs:** [WIP] Refactor props ([bcabd7a](https://dev.funkwhale.audio/funkwhale/ui/commit/bcabd7a708e7a0447d576d9ab9902704202979d1))
+* **card:** Move scss to module within single-file component ([da85d2c](https://dev.funkwhale.audio/funkwhale/ui/commit/da85d2c87b93393638e027f384911b33e4dd3157))
+* **docs:** Add style for preview box (example side-by-side with the code) ([092d82c](https://dev.funkwhale.audio/funkwhale/ui/commit/092d82c66ea59466bc78478ae0cea21fc7698436))
+* **i18n:** Added Belarusian ([48e9740](https://dev.funkwhale.audio/funkwhale/ui/commit/48e9740c30c2a6637078c1272bd9fcc6f2dfc28a))
+* **layout:** Add Spacer component; finish Layout component; add documentation ([f8327bd](https://dev.funkwhale.audio/funkwhale/ui/commit/f8327bd182d15b9325a302e25a136ccd7a255d13))
+* **routing:** [WIP] Prepare router ([6667c4d](https://dev.funkwhale.audio/funkwhale/ui/commit/6667c4d6c070b00ddc9265969f5e4ff50e9a21ba))
+* **style:** Use CSS variables to override defaults (--gap, --size) ([a692e85](https://dev.funkwhale.audio/funkwhale/ui/commit/a692e85cc37d88701bcc2060af490917fd0837fc))
+* **tabs:** Add optional icon prop ([cb4d191](https://dev.funkwhale.audio/funkwhale/ui/commit/cb4d191d77c41a368cc5a609559fd1d1358a1f36))
+* **tabs:** Tab width doesn't change when it's bold. A11y: Left/right keys change tab. ([5df20d3](https://dev.funkwhale.audio/funkwhale/ui/commit/5df20d3a15fe91b7ab7088aba10135ee688c4081))
+* **theme:** Accept dark/light toggle-class from both vitepress (docs) and funkwhale (front) ([1a201d2](https://dev.funkwhale.audio/funkwhale/ui/commit/1a201d2493f2c5596ed62a10be11101a10dff5c2))
+
+
+### Bug Fixes
+
+* **a11y:** Text contrast on non-solid buttons ([95e3ab7](https://dev.funkwhale.audio/funkwhale/ui/commit/95e3ab7c166e73dac5e62f9c21b2729eda305109))
+* Add Layout entry, Remove multi-artist code (migrated to @funkwhale/funkwhale); simplify code ([c55baf8](https://dev.funkwhale.audio/funkwhale/ui/commit/c55baf811f235ec1b61bf202624af4c2d4d45adc))
+* **docs:** Broken links due to refactor ec57a602b9cef20c25c68c61f9123c8282a32474 ([73a03c5](https://dev.funkwhale.audio/funkwhale/ui/commit/73a03c56b746618a7ad3c2d8c45c91ffe3d4daa8))
+* **docs:** Override leaking style from vitepress default theme ([d4d3e13](https://dev.funkwhale.audio/funkwhale/ui/commit/d4d3e13336e085b4e5675aea6cfb19ab13ff0e55))
+* **dx:** Enable HMR by directly importing Vue Component into Markdown file. Also enables Vue LSP in Markdown. ([b98a73e](https://dev.funkwhale.audio/funkwhale/ui/commit/b98a73ed27b317d497e183b1966d0aa798a13b0b))
+* **format:** Run pre-commit hook to format the source (`pre-commit run --all-files`) ([a1284c8](https://dev.funkwhale.audio/funkwhale/ui/commit/a1284c8f3041b620730573938332ff0904761fe0))
+* **package:** do not publish CJS modules, only ESM ([93ff6a1](https://dev.funkwhale.audio/funkwhale/ui/commit/93ff6a110733ec7213ad66909c2fac5c8f2bda94))
+* **package:** Export types (fixes a regression due to upgrading to typescript 4.7); remove duplicate fields in tsconfig (were already provided by @vue/tsconfig) ([1ef5e41](https://dev.funkwhale.audio/funkwhale/ui/commit/1ef5e41b4b75e2b299e3d4da89c76e1efe75a51b))
+* **package:** No need to set baseUrl as paths is already set (https://www.typescriptlang.org/tsconfig/[#base](https://dev.funkwhale.audio/funkwhale/ui/issues/base)Url) ([1a2caa4](https://dev.funkwhale.audio/funkwhale/ui/commit/1a2caa4c77697496d34a74cbac485309bec0e436))
+* **package:** Ugrade to newer @vue/tsconfig preset ([4724539](https://dev.funkwhale.audio/funkwhale/ui/commit/47245391faea93f89b016223b876a15f7d4ac990))
+* **popover:** Correct icon for radio items ([9161980](https://dev.funkwhale.audio/funkwhale/ui/commit/9161980124abdcbf9b09c33723bc312ad75ca7d2))
+* **release:** Fix release process to properly include changelog ([5e3830a](https://dev.funkwhale.audio/funkwhale/ui/commit/5e3830a47b8da8d81f41da4a9cf4c60bfd0b9c4f))
+* set modal max width to 40rem ([a67f6ed](https://dev.funkwhale.audio/funkwhale/ui/commit/a67f6edbb10f11eeba6ed1ddca998c3a64b90e7d))
+* set modal width to 40rem ([0dd3a03](https://dev.funkwhale.audio/funkwhale/ui/commit/0dd3a0380c50ec02343a2ea24bacdb0eee0cf242))
+* **style:** Correctly override height and width in grid items; improve theme ([051257d](https://dev.funkwhale.audio/funkwhale/ui/commit/051257d5c2ada083a9b731d6901e4d567cff6dd6))
+* **theme:** Correct selector for light theme in vitepress (docs) ([273bca9](https://dev.funkwhale.audio/funkwhale/ui/commit/273bca97bafc42759f7ab920b97d30bf5d39a397))
+
 ## [0.3.0](https://dev.funkwhale.audio/funkwhale/ui/compare/v0.2.2...v0.3.0) (2023-11-29)
 
 ### Features
diff --git a/package.json b/package.json
index 4204656851c9b2a608cd239793db5beb4ace9698..c3b1bb8a4be1fc88f24e3c91dcae5c639cef1ae9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@funkwhale/ui",
-  "version": "0.3.0",
+  "version": "0.4.0",
   "license": "GPL-3.0",
   "type": "module",
   "files": [