diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..f2ffdef4dc93bb362338b8949f6da15d7e58526c
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,17 @@
+# Changelog
+
+## [(next version)](./README.md#for-developers)
+
+* Added a `--user` flag to the installer to allow installing the kernel into the user home directory. This allows installing the kernel without `sudo` when not using a virtual environment.
+* Added `:let` and `:unlet` commands to (un)define local variables.
+	* **Note:** Local variables are currently stored and expanded in text form. Values whose text form is not parsable cannot be stored in local variables, and storing large values may cause performance issues.
+* Added `.sys` to the list of recognized extensions for classical B.
+* Added support for Java 11.
+* Updated ProB 2 to version 3.2.12.
+* Fixed confusing handling of trailing spaces in commands.
+* Fixed `:trace` not showing the parameters and return values of executed transitions.
+* Changed error handling so exception stack traces are no longer shown in the notebook. (They are still logged to the console.)
+
+## [1.0.0](./releases/prob2-jupyter-kernel-1.0.0-all.jar)
+
+* Initial release.
diff --git a/README.md b/README.md
index 5faf850350cd72c17485f95d4167cd07bd048382..7935b58cfc1e82947fc8f84a429a2213b2e0dd5c 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@ This is a [Jupyter](https://jupyter.org/) kernel for the [ProB animator and mode
 
 ## Requirements
 
-* Java 8
-	* Newer Java versions may work, but are not tested.
+* Java 8 or newer
+	* Tested up to Java 11.
 * A Python 3 interpeter with Jupyter installed (`python3 -m pip install jupyter`)
 	* Tested with CPython 3.6, jupyter-core 4.4.0, jupyter-client 5.2.3, notebook 5.6.0.
 	* Newer Jupyter versions should also work.
@@ -26,8 +26,6 @@ This is a [Jupyter](https://jupyter.org/) kernel for the [ProB animator and mode
 	* To use a different ProB home directory than the default, pass `-Dprob.home=/path/to/prob/home` before the `-jar` option. (The path must be absolute.)
 4. (Optional) The jar file can be deleted after installation.
 
-To update the kernel, follow the same instructions with the new jar file. 
-
 ### For developers
 
 1. Clone this repository (`git clone https://gitlab.cs.uni-duesseldorf.de/dgelessus/prob2-jupyter-kernel.git`) or download an archive from [the repository page](https://gitlab.cs.uni-duesseldorf.de/dgelessus/prob2-jupyter-kernel).
@@ -37,7 +35,9 @@ To update the kernel, follow the same instructions with the new jar file.
 	* This assumes that Jupyter can be called using the command `jupyter`. To use a different command in place of `jupyter`, you can pass `-PjupyterCommand=/path/to/jupyter` to the `./gradlew` command.
 	* To use a different ProB home directory than the default, pass `-PprobHome=/path/to/prob/home` to the `./gradlew` command. (The path must be absolute.)
 
-To update the kernel, update the source code, then follow the same instructions. To speed up the process, you can usually use `./gradlew shadowJar` instead of `./gradlew installKernelSpec` - the kernel spec does not need to be reinstalled every time, unless any of the kernel spec files (`src/main/resources/de/prob2/jupyter/kernelspecfiles`) have changed.
+## Updating
+
+To update from an older version of the kernel, follow the installation instructions above. (It's not necessary to uninstall the old version first.) See the [changelog](./CHANGELOG.md) for a list of changes in each release.
 
 ## Uninstalling