diff --git a/CHANGELOG.md b/CHANGELOG.md
index c3ecffed71..8ed9db0048 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,67 @@
> [Join the Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) for more exclusive features and updates.
+## 2.2.0 official, 2.2.1 insiders (2024-12-24)
+
+### Features
+
+- feat(language-core): support `@vue-generic` (#4971) - Thanks to @KazariEX!
+- feat(vscode): add configuration for skipping automatic detection of Hybrid Mode (#5046) - Thanks to @KazariEX!
+- feat(language-service): crawl html data of `data-allow-mismatch` - Thanks to @KazariEX!
+- feat(language-core): type support for `useAttrs` and `$attrs` (#5011) - Thanks to @KazariEX!
+- feat(language-core): type support of `useSlots` and `$slots` (#5055) - Thanks to @KazariEX!
+- feat(language-core): type support of `v-model` modifiers (#5061) - Thanks to @KazariEX!
+- feat(language-service): process references data at runtime to reduce bundle size (#5054) - Thanks to @KazariEX!
+- feat(language-core): support the use of sfc root comment to configure `vueCompilerOptions` (#4987) - Thanks to @KazariEX!
+- feat(vscode): add timeout logic for insiders fetching (#5048) - Thanks to @KazariEX!
+- feat(vscode): add examples to inlay hints configuration (#5068) - Thanks to @KazariEX!
+- feat(language-core): type support of `$attrs` (#5076) - Thanks to @KazariEX!
+
+### Performance
+
+- perf(typescript-plugin): use named pipe servers more efficiently (#5070)
+
+### Bug Fixes
+
+- fix(language-core): generate script setup starting from last leading comment without `@ts-check` - Thanks to @KazariEX!
+- fix(language-core): make model modifiers optional (#4978) - Thanks to @KazariEX!
+- fix(language-core): always report missing props on `` (#4982) - Thanks to @KazariEX!
+- fix(language-core): avoid unchecked index access when parsing `defineEmits` (#5028) - Thanks to @KazariEX!
+- fix(language-service): handle text edit of special closing tags completion correctly (#5016) - Thanks to @KazariEX!
+- fix(language-core): don't generate variable access of template refs using `useTemplateRef` (#5032) - Thanks to @KazariEX!
+- fix(vscode): update `enabledHybridMode` before activate extension (#5019) - Thanks to @KazariEX!
+- fix(tsc): point to shimmed tsc entry point to support ts 5.7 (#5020) - Thanks to @davidmatter!
+- fix(vscode): add `GitHub.copilot-chat` to hybrid mode compatible list (#5047) - Thanks to @KazariEX!
+- fix(language-core): generate generics normally when `useTemplateRef` has no parameters (#5051) - Thanks to @KazariEX!
+- fix(language-core): handle named default import of components correctly (#5066) - Thanks to @KazariEX!
+- fix(language-core): disable navigation feature on non-binding prop values (#5040) - Thanks to @KazariEX!
+- fix(language-core): do not generate useTemplateRef parameter repeatedly (#5009)
+- fix(language-core): generate macros after script setup content (#5071) - Thanks to @KazariEX!
+- fix(language-core): correct type and completion support of `vue:` event (#4969) - Thanks to @KazariEX!
+- fix(language-core): prevent visiting functional components for parseScriptSetupRanges (#5049) - Thanks to @zhiyuanzmj!
+- fix(language-service): don't provide modifier completion for `@` and `:` (#5052) - Thanks to @KazariEX!
+- fix(language-core): consistent interpolation behavior of shorthand binding (#4975) - Thanks to @KazariEX!
+- fix(language-core): resolve components with various name cases correctly (#5067) - Thanks to @KazariEX!
+
+### Other Changes
+
+- refactor: improve code consistency (#4976) - Thanks to @KazariEX!
+- docs: update nvim guide (#4984) - Thanks to @zeromask1337!
+- docs: fix broken marketplace page (#5004) - Thanks to @rioj7!
+- chore: upgrade `reactive-vscode` to v0.2.7 (#4997) - Thanks to @KermanX!
+- refactor(language-service): consistent style of source and virtual code operation (#5053) - Thanks to @KazariEX!
+- refactor(language-core): remove unnecessary linked code mappings of `defineProp` (#5058) - Thanks to @KazariEX!
+- refactor(language-core): simplify current component info passing (#5078) - Thanks to @KazariEX!
+- Upgraded Volar from `v2.4.8` to `v2.4.11`:
+ - fix(typescript): avoid crash when converting relatedInformation from overly large files
+ - fix(typescript): fix interactive refactors (https://github.com/volarjs/volar.js/pull/244) - Thanks to @andrewbranch!
+ - fix(typescript): should not suppressing getLanguageId crashes (https://github.com/volarjs/volar.js/issues/253)
+ - fix(typescript): force update the opened script snapshot after the language plugin is ready (https://github.com/volarjs/volar.js/issues/254)
+ - feat(typescript): add typescriptObject option to runTsc (https://github.com/volarjs/volar.js/pull/245) - Thanks to @zhiyuanzmj!
+ - fix(typescript): fix issue with transpiled TypeScript files not being registered with a project at all (https://github.com/volarjs/volar.js/pull/250) - Thanks to @piotrtomiak!
+ - docs(source-map): updated API section based on #207 (https://github.com/volarjs/volar.js/pull/248) - Thanks to @alamhubb!
+ - fix(typescript): resolve the shim used for tsc in Typescript v5.7 and up (#252) - Thanks to @kitsune7!
+
## 2.1.10 official, 2.1.11 insiders (2024-10-31)
### Features