# Introduction

There are many ideas suggested, and discussions which lead to decisions about
the future direction and designs of Gerrit which happen in many forums: on IRC,
the ML, at the hackathons, and in the issue tracker. It can be hard for an
outsider to get a feel for where Gerrit might be headed in the near, medium, and
long term. Of course, since this is an open source project, code speaks loudly.
However there are times when the maintainers feel that certain pathes are not
the way forward, and the desired alternative may have already been proposed as
the way that Gerrit should move. It can be helpful to developers to get an idea
about these decisions before embarking on developping a feature. Naturally,
there are also times when people just want to get a feel for what might be
coming down the pike. So we will attempt to illustrate some of these decisions
here.

# Architecture

*   The REST API is viewed as the longterm stable approach for RPCs with the
    Gerrit Server. At this point new UI elements and new ssh commands should be
    developed against it. If a new service is created, it should extend the
    current REST API or implement new pieces.

*   The hooks will eventually be moved to plugins.

*   The Database will eventually be removed from Gerrit. Authoritative data will
    mostly be pushed into the project repositories. An indexing service such as
    Lucene will be used to provide fast access to data. While this is the long
    term plan, some pieces have already been moved out of the DB and into the
    repos, for example project configuration and ACLs. Newer features are
    expected to take a similar approach when possible.

*   New user preferences should be placed in a (yet to be born) repo named
    All-Users. Each users preferences will live in a gitconfig style file under
    a reference named refs/users/xxx/accountid where xxx is accountId mod 1000.
    Since users shouldn't be able to access other users' refs, this structure
    can be hidden from them and they should be able to access their refs via
    refs/heads/master

*   Groups should probably gain a similar All-Groups repo. The membership file
    could live there. See the [gitgroups plugin]
    (https://gerrit-review.googlesource.com/35780).

*   Authentication will eventually be moved entirely to plugins. Much work has
    already been done on this.
