diff --git a/navbar.md b/navbar.md
index 5ede9bf..115d2ce 100644
--- a/navbar.md
+++ b/navbar.md
@@ -1,7 +1,7 @@
 # Gerrit Code Review
 
 * [About](/about.md)
-* [Downloads](https://gerrit-releases.storage.googleapis.com/index.html)
+* [Releases](/releases/README.md)
 * [Documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.1/index.html)
 * [Issues](/issues.md)
 * [Wiki](https://gerrit.googlesource.com/homepage/+/md-pages/docs/)
diff --git a/releases/2.12.md b/releases/2.12.md
new file mode 100644
index 0000000..9441214
--- /dev/null
+++ b/releases/2.12.md
@@ -0,0 +1,989 @@
+# Gerrit 2.12
+
+Download: **[2.12.5](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.5.war)**
+| [2.12.4](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.4.war)
+| [2.12.3](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.3.war)
+| [2.12.2](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.2.war)
+| [2.12.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.1.war)
+| [2.12](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.war)
+
+Documentation: **[2.12.5](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.5/index.html)**
+| [2.12.4](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.4/index.html)
+| [2.12.3](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.3/index.html)
+| [2.12.2](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/index.html)
+| [2.12.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.1/index.html)
+| [2.12](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/index.html)
+
+[TOC]
+
+## Release Highlights
+
+* New change submission workflows: 'Submit Whole Topic' and 'Submitted Together'.
+
+* Support for GPG Keys and signed pushes.
+
+
+## Important Notes
+
+### Schema Changes
+
+This release contains schema changes. To upgrade:
+
+``` sh
+  java -jar gerrit.war init -d site_path
+```
+
+#### ‘value too long’ error in schema migration
+
+As described in [Issue 4323](https://bugs.chromium.org/p/gerrit/issues/detail?id=4323),
+a ’value too long for type character varying(255)’ error can occur in the
+patch_sets table when migrating to schema version 108.
+
+This error may occur under some circumstances when running the schema
+migration from an earlier version of Gerrit.
+
+On sites where this occurs, it can be fixed with a manual schema update
+according to the comments in the issue.
+
+#### Manual schema upgrade when updating from 2.12 to 2.12.x
+
+When upgrading a site that is already running version 2.12 to 2.12.x, the
+`patch_sets` table must be manually migrated using the `gerrit gsql` SSH
+command or the `gqsl` site program.
+
+For the default H2 database, execute the command:
+
+``` sh
+  alter table patch_sets modify push_certficate clob;
+```
+
+For MySQL, execute the command:
+
+``` sh
+  alter table patch_sets modify push_certficate text;
+```
+
+For PostgreSQL, execute the command:
+
+``` sh
+  alter table patch_sets alter column push_certficate type text;
+```
+
+For other database types, execute the appropriate equivalent command.
+
+Note that the misspelled `push_certficate` is the actual name of the
+column.
+
+When upgrading from a version earlier than 2.12, this manual step is not
+necessary and should be omitted.
+
+### Online Reindexing
+
+To use online reindexing when upgrading to 2.12.x, the server must
+first be upgraded to 2.8 (or 2.9) and then through 2.10 and 2.11 to 2.12.x. If
+reindexing will be done offline, you may ignore this warning and upgrade directly
+to 2.12.x.
+
+### Bouncy Castle Upgrade
+
+When upgrading from version 2.8.4 or older with a site that uses
+Bouncy Castle Crypto, new versions of the libraries will be downloaded. The old
+libraries should be manually removed from site's `lib` folder to prevent the
+startup failure described in [issue 3084](https://code.google.com/p/gerrit/issues/detail?id=3084).
+
+### Solr Index Support
+
+The Solr secondary index is no longer supported. With this release
+the only supported secondary index is Lucene.
+
+### `ref-updated` Event Format Change
+
+The format of the `ref-updated` event has changed. Users of the
+[Jenkins Gerrit Trigger plugin](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger)
+with jobs triggering on `ref-updated` should upgrade to at least
+[version 2.15.1](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger#GerritTrigger-Version2.15.1%28releasedSept142015%29).
+If an upgrade of the plugin is not possible, a workaround is
+to change the branch configuration to type `Path` with a pattern like
+`refs/*/master` instead of `Plain` and `master`.
+
+
+## New Features
+
+### New Change Submission Workflows
+
+* New 'Submit Whole Topic' setting.
+
+  When the
+  [`change.submitWholeTopic`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#change.submitWholeTopic)
+  setting is enabled, all changes belonging to the same
+  topic will be submitted at the same time.
+
+  This setting should be considered experimental, and is disabled by default.
+
+* Submission of changes may include ancestors.
+
+  If a change is submitted that has submittable ancestor changes, those changes
+  will also be submitted.
+
+* The merge queue is removed.
+
+  Changes that cannot be submitted due to missing dependencies will no longer
+  enter the 'Submitted, Merge Pending' state.
+
+
+### GPG Keys and Signed Pushes
+
+Signed push can be enabled by setting
+[`receive.enableSignedPush`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.enableSignedPush)
+to true. When a client pushes with `git push --signed`, Gerrit ensures that the push
+certificate is valid and signed with a valid public key stored in the
+`refs/meta/gpg-keys` branch of the `All-Users` repository.
+
+When signed push is enabled, and
+[`gerrit.editGpgKeys`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#gerrit.editGpgKeys)
+is set to true, users may upload their public GPG
+key via the REST API or UI. If this setting is not enabled, GPG keys may only be added by administrators
+with direct access to the `All-Users` repository.
+
+Administrators may also configure
+[`receive.certNonceSeed`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.certNonceSeed)
+and
+[`receive.certNonceSlop`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.certNonceSlop).
+
+### Secondary Index
+
+* [Issue 3333](http://code.google.com/p/gerrit/issues/detail?id=3333):
+Support searching for changes by author and committer.
+
+  Changes are indexed by the git author and committer of the latest patch set,
+  and can be searched with the `author:` and `committer:` operators.
+
+  Changes are matched on either the exact whole email address, or on parts of the
+  name or email address.
+
+* Add `from:` search operator to match by owner of change or author of comments.
+
+* Add `commentby:` search operator to search by author of comments.
+
+* Change the `topic:` search operator to search by the exact topic name.
+
+* Add `intopic:` search operator to search by topics containing the search term.
+
+* [Issue 3291](http://code.google.com/p/gerrit/issues/detail?id=3291):
+Add `has:edit` search operator to match changes that have edit revisions on them.
+
+* Allow configuration of maximum query size.
+
+  [`index.maxTerms`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#index.maxTerms)
+  can be set to limit the number of leaf index terms.
+
+* Expose Lucene index writers for plugins.
+
+  Plugins can now reconfigure various Lucene performance related parameters
+  at runtime.
+
+* Make Lucene index writers auto-commit writers.
+
+  Plugins can now temporarily turn on auto-committing in situations where it makes
+  sense to enforce all changes to be written to disk ASAP.
+
+### UI
+
+#### General
+
+* Edit and diff preferences can be modified from the user preferences screen.
+
+  Previously it was only possible to edit these preferences from the actual
+  diff and edit screens.
+
+* Add 'Edits' to the 'My' dashboard menu to list changes on which the user
+has an unpublished edit revision.
+
+* Support for URL aliases.
+
+  Administrators may define
+  [URL aliases](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#urlAlias)
+  to map plugin screens into the Gerrit URL namespace.
+
+  Plugins may use user-specific URL aliases to replace certain screens for certain
+  users.
+
+
+#### Project Screen
+
+* New tab to list the project's tags, similar to the branch list.
+
+
+#### Inline Editor
+
+* Store and load edit preferences in git.
+
+  Edit preferences are stored and loaded to/from the `All-Users` repository.
+
+* Add 'auto close brackets' feature.
+
+* Add 'match brackets' feature.
+
+* Make the cursor blink rate customizable.
+
+* Add support for Emacs and Vim key maps.
+
+
+#### Change Screen
+
+* [Issue 3318](http://code.google.com/p/gerrit/issues/detail?id=3318):
+Highlight 'Reply' button if there are draft comments on any patch set.
+
+  If any patch set of the change has a draft comment by the current user,
+  the 'Reply' button is highlighted.
+ 
+  The icons depicting draft comments are removed from the revisions drop-down
+  list.
+
+* [Issue 1100](http://code.google.com/p/gerrit/issues/detail?id=1100):
+Publish all draft comments when replying to a change.
+
+  All draft comments, including those on older patch sets, are published when
+  replying to a change.
+
+* Show file size increase/decrease for binary files.
+
+* Show uploader if different from change owner.
+
+* Show push certificate status.
+
+* Show change subject as tooltip on related changes list.
+
+  This helps to identify changes when the subject is truncated in the list.
+
+
+#### Side-By-Side Diff
+
+* [Issue 3293](http://code.google.com/p/gerrit/issues/detail?id=3293):
+Add syntax highlighting for Puppet.
+
+* [Issue 3447](http://code.google.com/p/gerrit/issues/detail?id=3447):
+Add syntax highlighting for VHDL.
+
+
+#### Group Screen
+
+* [Issue 1479](http://code.google.com/p/gerrit/issues/detail?id=1479): Group audit log.
+
+  The group screen now includes an 'Audit Log' panel showing member additions,
+  removals, and the user who made the change.
+
+### API
+
+Several new APIs are added.
+
+#### Accounts
+
+* Suggest accounts.
+
+#### Tags
+
+* List tags.
+
+* Get tag.
+
+
+### REST API
+
+New REST API endpoints and new options on existing endpoints.
+
+
+#### Accounts
+
+* [Set Username](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#set-username):
+Set the username of an account.
+
+* [Get Account Details](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#get-detail):
+Get the details of an account.
+
+  In addition to the [AccountInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#account-info)
+  fields returned by the existing
+  [Get Account endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#get-account),
+  the new REST endpoint returns the registration date of the account and the
+  timestamp of when contact information was filed for this account.
+
+
+#### Changes
+
+* [Set Review](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#set-review):
+Add an option to omit duplicate comments.
+
+* [Download Content](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#get-safe-content):
+Download the content of a file from a certain revision, in a
+safe format that poses no risk for inadvertent execution of untrusted code.
+
+* [Get Submitted Together](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#submitted-together):
+Get the list of all changes that will be submitted at
+the same time as the change.
+
+* [Issue 1100](http://code.google.com/p/gerrit/issues/detail?id=1100):
+[Set Review](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#set-review):
+Add an option to publish draft comments on all revisions.
+
+#### Config
+
+* [Get Server Info](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-config.html#get-info):
+Return information about the Gerrit server configuration.
+
+* [Confirm Email](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-config.html#confirm-email):
+Confirm that the user owns an email address.
+
+
+#### Groups
+
+* [List Groups](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-groups.html#list-group):
+Add option to suggest groups, allowing group auto-completion to be used in a plugin's UI.
+
+* [Get Audit Log](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-groups.html#get-audit-log):
+Get the audit log of a Gerrit internal group, showing member
+additions, removals, and the user who made the change.
+
+
+#### Projects
+
+* [Run GC](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-projects.html#run-gc):
+Add `aggressive` option to specify whether or not to run an aggressive
+garbage collection.
+
+* [List Tags](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-projects.html#list-tags):
+Support filtering by substring and regex, and pagination with `--start` and `--end`.
+
+### SSH
+
+* Add support for ZLib Compression.
+
+  To enable compression use the
+  [`sshd.enableCompression` setting](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#sshd.enableCompression).
+
+* Add support for hmac-sha2-256 and hmac-sha2-512 as MACs.
+
+### Plugins
+
+#### General
+
+* Gerrit client can now pass JavaScriptObjects to extension panels.
+
+* New UI extension point for header bar in change screen.
+
+* New UI extension point to password screen.
+
+* New UI extension points to project info screen.
+
+* New UI extension point for pop down buttons on change screen.
+
+* New UI extension point for buttons in header bar on change screen.
+
+* New UI extension point at bottom of the user preferences screen.
+
+* New UI extension point for the 'Included In' drop-down panel.
+
+  By implementing the
+  [Included In interface](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/dev-plugins.html#included-in),
+  plugins may add entries to the 'Included In' dropdown menu on the change screen.
+
+* Plugins can extend Gerrit screens with GWT controls.
+
+* Plugins can add custom settings screens.
+
+* Referencing groups in `project.config`.
+
+  Plugins can refer to groups so that when they are renamed, the project
+  config will also be updated in this section.
+
+* API
+    * Allow to use `CurrentSchemaVersion`.
+    * Allow to use `InternalChangeQuery.query()`.
+    * Allow to use `JdbcUtil.port()`.
+    * Allow to use GWTORM `Key` classes.
+
+
+### Other
+
+* [Issue 3401](http://code.google.com/p/gerrit/issues/detail?id=3401):
+Add option to
+[disable registration of new email addresses](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#sendemail.allowRegisterNewEmail).
+
+* [Issue 2061](http://code.google.com/p/gerrit/issues/detail?id=2061):
+Add Support for `git-upload-archive`.
+
+  This allows use the standard `git archive` command to create an archive
+  of the content of a repository.
+
+* Add a background job to automatically abandon inactive changes.
+
+  The
+  [changeCleanup](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#changeCleanup)
+  configuration can be set to periodically check for inactive changes and automatically abandon them.
+
+* Add support for the
+[DB2 database](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/database-setup.html#createdb_db2).
+
+* [Issue 3441](http://code.google.com/p/gerrit/issues/detail?id=3441):
+Add support for the
+[Apache Derby database](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/database-setup.html#createdb_derby).
+
+* Download commands plugin: Use commit IDs for download commands when change refs are hidden.
+
+  Git has a configuration option to hide refs from the initial advertisement
+  (`uploadpack.hideRefs`). This option can be used to hide the change refs from
+  the client. As consequence this prevented fetching changes by change ref from
+  working.
+
+  Setting `download.checkForHiddenChangeRefs` in the `gerrit.config` to true
+  allows the download commands plugin to check for hidden change refs.
+
+* Add a new 'Maintain Server' global capability.
+
+  Members of a group with the 'Maintain Server' capability may view caches, tasks,
+  and queues, and invoke the index REST API on changes.
+
+## Bugfixes
+
+* [Issue 3499](http://code.google.com/p/gerrit/issues/detail?id=3499):
+Fix syntax highlighting of raw string literals in go.
+
+* [Issue 3643](http://code.google.com/p/gerrit/issues/detail?id=3643):
+Fix syntax highlighting of ES6 string templating using backticks.
+
+* [Issue 3653](http://code.google.com/p/gerrit/issues/detail?id=3653):
+Correct timezone in sshd log after DST change.
+
+  When encountering a DST switch, the timezone wasn't updated until
+  the server was reloaded.
+
+* [Issue 3306](http://code.google.com/p/gerrit/issues/detail?id=3306):
+Allow admins to read, push and create on `refs/users/default`.
+
+* [Issue 3212](http://code.google.com/p/gerrit/issues/detail?id=3212):
+Fix failure to run `init` when `--site-path` option is not explicitly given.
+
+* Make email validation case insensitive.
+
+  While [RFC 5321 section 2.3.11](https://tools.ietf.org/html/rfc5321#section-2.3.11)
+  allows for the local-part (the part left of the '@') of an email address to be case
+  sensitive, the domain portion is case insensitive according to
+  [RFC 1035 section 3.1](https://tools.ietf.org/html/rfc1035#section-3.1),
+  and in practice, even the local-part is typically case insensitive also.
+
+* `commit-msg` hook: Don't add `Change-Id` line on temporary commits.
+
+  Commits created with `git commit --fixup` or `git commit --squash` are not
+  intended to be pushed to Gerrit, and don't need a `Change-Id` line.
+
+  This also prevents changes from being accidentally uploaded, at least for
+  projects that have the 'Require Change-Id' configuration enabled.
+
+* [Issue 3444](http://code.google.com/p/gerrit/issues/detail?id=3444):
+download-commands plugin: Fix clone with commit-msg hook when project name
+contains '/'.
+
+* Use full ref name in `refName` attribute of `ref-updated` events.
+
+  The [refUpdate attribute](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/json.html#refUpdate)
+  in `ref-updated` events did not include the full name
+  of the ref in the `refName` attribute, i.e. `master` was used instead of
+  `refs/heads/master`.
+
+  Support for the new format is added in
+  [version 2.15.1 of the Jenkins Gerrit Trigger plugin](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger#GerritTrigger-Version2.15.1%28releasedSept142015%29).
+
+  Users who are unable to upgrade the plugin may instead change the
+  trigger's branch configuration to type `Path` with a pattern like
+  `refs/*/master` instead of `Plain` and `master`.
+
+* [Issue 3714](https://code.google.com/p/gerrit/issues/detail?id=3714):
+Improve visibility of comments on dark themes.
+
+* Fix highlighting of search results and trailing whitespaces in intraline
+diff chunks.
+
+* Fix server error when listing annotated/signed tag that has no tagger info.
+
+* Don't create new account when claimed OAuth identity is unknown.
+
+  The Claimed Identity feature was enabled to support old Google OpenID accounts,
+  that cannot be activated anymore. In some corner cases, when for example the URL
+  is not from the production Gerrit site, for example on a staging instance, the
+  OpenID identity may deviate from the original one. In case of mismatch, the lookup
+  of the user for the claimed identity would fail, causing a new account to be
+  created.
+
+* Suggest to upgrade installed plugins per default during site initialization
+to new Gerrit version.
+
+  The default was 'No' which resulted in some sites not upgrading core
+  plugins and running the wrong versions.
+
+* [Issue 3698](https://code.google.com/p/gerrit/issues/detail?id=3698):
+Fix creation of the administrator user on databases with pre-allocated
+auto-increment column values.
+
+  When using a database configuration where auto-increment column values are
+  pre-allocated, it was possible that the 'Administrators' group was created
+  with an ID other than `1`. In this case, the created admin user was not added
+  to the correct group, and did not have the correct admin permissions.
+
+* [Issue 3018](https://code.google.com/p/gerrit/issues/detail?id=3018):
+Fix query for changes using a label with a group operator.
+
+  The `group` operator was being ignored when searching for changes with labels
+  because the search index does not contain group information.
+
+* Fix online reindexing of changes that don't already exist in the index.
+
+  Changes are now always reloaded from the database during online reindex.
+
+* Fix reading of plugin documentation.
+
+  Under some circumstances it was possible to fail with an IO error.
+
+## Documentation Updates
+
+* [Issue 412](https://code.google.com/p/gerrit/issues/detail?id=412):
+Update documentation of `commentlink.match` regular expression to clarify
+that the expression is applied to the rendered HTML.
+
+* Remove warning about unstable change edit REST API endpoints.
+
+  These endpoints should be considered stable since version 2.11.
+
+* Document that `ldap.groupBase` and `ldap.accountBase` are repeatable.
+
+## Dependency Updates
+
+* Upgrade Asciidoctor to 1.5.2
+
+* Upgrade AutoValue to 1.1
+
+* Upgrade Bouncy Castle to 1.52
+
+* Upgrade CodeMirror to 5.7
+
+* Upgrade gson to 2.3.1
+
+* Upgrade guava to 19.0-RC2
+
+* Upgrade gwtorm to 1.14-20-gec13fdc
+
+* Upgrade H2 to 1.3.176
+
+* Upgrade httpcomponents to 4.4.1
+
+* Upgrade Jetty to 9.2.13.v20150730
+
+* Upgrade JGit to 4.1.1.201511131810-r
+
+* Upgrade joda-time to 2.8
+
+* Upgrade JRuby to 1.7.18
+
+* Upgrade jsch to 0.1.53
+
+* Upgrade JUnit to 4.11
+
+* Upgrade Lucene to 5.3.0
+
+* Upgrade Prolog Cafe 1.4.1
+
+* Upgrade servlet API to 8.0.24
+
+* Upgrade Truth to version 0.27
+
+## Bugfix Releases
+
+### 2.12.5
+
+* New preference to enable line wrapping in diff screen and inline editor.
+
+* Fix the diff and edit preference dialogs for smaller screens.
+
+  On smaller screens the options at the bottom of the dialogs would
+  get cut off, making it difficult to change them.
+
+* [Issue 4521](https://bugs.chromium.org/p/gerrit/issues/detail?id=4521):
+Fix internal server error during validation of email addresses.
+
+  When creating a new account or adding a new email address to an existing
+  account, the email validation crashed.
+
+* Lucene stability improvements.
+
+  Each Lucene index is now written using a dedicated background thread. Lucene
+  threads may not be cancelled, to prevent interruptions while writing.
+
+* Don't try to change username that is already set.
+
+  Since Gerrit version 2.1.4 it is not allowed to change the username once
+  it has been set, and attempting to do so results in an exception.
+
+  If `ldap.accountSshUserName` is set in the `gerrit.config` using
+  `${userPrincipalName.localPart}` to initialize the username from the user's
+  email address, and then the email address is changed, the username gets
+  resolved to something different and the account manager tried to change it.
+  As a result, an exception was raised and the user could no longer log in.
+
+  Instead of trying to change the username, a warning is logged.
+
+* [Issue 4006](https://bugs.chromium.org/p/gerrit/issues/detail?id=4006):
+Prevent search limit parameter from exceeding maximum integer value.
+
+* Fix internal server error when generating task names.
+
+* Print proper names for query tasks in the output of the `show-queue` command.
+
+* Double-check change status when auto-abandoning changes.
+
+  It was possible that changes could be updated in the time between the query
+  results being returned and the change being abandoned.
+
+### 2.12.4
+
+* [Issue 4400](https://bugs.chromium.org/p/gerrit/issues/detail?id=4400):
+Fix `AlreadyClosedException` in Lucene index.
+
+  If a Lucene indexing thread was interrupted by an SSH connection being
+  closed, this would also close file handles being used to read the index.
+
+  Lucene queries are now executed on background threads to isolate them
+  from SSH threads.
+
+  This may also reduce latency for user dashboards on a multi-core system as
+  each query for the different sections can now run on separate threads and
+  return results when ready.
+
+* [Issue 4249](https://bugs.chromium.org/p/gerrit/issues/detail?id=4249):
+Fix 'Duplicate stages not allowed' error during indexing.
+
+* [Issue 4238](https://bugs.chromium.org/p/gerrit/issues/detail?id=4238):
+Fix 'not found' error when browsing tree in gitweb.
+
+  The `refs/heads/` prefix was incorrectly being added to `HEAD`, causing a
+  '404 Not Found' error.
+
+* Allow to read repositories that do not end with `.git`.
+
+* [Issue 4262](https://bugs.chromium.org/p/gerrit/issues/detail?id=4262):
+Fix GPG push certificate for first patch set of new changes.
+
+  The GPG certificate was not being set for the first patch set of new
+  changes.
+
+* [Issue 4296](https://bugs.chromium.org/p/gerrit/issues/detail?id=4296):
+Fix internal error when a query does not contain any token.
+
+* [Issue 4241](https://bugs.chromium.org/p/gerrit/issues/detail?id=4241):
+Fix 'Cannot format velocity template' error when sending notification emails.
+
+* Fix `sshd.idleTimeout` setting being ignored.
+
+  The `sshd.idleTimeout` setting was not being correctly set on the SSHD
+  backend, causing idle sessions to not time out.
+
+* [Issue 4324](https://bugs.chromium.org/p/gerrit/issues/detail?id=4324):
+Set the correct uploader on new patch sets created via the inline editor.
+
+* Log a warning instead of failing when invalid commentlinks are configured.
+
+* [Issue 4136](https://bugs.chromium.org/p/gerrit/issues/detail?id=4136):
+Fix support for `HEAD` requests in the REST API.
+
+  Sending a `HEAD` request failed with '404 Not Found'.
+
+* Return proper error response when trying to confirm an email that is already
+used by another user.
+
+* [Issue 4318](https://bugs.chromium.org/p/gerrit/issues/detail?id=4318)
+Fix 'Rebase if Necessary' merge strategy to prevent introducing a duplicate
+commit when submitting a merge commit.
+
+* [Issue 4332](https://bugs.chromium.org/p/gerrit/issues/detail?id=4332):
+Allow `local` as a valid TLD for outgoing emails.
+
+* Bypass hostname verification when `sendemail.sslVerify` is disabled.
+
+* [Issue 4398](https://bugs.chromium.org/p/gerrit/issues/detail?id=4398):
+Replication: Consider ref visibility when scheduling replication.
+
+  It was possible for refs to be replicated to remotes despite not being
+  visible to groups mentioned in the `authGroup` setting.
+
+* [Issue 4036](https://bugs.chromium.org/p/gerrit/issues/detail?id=4036):
+Fix hanging query when using `is:watched` without authentication.
+
+### 2.12.3
+
+* Fix SSL security issue in the SMTP email relay.
+
+  The hostname of the SSL socket was not verified. This made the read
+  from the socket insecure since without verifying the hostname it may
+  be [vulnerable to a man-in-the-middle attack](https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf).
+
+* [Issue 3895](https://bugs.chromium.org/p/gerrit/issues/detail?id=3895):
+Fix failure to submit with 'Rebase if Necessary' after changes were reordered
+with interactive rebase.
+
+* [Issue 4052](https://bugs.chromium.org/p/gerrit/issues/detail?id=4052):
+Fix failure to start server after upgrade from version 2.9.4.
+
+* [Issue 3891](https://bugs.chromium.org/p/gerrit/issues/detail?id=3891):
+Fix query with `label:` operator and zero value.
+
+* [Issue 4112](https://bugs.chromium.org/p/gerrit/issues/detail?id=4112):
+Fix failure to submit changes caused by empty user edit ref.
+
+* [Issue 4087](https://bugs.chromium.org/p/gerrit/issues/detail?id=4087):
+Fix failure to submit change when a branch is created on the change ref.
+
+* [Issue 4155](https://bugs.chromium.org/p/gerrit/issues/detail?id=4155):
+Fix tags REST API to correctly return all tags.
+
+* [Issue 4154](https://bugs.chromium.org/p/gerrit/issues/detail?id=4154):
+Add support for `.team` and several more TLDs in email address validation.
+
+  Update commons-validator to 1.5.1.
+
+* [Issue 4163](https://bugs.chromium.org/p/gerrit/issues/detail?id=4163):
+Prevent removal of non-voting reviewers on submit of change.
+
+* [Issue 2647](https://bugs.chromium.org/p/gerrit/issues/detail?id=2647):
+Fix usage of `CTRL-C` on change screen.
+
+* [Issue 4236](https://bugs.chromium.org/p/gerrit/issues/detail?id=4236):
+Fix internal error when pushing an amended commit with the `%edit` option.
+
+* [Issue 3426](https://bugs.chromium.org/p/gerrit/issues/detail?id=3426):
+Fix pushing changes with `%base` option or `newChangeForAllNotInTarget` option.
+
+* Show 'Submitted Together' tab for changes with same topic.
+
+* Improve submit button tooltip messages shown when change is not submittable.
+
+* Fix firing of the `topic-changed` hook.
+
+* Remove `--dry-run` option from the `Reindex` site program.
+
+  The implementation of the option was removed, but the option was mistakenly
+  added back to the command and did not actually work.
+
+* Print proper task names in the output of the `show-queues` command.
+
+* Replication plugin: Double check if a ref is missing locally before deleting
+from remote.
+
+* Show an error message when trying to add a non-existent group to an ACL.
+
+
+### 2.12.2
+
+* Upgrade Apache commons-collections to version 3.2.2.
+
+  Includes a fix for a [remote code execution exploit](https://issues.apache.org/jira/browse/COLLECTIONS-5800).
+
+* [Issue 3919](https://code.google.com/p/gerrit/issues/detail?id=3919):
+Explicitly set parent project to 'All-Projects' when a project is created
+without giving the parent.
+
+* Don't add message twice on abandon or restore via ssh review command.
+
+  When abandoning or reviewing a change via the ssh `review` command, and
+  providing a message with the `--message` option, the message was added to
+  the change twice.
+
+* Clear the input box after cancelling add reviewer action.
+
+  When the action was cancelled, the content of the input box was still
+  there when opening it again.
+
+* Fix internal server error when aborting ssh command.
+
+* [Issue 3969](https://code.google.com/p/gerrit/issues/detail?id=3969):
+Fix internal server error when submitting a change with 'Rebase If Necessary'
+strategy.
+
+### 2.12.1
+
+#### General
+
+* Fix column type for signed push certificates.
+
+  The column type `VARCHAR(255)` was too small, preventing some PGP push
+  certificates from being stored.
+
+* Add the `DRAFT_COMMENTS` option to the list changes REST API endpoint
+and mark it as deprecated.
+
+  It was removed in version 2.12 because it's not needed any more by the UI,
+  but this caused failures for clients that still use it.
+
+  Now it is added back, although it does not do anything and is marked as
+  deprecated.
+
+* [Issue 3669](https://code.google.com/p/gerrit/issues/detail?id=3669):
+Fix schema migration when migrating to 2.12.x directly from a version
+earlier than 2.11.
+
+* [Issue 3733](https://code.google.com/p/gerrit/issues/detail?id=3733):
+Correctly detect symlinked log directory on startup.
+
+  If `$site_path/logs` was a symlink, the server would not start.
+
+* [Issue 3871](https://code.google.com/p/gerrit/issues/detail?id=3871):
+Throw an explicit exception when failing to load a change from the database.
+
+  If a change could not be loaded from the database, for example if it was
+  manually removed from the changes table but references to it were remaining
+  in other tables, a null change was returned which would then lead to an
+  'Internal Server Error' that was difficult to track down. Now an error is
+  raised earlier which will help administrators to find the root cause.
+
+* [Issue 3743](https://code.google.com/p/gerrit/issues/detail?id=3743):
+Use submitter identity as committer when using 'Rebase if Necessary' merge
+strategy.
+
+  When submitting a change that required rebase, the committer was being
+  set to 'Gerrit Code Review' instead of the name of the submitter.
+
+* [Issue 3758](https://code.google.com/p/gerrit/issues/detail?id=3758):
+Fix serving of static resources when deployed in application container.
+
+  When deployed in a container, for example Tomcat, it was not possible to
+  load the UI because static content could not be loaded from the WAR file.
+
+* [Issue 3790](https://code.google.com/p/gerrit/issues/detail?id=3790):
+Fix documentation link when deployed in application container.
+
+  When deployed in a container, for example Tomcat, the 'Documentation' menu
+  was missing.
+
+* [Issue 3786](https://code.google.com/p/gerrit/issues/detail?id=3786):
+Fix SQL statement syntax in schema migration.
+
+  An extra semicolon was preventing migration from 2.11.x to 2.12 when using
+  an Oracle database.
+
+* Send email using email queue instead of the default queue.
+
+  Some emails sent asynchronously were already being sent using that queue
+  but some were not. This was confusing for a gerrit administrator because
+  if there is a build up of `send-email` tasks in the queue, he would
+  think that increasing `sendemail.threadPoolSize` would help but it did not
+  because some of the email were sent using the default queue which is
+  configurable using `execution.defaultThreadPoolSize`.
+
+* Fix XSRF token cookie to honor `auth.cookieSecure` setting.
+
+* [Issue 3767](https://code.google.com/p/gerrit/issues/detail?id=3767):
+Fix replication of first patch set for new changes.
+
+  When new changes were pushed from the command line, the first patch
+  set did not get replicated to destinations.
+
+* [Issue 3771](https://code.google.com/p/gerrit/issues/detail?id=3771):
+Remove `index.defaultMaxClauseCount` configuration option.
+
+  When `index.maxTerms` was either not set (thus no limit) or set to a value
+  higher than `index.defaultMaxClauseCount` it was possible that viewing the
+  related changes tab could cause a 'Too many clauses' error for changes that
+  have a lot of related changes.
+
+  The `index.defaultMaxClauseCount` configuration option is removed, and the
+  existing `index.maxTerms` is reused. The default value of `index.maxTerms`
+  is reduced from 'no limit' to 1024.
+
+* [Issue 3919](https://code.google.com/p/gerrit/issues/detail?id=3919):
+Explicitly set parent project to 'All-Projects' when a project is created
+without giving the parent.
+
+* [Issue 3948](https://code.google.com/p/gerrit/issues/detail?id=3948):
+Fix submit of project parent updates on `refs/meta/config`.
+
+  When submitting a change on `refs/meta/config` to update a project's parent,
+  the error 'The change must be submitted by a Gerrit administrator' was being
+  displayed even when the submitter was an admin. The submit was successful
+  when clicking 'Submit' a second time.
+
+* [Issue 3811](https://code.google.com/p/gerrit/issues/detail?id=3811):
+Fix submittability of merge commits that resolve merge conflicts.
+
+  If a series of changes contained a change that conflicted with the destination
+  branch, but the conflict was solved by a merge commit at the tip of the
+  series, the series was not submittable.
+
+* [Issue 3883](https://code.google.com/p/gerrit/issues/detail?id=3883):
+Respect the `core.commentchar` setting from `.gitconfig` in `commit-msg` hook.
+
+#### UI
+
+* [Issue 3894](https://code.google.com/p/gerrit/issues/detail?id=3894):
+Fix display of 'Related changes' after change is rebased in web UI:
+
+* [Issue 3071](https://code.google.com/p/gerrit/issues/detail?id=3071):
+Fix display of submodule differences in side-by-side view.
+
+* [Issue 3718](https://code.google.com/p/gerrit/issues/detail?id=3718):
+Hide avatar images when no avatars are available.
+
+  The UI was showing a transparent empty image with a border.
+
+* [Issue 3731](https://code.google.com/p/gerrit/issues/detail?id=3731):
+Fix syntax higlighting of tcl files.
+
+* [Issue 3863](https://code.google.com/p/gerrit/issues/detail?id=3863):
+Fix display of active row marker in tag list.
+
+  Clicking on one of the rows would cause the tag name to disappear.
+
+* [Issue 1207](https://code.google.com/p/gerrit/issues/detail?id=1207):
+Fix keyboard shortcuts for non-US keyboards on side-by-side diff screen.
+
+  The forward/backward navigation keys `[` and `]` only worked on keyboards where
+  these characters could be typed without using any modifier key (like CTRL, ALT,
+  etc..).
+
+  Note that the problem still exists on the unified diff screen.
+
+* Improve tooltip on 'Submit' button when 'Submit whole topic' is enabled
+and the topic can't be submitted due to some changes not being ready.
+
+#### Plugins
+
+* [Issue 3821](https://code.google.com/p/gerrit/issues/detail?id=3821):
+Fix repeated reloading of plugins when running on OpenJDK 8.
+
+  OpenJDK 8 uses nanotime precision for file modification time on systems that
+  are POSIX 2008 compatible. This leads to precision incompatibility when
+  comparing the plugin's JAR file timestamp, resulting in the plugin being
+  reloaded every minute.
+
+* [Issue 3741](https://code.google.com/p/gerrit/issues/detail?id=3741):
+Fix handling of merge validation exceptions emitted by plugins.
+
+  If a plugin raised an exception, it was reported to the user as 'Change is
+  new', rather than 'Missing dependency'.
+
+* Allow plugins to get the caller in merge validation requests.
+
+  Plugins that implement the `MergeValidationListener` interface now get the
+  caller (the user who initiated the merge) in the `onPreMerge` method.
+
+  Existing plugins that implement this interface must be adapted to the new
+  method signature.
+
+* [Issue 3892](https://code.google.com/p/gerrit/issues/detail?id=3892):
+Allow plugins to suggest reviewers based on either change or project
+resources.
+
+#### Documentation
+
+* Update documentation of `commentlink` to reflect changed search URL.
+
+* Add missing documentation of valid `database.type` values.
+
+#### Upgrades
+
+* Upgrade JGit to 4.1.2.201602141800-r.
diff --git a/releases/2.13.md b/releases/2.13.md
new file mode 100644
index 0000000..618e92e
--- /dev/null
+++ b/releases/2.13.md
@@ -0,0 +1,500 @@
+# Gerrit 2.13
+
+Download: **[2.13.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.1.war)**
+| [2.13](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.war)
+
+Documentation: **[2.13.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.1/index.html)**
+| [2.13](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/index.html)
+
+[TOC]
+
+## Release Highlights
+
+* Support for Large File Storage (LFS)
+* Metrics interface
+* Hooks plugin
+* Secondary index for accounts
+* File annotations (blame) in side-by-side diff
+
+## Important Notes
+
+### Schema Changes
+
+This release contains schema changes. To upgrade:
+
+``` sh
+  java -jar gerrit.war init -d site_path
+```
+
+### Online Reindexing
+
+To use online reindexing for the `changes` secondary index when upgrading
+to 2.13.x, the server must first be upgraded to 2.8 (or 2.9) and then through
+2.10, 2.11 and 2.12. Skipping a version will prevent the online reindexer from
+working.
+
+Gerrit 2.13 introduces a new secondary index for accounts, and this must be
+indexed offline before starting Gerrit:
+
+``` sh
+  java -jar gerrit.war reindex --index accounts -d site_path
+```
+
+If reindexing will be done offline, you may ignore these warnings and upgrade
+directly to 2.13.x using the following command that will reindex both `changes`
+and `accounts` secondary indexes:
+
+``` sh
+  java -jar gerrit.war reindex -d site_path
+```
+
+### Hooks Plugin
+
+The server side hooks functionality is moved to a core plugin. Sites
+that make use of server side hooks must install this plugin during site init.
+
+## New Features
+
+### Large File Storage (LFS)
+
+Gerrit provides an [extension point](https://gerrit-review.googlesource.com/Documentation/2.13/dev-plugins.html#lfs-extension)
+that enables development of plugins implementing the
+[LFS protocol](https://github.com/github/git-lfs/blob/master/docs/api/v1/http-v1-batch.md).
+
+By setting
+[`lfs.plugin`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#lfs.plugin)
+the administrator can configure the name of the plugin which handles LFS requests.
+
+### Access control for git submodule subscriptions
+
+To prevent potential security breaches as described in
+[issue 3311](https://bugs.chromium.org/p/gerrit/issues/detail?id=3311), it is now
+only possible for a project to subscribe to a submodule if the submodule
+explicitly allows itself to be subscribed.
+
+Please see the
+[submodules user guide](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-submodules.html)
+for details.
+
+Note that when upgrading from an earlier version of Gerrit, permissions for
+any existing subscriptions will be automatically added during the database
+schema migration.
+
+### Metrics
+
+Metrics about Gerrit's internal state can be sent to external
+monitoring systems.
+
+Plugins can provide implementations of the metrics interface to
+report metrics to different monitoring systems. The following
+plugins are available:
+
+* [JMX](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-jmx)
+
+* [Graphite](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-graphite)
+
+* [Elastic Search](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-elasticsearch)
+
+Plugins can also provide their own metrics.
+
+See the
+[metrics documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/metrics.html)
+for further details.
+
+### Hooks
+
+Server side hooks are moved to the
+[hooks plugin](https://gerrit-review.googlesource.com/#/admin/projects/plugins/hooks).
+Sites that make use of server side hooks should install this
+plugin. After installing the plugin, no additional configuration is needed.
+The plugin uses the same configuration settings in `gerrit.config`.
+
+### Secondary Index
+
+* The secondary index now supports indexing of accounts.
+
+  The
+  [reindex program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-reindex.html)
+  by default reindexes all changes and accounts. A new
+  option allows to explicitly specify whether to reindex changes or accounts.
+
+  The `suggest.fullTextSearch`, `suggest.fullTextSearchMaxMatches` and
+  `suggest.fullTextSearchRefresh` configuration options are removed. Full text
+  search is supported by default with the account secondary index.
+
+* New ssh command to
+[reindex changes](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/cmd-index-changes.html).
+
+### User Interface
+
+* The UI can now be loaded in an iFrame by enabling
+[`gerrit.canLoadInIFrame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#gerrit.canLoadInIFrame)
+in the site configuration.
+
+#### Change Screen
+
+* [Issue 106](https://bugs.chromium.org/p/gerrit/issues/detail?id=106):
+Allow to select merge commit's parent for diff base in change screen.
+
+* [Issue 3035](https://bugs.chromium.org/p/gerrit/issues/detail?id=3035):
+Allow to remove specific votes from a change, while leaving the reviewer on the
+change.
+
+* [Issue 3487](https://bugs.chromium.org/p/gerrit/issues/detail?id=3487):
+Use 'Ctrl-Alt-e' instead of 'e' to open edit mode.
+
+#### Diff Screens
+
+* Add all syntax highlighting available in CodeMirror.
+
+* Improve search experience in diff screen.
+
+  Ctrl-F, Ctrl-G and Shift-Ctrl-G now bind to the search dialog box provided by
+  CodeMirror's search add-on. Enter and Shift-Enter navigate among the search
+  results from the CodeMirror search, just like they do in a normal browser
+  search. Esc now clears the search result.
+
+  If the user sets `Render` to `Slow` in the diff preferences and the file is less
+  than 4000 lines (huge), then Ctrl-F, Ctrl-G and Shift-Ctrl-G fall back to the
+  browser search.
+
+* [Issue 2968](https://bugs.chromium.org/p/gerrit/issues/detail?id=2968):
+Allow to go back to change list by keyboard shortcut from diff screens.
+
+* Blame annotations.
+
+  By enabling
+  [`change.allowBlame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#change.allowBlame),
+  blame annotations can be shown in the side-by-side diff
+  screen gutter. Clicking the annotation opens the relevant change.
+
+#### User Preferences
+
+* [Issue 989](https://bugs.chromium.org/p/gerrit/issues/detail?id=989):
+New option to control email notifications.
+
+  Users can now choose between 'Enabled', 'Disabled' and 'CC Me on Comments I Write'.
+
+* New option to control adding 'Signed-off-by' footer in commit message of new changes
+created online.
+
+* New option to control auto-indent width in inline editor.
+
+* [Issue 890](https://bugs.chromium.org/p/gerrit/issues/detail?id=890):
+New diff option to control whether to skip unchanged files when navigating to
+the previous or the next file.
+
+### Changes
+
+In order to avoid potentially confusing behavior, when submitting changes in a
+batch, submit type rules may not be used to mix submit types on a single branch,
+and trying to submit such a batch will fail.
+
+### REST API
+
+#### Accounts
+
+* [Issue 3766](https://bugs.chromium.org/p/gerrit/issues/detail?id=3766):
+Allow users with the
+['ModifyAccount' capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#capability_modifyAccount)
+to get the preferences for other users via the
+[Get User Preferences endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-user-preferences).
+
+* Rename 'Suggest Account' to
+['Query Account'](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#query-account)
+and add support for arbitrary account queries.
+
+  The `_more_accounts` flag is set on the last result when there are more results
+  than the limit. The `DETAILS` and `ALL_EMAILS` options may be set to control
+  whether the results should include details (full name, email, username, avatars)
+  and all emails, respectively.
+
+* New endpoint:
+[Get Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-watched-projects).
+
+* New endpoint:
+[Set Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-watched-projects).
+
+* New endpoint:
+[Delete Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#delete-watched-projects).
+
+* New endpoint:
+[Get Star Labels from Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-stars).
+
+* New endpoint:
+[Update Star Labels on Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-stars).
+
+* New endpoint:
+[Get OAuth Access Token](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-oauth-token).
+
+* New endpoint:
+[List Contributor Agreements](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#list-contributor-agreements).
+
+* New endpoint:
+[Sign Contributor Agreement](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#sign-contributor-agreement).
+
+#### Changes
+
+* [Issue 3579](https://bugs.chromium.org/p/gerrit/issues/detail?id=3579):
+Append submitted info to ChangeInfo.
+
+* New endpoint:
+[Move Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-changes.html#move-change).
+
+#### Groups
+
+* Add `-s` as an alias for `--suggest` on the
+[Suggest Group endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-groups.html#suggest-group).
+
+#### Projects
+
+* Add `async` option to the
+[Run GC endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#run-gc)
+to allow garbage collection to run asynchronously.
+
+* New endpoint:
+[List Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-access).
+
+* New endpoint:
+[Add, Update and Delete Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#set-access).
+
+* New endpoint:
+[Create Tag](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#create-tag).
+
+* New endpoint:
+[Get Mergeable Information](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-mergeable-info).
+
+### Plugins
+
+* Secure settings
+
+  Plugins may now store secure settings in `etc/$PLUGIN.secure.config` where they
+  will be decoded by the Secure Store implementation.
+
+* Exported dependencies
+
+  Gson is now an exported dependency. Plugins no longer need to explicitly add
+  a dependency on it.
+
+### Misc
+
+* New project option to reject implicit merge commits.
+
+  The 'Reject Implicit Merges' option can be enabled to prevent non-merge commits
+  from implicitly bringing unwanted changes into a branch. This can happen for
+  example when a commit is made based on one branch but is mistakenly pushed to
+  another, for example based on `refs/heads/master` but pushed to `refs/for/stable`.
+
+* New
+[Add Patch Set capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#category_add_patch_set)
+to control who is allowed to upload a new patch set to an existing change.
+
+* [Issue 4015](https://bugs.chromium.org/p/gerrit/issues/detail?id=4015):
+Allow setting a
+[comment message](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#message)
+when uploading a change.
+
+* Allow to specify
+[who should be notified by email](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#notify)
+when uploading a change.
+
+* [Issue 3220](https://bugs.chromium.org/p/gerrit/issues/detail?id=3220):
+Append approval info to every comment-added stream event and hook.
+
+* The `administrateServer` capability can be assigned to groups by setting
+[`capability.administrateServer`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#capability.administrateServer)
+in the site configuration.
+
+  Configuring this option can be a useful fail-safe to recover a server in the
+  event an administrator removed all groups from the `administrateServer`
+  capability, or to ensure that specific groups always have administration
+  capabilities.
+
+* New configuration options to configure JGit repository cache parameters.
+
+  [core.repositoryCacheCleanupDelay](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheCleanupDelay)
+  and [core.repositoryCacheExpireAfter](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheExpireAfter)
+  can be configured.
+
+* Accept `-b` as an alias of `--batch` in the
+[init program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-init.html).
+
+## Bugfixes
+
+* Don't add the same SSH key multiple times.
+
+  If an already existing SSH key was added, a duplicate entry was added to the
+  list of user's SSH keys.
+
+* Respect the 'Require a valid contributor agreement to upload' setting
+when creating changes via the UI.
+
+  If a user had not signed a CLA, it was still possible for them to create a new
+  change with the 'Revert' or 'Cherry Pick' button.
+
+* Make Lucene index more stable when being interrupted.
+
+* Don't show the `start` and `idle` columns in the `show-connections`
+output when the ssh backend is NIO2.
+
+  The NIO2 backend doesn't provide the start and idle times, and the
+  values being displayed were just dummy values. Now these values are
+  only displayed for the MINA backend.
+
+* [Issue 4150](https://bugs.chromium.org/p/gerrit/issues/detail?id=4150):
+Deleting a draft inline comment no longer causes the change's `Updated` field to
+be bumped.
+
+* [Issue 4099](https://bugs.chromium.org/p/gerrit/issues/detail?id=4099):
+Fix SubmitWholeTopic does not update subscriptions.
+
+* [Issue 3603](https://bugs.chromium.org/p/gerrit/issues/detail?id=3603):
+Fix editing a submodule via inline edit.
+
+* [Issue 4069](https://bugs.chromium.org/p/gerrit/issues/detail?id=4069):
+Fix highlights in scrollbar overview ruler not moved when extending the
+displayed area.
+
+* [Issue 3446](https://bugs.chromium.org/p/gerrit/issues/detail?id=3446):
+Respect the `Skip Deleted` diff preference.
+
+* [Issue 3445](https://bugs.chromium.org/p/gerrit/issues/detail?id=3445):
+Respect the `Skip Uncommented` diff preference.
+
+* [Issue 4051](https://bugs.chromium.org/p/gerrit/issues/detail?id=4051):
+Fix empty `From` email header.
+
+* [Issue 3423](https://bugs.chromium.org/p/gerrit/issues/detail?id=3423):
+Fix intraline diff for added spaces.
+
+* [Issue 1867](https://bugs.chromium.org/p/gerrit/issues/detail?id=1867):
+Remove `no changes made` error case when the only difference between a new
+commit and the previous patch set of the change is the committer.
+
+* [Issue 3831](https://bugs.chromium.org/p/gerrit/issues/detail?id=3831):
+Prevent creating groups with the same name as a system group.
+
+* [Issue 3754](https://bugs.chromium.org/p/gerrit/issues/detail?id=3754):
+Fix `View All Accounts` permission to allow accounts REST endpoint to access
+email info.
+
+* Make `gitweb.type` default to `disabled` when not explicitly set.
+
+  Previously the behavior was not documented and it would default to type
+  `gitweb`. In cases where there was no gitweb config at all, this would
+  result in broken links due to `null` being used as the URL.
+
+* [Issue 4488](https://bugs.chromium.org/p/gerrit/issues/detail?id=4488):
+Improve error message when `Change-Id` line is missing in commit message.
+
+  The error message now includes the sha1 of the commit, so that it is
+  easier to track down which commit failed validation when multiple commits
+  are pushed at the same time.
+
+* Don't check mergeability of draft changes.
+
+  Draft changes can be deleted but not abandoned so there is no way for
+  an administrator to get rid of the them on behalf of the users. This can
+  become a problem when there many draft changes because the mergeability
+  check can be costly.
+
+  The mergeability check is no longer done for draft changes, but will be
+  done when the draft change is published.
+
+* Fix internal server error when plugin-provided file history weblink
+is null.
+
+  It is valid for a plugin to provide a null weblink, but doing so resulted
+  in an internal server error.
+
+## Dependency Updates
+
+* Add dependency on blame-cache 0.1-9
+
+* Add dependency on guava-retrying 2.0.0
+
+* Add dependency on jsr305 3.0.1
+
+* Add dependency on metrics-core 3.1.2
+
+* Upgrade auto-value to 1.3-rc1
+
+* Upgrade commons-net to 3.5
+
+* Upgrade CodeMirror to 5.17.0
+
+* Upgrade Guava to 19.0
+
+* Upgrade Gson to 2.7
+
+* Upgrade Guice to 4.1.0
+
+* Upgrade gwtjsonrpc to 1.9
+
+* Upgrade gwtorm to 1.15
+
+* Upgrade javassist to 3.20.0-GA
+
+* Upgrade Jetty to 9.2.14.v20151106
+
+* Upgrade JGit to 4.5.0.201609210915-r
+
+* Upgrade joda-convert to 1.8.1
+
+* Upgrade joda-time to 2.9.4
+
+* Upgrade Lucene to 5.5.0
+
+* Upgrade mina to 2.0.10
+
+* Upgrade sshd-core to 1.2.0
+
+
+## Bugfix Releases
+
+### 2.13.2 (in development)
+
+* [Issue 4630](https://bugs.chromium.org/p/gerrit/issues/detail?id=4630):
+Fix server error when navigating up to change while 'Working' is displayed.
+
+* [Issue 4631](https://bugs.chromium.org/p/gerrit/issues/detail?id=4631):
+Read project watches from database.
+
+  Project watches were being read from the git backend by default, but the
+  migration to git is not yet completed.
+
+* [Issue 4632](https://bugs.chromium.org/p/gerrit/issues/detail?id=4632):
+Fix server error when deleting multiple SSH keys from the Web UI.
+
+  Attempting to delete multiple keys in parallel resulted in a lock failure
+  when removing the keys from the git backend.
+
+* [Issue 4645](https://bugs.chromium.org/p/gerrit/issues/detail?id=4645):
+Fix malformed account suggestions.
+
+  If the query contained several query terms and one of the query terms was
+  a substring of 'strong', the suggestion was malformed.
+
+* Hooks plugin: Fix incorrect value passed to `--change-url` parameter.
+
+  The URL was being generated using the change's Change-Id rather than the
+  change number.
+
+* Check for CLA when creating project config changes from the web UI.
+
+  If contributor agreements were enabled and required for a project, and
+  the user had not signed a CLA, it was still possible to upload changes
+  for review on `refs/meta/config` by making changes in the project access
+  editor and pressing 'Save for Review'.
+
+
+### 2.13.1
+
+* [Issue 4618](https://bugs.chromium.org/p/gerrit/issues/detail?id=4618):
+Fix internal server error after online reindexing completed.
+
+* Fix internal server error when cloning from slaves and not all refs are
+visible.
+
+* Fix JSON deserialization error causing stream event client to no longer receive
+events.
diff --git a/releases/README.md b/releases/README.md
new file mode 100644
index 0000000..8df61a3
--- /dev/null
+++ b/releases/README.md
@@ -0,0 +1,32 @@
+# Gerrit Code Review Releases
+
+Latest release: **[2.13.1](/releases/2.13.md)**.
+
+[TOC]
+
+## 2.14 *(in development)*
+
+* Changes can be assigned to specific users
+
+* Secondary index with Elastic Search
+
+## 2.13
+
+* Metrics interface
+
+* Hooks plugin
+
+[Release notes for Gerrit 2.13](/releases/2.13.md).
+
+## 2.12
+
+* New change submission workflows: 'Submit Whole Topic' and 'Submitted Together'.
+
+* Support for GPG Keys and signed pushes.
+
+[Release notes for Gerrit 2.12](/releases/2.12.md).
+
+## Older Releases
+
+Release notes for releases prior to 2.12 can be found on the old
+[documentation site](http://gerrit-documentation.storage.googleapis.com/ReleaseNotes/index.html).
