diff --git a/CHANGELOG.md b/CHANGELOG.md
index be7f0c9..ff99bc7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+# 3.0.0
+
+:warning: **Breaking Changes:**
+
+* Dropped support for `typescript@<2.8.0`
+* Dropped support for Node.js 4
+* Removed deprecated APIs:
+  * `getIdentifierText`, `isJsxFramgment`, `ImportOptions`
+  * deprected overloads of `isModifierFlagSet`, `findImports` and `getControlFlowEnd`
+* control flow related symbols can no longer be imported from `'tsutils/util/util'`, import directly from `'tsutils/util/control-flow'` or `'tsutils/util'`
+* `isFunctionScopeBoundary` and `isBlockScopeBoundary` now return a enum member of `ScopeBoundary` instead of a boolean
+* `isFunctionScopeBoundary` no longer returns a truthy value for `InterfaceDeclaration`, `TypeAliasDeclaration`
+
+**Features:**
+
+* added utility `isTypeScopeBoundary` returning `ScopeBoundary.Type` or `ScopeBoundary.ConditionalType`
+* added enum `ScopeBoundarySelector` whose members can be used to determine if a declaration belongs to a given `ScopeBoundary` by using bitwise AND
+
+**Bugfixes:**
+
+* `collectVariableUsage` now correctly handles `infer T` nested inside function signatures or mapped types
+* `isCompilerOptionEnabled` correctly handles `skipDefaultLibCHeck` and `suppressImplicitAnyIndexErrors`
+
 # 2.29.0
 
 **Features:**
diff --git a/package.json b/package.json
index f7f9b1f..806f248 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "tsutils",
-  "version": "2.29.0",
+  "version": "3.0.0",
   "description": "utilities for working with typescript's AST",
   "scripts": {
     "compile": "rm -rf {,util,typeguard,test/**}/*.js; tsc -p .",