---
layout: community
---

# Bazel Feature Roadmap

Author: [The Bazel Team](https://groups.google.com/forum/#!forum/bazel-discuss)

This document describes the Bazel team's plans for introducing future
system features. The document is divided into two main sections:

*   *Near-term plans:* Features that the team is committed to supporting
    for alpha and beta releases.
*   *Tentative post-beta plans:* Features that the team is considering
    supporting within one year of the beta release. The availability and
    sequencing of features on this list will depend technical feasibility
    and user demand.

Note that this roadmap only includes features that the Bazel team itself
intends to support. We anticipate that a number of other features will be
added by code contributors.

For the alpha and beta releases, the Bazel team will maintain two code
repositories:

*   A Google-internal repository, containing both Bazel code and
    Google-specific extensions and features
*   An external [GitHub repository](https://github.com/google/bazel),
    containing only the Bazel code.

We anticipate making the external repository *primary* in the future, that is,
code from Google and non-Google contributors will be committed and tested in the
external repository first, then imported into the internal repository. For
the alpha and beta releases, however, the internal repository will be primary.
Changes to Bazel code will be frequently pushed from the internal to
the external repository.

## Near-term Plans

### <a name="alpha"></a>Alpha release (2015-03)

This release is intended to

*   give users access to a basic set of supported features
*   allow potential code contributors to understand Bazel's capabilities and
    architecture
*   enable users to monitor the team's progress toward a beta release

Alpha users will need to build Bazel from source; we will not provide binary
releases until the beta. We will accept code contributions, but may need to
reject or defer code contributions related to beta features still under
development. Some features will be fully supported
henceforward, others are still experimental or partially supported;
see our [feature support document](support.html) for details.

The following features/capabilities will be available in the alpha:

*   Bazel runs on Linux and OS X
*   Bazel builds itself on Linux and OS X
*   Build rules target executables running on Linux and OS X
*   Support for building and testing C++
*   Support for building and testing Java
*   Support for building Objective C
*   Support for building Python
*   Support for building iOS apps
*   Documentation for supported build rules and features
*   Online support for bug and feature requests
*   A basic Bazel test suite in GitHub
*   Support for referencing Java JAR dependencies from HTTP and Maven endpoints
*   Support for referencing remote source repositories via HTTP
*   Support for extensibility via an interpreted Python subset (Skylark)

### <a name="beta"></a>Beta release (target date: 2015-06)

The beta release will add support for additional languages and platform and
various other fully supported features. In particular, the following
features/capabilities will be available:

*   Binary versions of Bazel for Linux and OS X
*   All Bazel tests currently in Google's repository are ported to GitHub
*   The Bazel test suite runs on externally-visible continuous integration
    infrastructure
*   Support for referencing transitive sources via Maven
*   Support for prefetching and caching remote dependencies
*   Support for building and testing Android apps
*   Support for testing iOS apps
*   Support for build action sandboxing

## Tentative post-beta plans

*   Binary releases of Bazel at least monthly
*   The external repository is primary
*   An auto-update mechanism to allow Bazel to dynamically check for, fetch,
    and install updated releases, rules, etc.
*   AppEngine support
*   Support for remote mobile testing
*   Support for the Go language
*   Support for Javascript
*   Android Studio interoperability
