---
title: "Gerrit 2.16 Release (In Development)"
permalink: 2.16.html
hide_sidebar: true
hide_navtoggle: true
toc: true
---

## Release Highlights

* GWT UI is deprecated

* PolyGerrit is now the default UI

* Experimental Dark Mode in PolyGerrit.

* Inline editing support in PolyGerrit UI.

* Redesigned UI for PolyGerrit based on material.

## Important Notes

### Schema Changes

This release contains schema changes. To upgrade:

``` sh
  java -jar gerrit.war init -d site_path
```

### Reindex for new projects index and changed group index

Gerrit 2.16 introduces a new secondary index for projects. The initial version
of this index must be created by running the offline reindex before starting
Gerrit:

``` sh
  java -jar gerrit.war reindex --index projects -d site_path
```

The group index got two new fields upon which Gerrit 2.16 depends. For this
reason, the following command to offline reindex the group index must be
executed as well:

``` sh
  java -jar gerrit.war reindex --index groups -d site_path
```

The offline reindex for groups should also be run on Gerrit slave hosts.

Note that it is not necessary to reindex the changes and accounts indexes
offline. These will automatically be reindexed by the online reindexer after
starting Gerrit.

### Support for GWT UI is deprecated

From 2.16 GWT UI is deprecated and will be removed in a future version.

### Support for Velocity templates removed

In [version 2.14](2.14.md) support for Soy templates was added. For backwards
compatibility, support for Velocity templates (VTL) was kept.

In version 2.16 support for VTL is completely removed. Site administrators must
replace any Velocity templates (`.vm` files in `$site/etc/mail/`) with the equivalent
Soy templates before upgrading to this version.

### Push to refs/changes is deprecated

The possibility to push to `refs/changes` is now disabled by default.  It is
still possible to enable it in the gerrit config by setting
[receive.allowPushToRefsChanges](https://gerrit-documentation.storage.googleapis.com/Documentation/2.16/config-gerrit.html#receive.allowPushToRefsChanges)
to true.

### DELETE requests with bodies are no longer recommended

Some proxies, which are not under client control, prohibit DELETE requests with
bodies. DELETE requests with bodies could work on a first attempt, but could
fail afterwards because a server they have no control over was updated. In this
case, client users could be in trouble if they were not notified.

Therefore, we have decided to no longer recommend sending DELETE requests with
bodies. They will continue to work in this release but should be considered as
deprecated and will be removed in the next release.

## New Features

### REST API

## ACL Changes

### ACLs: refs/for/ namespace is now deprecated

The `refs/for` namespace is no longer used when evaluating access rights.

#### Background
Removing the `refs/for` support in the ACLs intends to solve the following
issues:

* Vast majority of permissions are defined on "real" branches. Forcing users to
define a small subset of the permissions on `refs/for/*` hinders readability and
the understanding of the applied ACLs.

* For people using `refs/publish/` to upload reviews, it is confusing to force
Project Owners to set the push rules on `refs/for/` to allow creation of
changes.

* Having `refs/for/` in the ACL UI makes it impossible to look at one single
ACL section and acknowledge with certainty which rules will be in effect for
that ref.

#### Changes

* Instead of defining push on `refs/for/*` a new `Create Review` permission is
introduced. Like other permissions, it should be defined on `refs/heads/*` (or
`refs/*`).

* A new `Submit on Push` option for the `Submit` permission, which will enable
the %submit push parameter and remove the need to specify `Submit` on
`refs/for/*`.

* `Add Patch Set` will work the same way, but should be specified on
`refs/heads/*` (just like the new `Create Review` permission).

* `Push Merges` will work the same way, but should be specified on
`refs/heads/*` instead of `refs/for/*`.


#### Migration

Any permission that could previously be applied to `refs/for` will
automatically be migrated to the new permission upon loading the ACLs.

Note: The configuration is not automatically resaved, so the next time the
user edits the ACLs from the UI, the migrated ACLs will be shown and possibly
saved if the user chose to do so.

## Dependency Updates

* Update Brics Automaton to 1.12-1

* Update commons-lang3 to 3.6

* Update Dropwizard metrics-core to 3.2.5

* Update elasticsearch to 2.4.6

* Update greenmail to 1.5.5

* Update gson to 2.8.2

* Update javax.mail to 1.6.0

* Update protobuf-java to 3.4.0

* Update soy to 2017-08-08

* Update tukaani-xz to 1.6

* Remove dependency on Velocity

## Plugin API changes

* The class `com.google.gerrit.server.api.accounts.AccountExternalIdCreator` was
  moved to `com.google.gerrit.server.account.AccountExternalIdCreator`.
