## Standard Features (GO/WAR)
- Integrated JGit http/https SmartHTTP servlet
- Integrated JGit git protocol daemon
- Integrated Mina SSHD daemon
- Optional feature to allow users to create personal repositories
- Optional feature to fork a repository to a personal repository
- Optional feature to create a repository on push
- Optional feature to automatically fetch ref updates for repository mirrors
- Optional Issue Tracker and Pull-Request-like mechanism
- Four *per-repository* access restriction configurations with a Read-Only control flag
    - ![anonymous](blank.png) *Anonymous View, Clone & Push*
    - ![push](lock_go_16x16.png) *Authenticated Push*
    - ![clone](lock_pull_16x16.png) *Authenticated Clone & Push*
    - ![view](shield_16x16.png) *Authenticated View, Clone & Push*
    - ![freeze](cold_16x16.png) Freeze repository (i.e. deny push, make read-only)
- Six *per-user/team* repository access permissions
    - **V** (view in web ui, RSS feeds, download zip)
    - **R** (clone)
    - **RW** (clone and push)
    - **RWC** (clone and push with ref creation)
    - **RWD** (clone and push with ref creation, deletion)
    - **RW+** (clone and push with ref creation, deletion, rewind)
- Menu driven native platform clone links for all popular Git clients
- Garbage Collection service
- Ability to federate with one or more other Gitblit instances
- RSS/JSON RPC interface
- An evolving plugin infrastructure
- Java/Swing Gitblit Manager tool
- Responsive web UI that subtracts elements to be usable on phones, tablets, and desktop browsers
- Groovy pre- and post- push hook scripts, per-repository or globally for all repositories
- Rich Push email notifications *(via sendmail.groovy push script)*
- Rich Ticket email notifications
- Lucene indexing of specified repository branches
- Administrators may create, edit, rename, or delete repositories through the web UI or RPC interface
- Administrators may create, edit, rename, or delete users through the web UI or RPC interface
- Administrators may create, edit, rename, or delete teams through the web UI or RPC interface
- Repository Owners may edit repositories through the web UI
- Administrators and Repository Owners may set the default branch through the web UI or RPC interface
- LDAP authentication and optional LDAP-controlled Team memberships
- Redmine authentication
- Salesforce.com authentication
- Windows authentication
- PAM authentication
- Gravatar integration
- Git-notes display support
- Submodule support
- User-tracked reflog for pushes, tags, etc.
- Fanout PubSub notifications service for self-hosted [Sparkleshare](http://sparkleshare.org) use
- gh-pages display support (Jekyll is not supported)
- Branch metrics
- HEAD and Branch RSS feeds
- Blame annotations view
- Dates can optionally be displayed using the browser's reported timezone
- Display of Author and Committer email addresses can be disabled
- Case-insensitive searching of commit messages, authors, or committers
- Dynamic zip downloads feature
- Docs page which enumerates all Markdown files within a repository
- Markdown, Confluence, Textile, Twiki, Tracwiki, & Mediawiki markup rendering support
- Syntax highlighting for popular source code types
- Customizable regular expression substitution for commit messages (i.e. bug or code review link integration)
- Single text file for users configuration
- Translations
    - German (de)
    - English (en)
    - Spanish (es)
    - French (fr)
    - Italian (it)
    - Japanese (ja)
    - Korean (ko)
    - Dutch (nl)
    - Norwegian (no)
    - Polish (pl)
    - Brazilian Portuguese (pt_BR)
    - Simplified Chinese (zh_CN)

## Gitblit GO Features
- Out-of-the-box integrated stack requiring minimal configuration
- Automatic generation of ssl certificate for https communications
- Integrated GUI tool to facilitate x509 PKI including ssl and client certificate generation, client certificate revocation, and client certificate distribution
- Single text file for configuring server and gitblit
- A Windows service installation script and configuration tool

## Limitations
- Built-in access controls are not branch-based, they are repository-based.

[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"
