# Jetpack Principles

[TOC]

## Ethos of Jetpack

To create components, tools, and guidance that makes it quick and easy to build
great Android apps, including contributions from Google and the open-source
community.

## Core Principles of a Jetpack Library

Jetpack libraries provide the following guarantees to Android Developers:

_formatted as “Jetpack libraries are…” with sub-points “Libraries should…”_

### 1. Optimized for external client adoption

-   Libraries should work for first-party clients and may even have optional
    modules tailored specifically to first-party needs, but primary
    functionality should target external developers.
-   Measure success by 3p client adoption, followed by 1p client adoption.

### 2. Designed to satisfy real-world use cases

-   Meet developers where they are and solve the problems that they have
    building apps -- not designed to just provide parity with existing platform
    APIs and features
-   Expose modules that are tightly-scoped to **developer pain points**
    -   Smaller building blocks for external developers by scoping disjoint use
        cases that are likely not to co-exist in a single app to individual
        modules.
-   Implement layered complexity, with **simple top-level APIs**
    -   Complicated use case support must not be at the expense of increasing
        API complexity for the most common simpler use cases.
-   Have **backing data or a researched hypothesis** (research, demand etc) to
    prove the library is necessary and sufficient.
-   Include only functionality that is relevant to the library's stated use case
    -   End user and developer trust depend on libraries being transparent about
        their operation. See
        [Functionality](/docs/api_guidelines#functionality) in
        the API Guidelines for details.

### 3. Aware of the existing developer ecosystem

-   Avoid reinventing the wheel -- do not create a new library where one already
    exists that is accepted by the community as a best practice

### 4. Consistent with the rest of Jetpack

-   Ensure that concepts learned in one component can be seen and understood in
    other components
-   Leverage Jetpack and community standards, for example:
    -   For async work, uses Kotlin coroutines and/or Kotlin flow
    -   For data persistence, uses Jetpack DataStore for simple and small data
        and uses Room for more complicated Data

### 5. Developed as open-source and compatible with AOSP Android

-   Expose a unified developer-facing API surface across the Android ecosystem
-   Develop in AOSP to provide visibility into new features and bug fixes and
    encourage external participation
-   Avoid proprietary services or closed-source libraries for core
    functionality, and instead provide integration points that allow a developer
    to choose between a variety of services as the backing implementation
-   Comply with AndroidX checks and policies such as API tracking and style
    checks
-   See
    [Integrating proprietary components](/docs/open_source.md)
    for guidance on using closed-source and proprietary libraries and services

### 6. Written using language-idiomatic APIs

-   Write APIs that feel natural for clients using both
    [Kotlin](https://developer.android.com/kotlin/interop) and Java

### 7. Compatible with a broad range of API levels

-   Support older platforms and API levels according to client needs
-   Provide continued maintenance to ensure compatibility with newer platforms
-   Design with the expectation that every Jetpack API is **write-once,
    run-everywhere** for Android with graceful degradation where necessary

### 8. Integrated with best practices

-   Guide developers toward using existing Jetpack best-practice libraries,
    including Architecture Components
-   Libraries that involve user interfaces, e.g. any reference to `View`
    classes, must provide non-`View` functional parity when used with the
    Compose UI toolkit

### 9. Designed for tooling and testability

-   Write adequate unit and integration tests for the library itself
-   Provide developers with an accompanying testing story for integration
    testing their own applications (ex. -testing artifacts that some libraries
    expose)
    -   Robolectric shouldn’t need to shadow the library classes
    -   Ex. Room has in-memory testing support
-   Build tooling concurrent with the library when possible, and with tooling in
    mind otherwise

### 10. Released using a clearly-defined process

-   Follow Semantic Versioning and pre-release revision guidelines where each
    library moves through alpha, beta, and RC revisions in a timely manner to
    gain feedback and ensure stability

### 11. Well-documented

-   Provide developers with getting started and use case documentation on
    d.android.com in addition to clear API reference documentation

### 12. Supported for long-term use

-   Plan for long-term support and maintenance

### 13. Examples of modern development

-   Where possible, targeting the latest languages, OS features, and tools. All
    new libraries should be written in Kotlin, compile using the latest stable
    Android SDK, and assume that clients are using the latest stable versions of
    Android Studio, Gradle, and AGP. See the
    [AndroidX API Guidelines](/docs/api_guidelines/index.md#dependencies-kotlin)
    for more details, including the use of Java sources and `-ktx` artifacts.

### 14. High quality APIs and ownership

-   All Jetpack libraries are expected to abide by Android and Jetpack API
    Guidelines

## Target Audience

Jetpack libraries are used by a wide variety of external developers, from
individuals working on their first Android app to huge corporations developing
large-scale production apps. Generally, however, Jetpack libraries are designed
to focus on small- to medium-sized app development teams.

-   Note: If the library targets a niche set of apps, the developer pain
    point(s) addressed by the Jetpack library must be significant enough to
    justify its need.
    -   Example : Jetpack Enterprise library
