diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..15d82d6
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,38 @@
+# language_tool_python Changelog
+
+## 3.0.0 (2025-11-20)
+
+### What's New:
+- Corrected a bug when the default locale is POSIX default (C).
+- Corrected a bug when closing `LanguageTool` instances (deadlocks).
+- Corrected a bug when comparing LT versions (e.g., '5.8' vs '5.10').
+- Added new possible values in LT config (`trustXForwardForHeader`, `suggestionsEnabled` and lang keys).
+- Added a warning if you forget to explicitly close a `LanguageTool` instance.
+- Added online documentation for the package.
+- Added logging (and logs) in the package.
+- Added raising `exceptions.TimeoutError` in `download_lt.http_get`.
+- Added `packaging` as a dependency.
+- Moved exception classes to a separate `exceptions` module (no more importable from `utils`).
+- Edited raised exceptions in some methods/functions:
+ - from `AssertionError` to `ValueError` in `config_file.LanguageToolConfig.__init__`
+ - from `AssertionError` to `exceptions.PathError` in `download_lt.download_lt`
+ - from `AssertionError` to `ValueError` in `download_lt.download_lt`
+ - from `AssertionError` to `ValueError` in `server.LanguageTool.__init__`
+ - from `AssertionError` to `ValueError` in `utils.kill_process_force`
+- Edited some camelCase attributes/methods to snake_case:
+ - `server.LanguageTool.motherTongue` to `server.LanguageTool.mother_tongue`
+ - `server.LanguageTool.newSpellings` to `server.LanguageTool.new_spellings`
+ - `match.Match.ruleId` to `match.Match.rule_id`
+ - `match.Match.offsetInContext` to `match.Match.offset_in_context`
+ - `match.Match.errorLength` to `match.Match.error_length`
+ - `match.Match.ruleIssueType` to `match.Match.rule_issue_type`
+ - `match.Match.matchedText` to `match.Match.matched_text`
+- Edited types of some params:
+ - `directory_to_extract_to` in `dowload_lt.unzip_file` from `str` to `Path`
+ - `directory` in `download_lt.download_zip` from `str` to `Path`
+ - `download_folder` in `utils.find_existing_language_tool_downloads` from `str` to `Path`
+- Edited return types of some methods/functions:
+ - from `str` to `Path` in `utils.get_language_tool_download_path`
+ - from `List[str]` to `List[Path]` in `utils.find_existing_language_tool_downloads`
+ - from `str` to `Path` in `utils.get_language_tool_directory`
+ - from `Tuple[str, str]` to `Tuple[Path, Path]` in `utils.get_jar_info`
diff --git a/coverage-badge.svg b/coverage-badge.svg
index 393c7c5..d822661 100644
--- a/coverage-badge.svg
+++ b/coverage-badge.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/source/conf.py b/docs/source/conf.py
index f86527d..afbf39f 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -9,7 +9,7 @@
project = "language_tool_python"
copyright = "2025, jxmorris12"
author = "jxmorris12"
-release = "2.9.5" # Keep in sync with pyproject.toml
+release = "3.0.0" # Keep in sync with pyproject.toml
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
diff --git a/pyproject.toml b/pyproject.toml
index 8fae5b9..94d4df0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "language_tool_python"
-version = "2.9.5" # Keep in sync with docs/source/conf.py
+version = "3.0.0" # Keep in sync with docs/source/conf.py
requires-python = ">=3.9"
description = "Checks grammar using LanguageTool."
readme = { file = "README.md", content-type = "text/markdown" }
@@ -37,6 +37,7 @@ dependencies = [
[project.urls]
repository = "https://github.com/jxmorris12/language_tool_python.git"
documentation = "https://language-tool-python.readthedocs.io/en/latest/"
+changelog = "https://github.com/jxmorris12/language_tool_python/blob/master/CHANGELOG.md"
[dependency-groups]
tests = [
diff --git a/uv.lock b/uv.lock
index be255fa..bafc1f1 100644
--- a/uv.lock
+++ b/uv.lock
@@ -533,7 +533,7 @@ wheels = [
[[package]]
name = "language-tool-python"
-version = "2.9.5"
+version = "3.0.0"
source = { editable = "." }
dependencies = [
{ name = "packaging" },