whatisgithub

What is epoxy?

airbnb/epoxy — explained in plain English

Analysis updated 2026-06-24

8,560JavaAudience · developerComplexity · 3/5Setup · moderate

In one sentence

An Android library from Airbnb that removes RecyclerView boilerplate by auto-generating model classes from annotations and automatically computing the minimum set of changes needed when your list data updates.

Mindmap

mindmap
  root((Epoxy))
    Core concepts
      EpoxyController
      Generated models
      Auto diffing
    View types
      Custom view classes
      DataBinding layouts
      ViewHolder pattern
    Setup
      Gradle dependency
      Annotation processing
      Java and Kotlin
    Benefits
      Less boilerplate
      Smooth list updates
      Fewer data bugs
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Build a complex Android scrolling screen with many different content types without writing RecyclerView boilerplate code.

USE CASE 2

Auto-diff your list data so RecyclerView updates smoothly without manually tracking which items changed.

USE CASE 3

Use annotation-generated models with DataBinding layouts to define your UI items declaratively.

USE CASE 4

Replace a manual RecyclerView adapter with an EpoxyController to eliminate a category of data-sync bugs.

What is it built with?

JavaKotlinAndroidGradleDataBinding

How does it compare?

airbnb/epoxygoogle/tsunami-security-scannerfacebook/buck
Stars8,5608,5688,546
LanguageJavaJavaJava
Setup difficultymoderatehardhard
Complexity3/54/54/5
Audiencedeveloperops devopsdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · moderate Time to first run · 30min

Annotation processing must be configured in Gradle, generated model classes only appear after the first successful build.

So what is it?

Epoxy is an Android library that Airbnb built and open-sourced to make it easier to build complex scrolling screens on Android phones and tablets. In Android development, scrolling lists of content are managed by a component called RecyclerView. Building screens with many different types of content in that list requires a lot of repetitive code: managing different view types, assigning unique IDs, figuring out what changed when data updates, and rebinding data to visible items. Epoxy handles all of that automatically. The way it works is that you define your individual pieces of content as models. Instead of writing the boilerplate code for each one, Epoxy generates it for you based on annotations you add to your existing views or layout files. For example, if you annotate a custom view class, Epoxy reads the annotation and generates a corresponding model class automatically during your build step. You then use these generated models inside an EpoxyController, which is where you describe the full list of items that should appear on screen and in what order. When your data changes, you just rebuild that list in the controller and Epoxy compares it to what was previously shown, computing the minimum set of changes needed to update the screen smoothly. This automatic diffing is one of the main reasons Airbnb built Epoxy: it removes a category of bugs that come from manually telling RecyclerView which items changed. Epoxy supports several ways to define views: custom view classes with annotations, Android DataBinding layouts, or traditional view holder patterns. It integrates with both Java and Kotlin and is added to a project through Gradle. Airbnb says it now uses Epoxy for most of the main screens in their own Android app.

Copy-paste prompts

Prompt 1
Add Epoxy to my Android project and create my first EpoxyController with two different model types, show me the Gradle setup and the minimal working code.
Prompt 2
Convert my existing RecyclerView adapter to use Epoxy annotations so I get automatic diffing without changing my views.
Prompt 3
How do I use Epoxy with Kotlin data classes and DataBinding layouts to build a product listing screen?
Prompt 4
Set up an EpoxyController that handles a feed of mixed content types, images, text cards, and banners, and updates correctly when data changes.

Frequently asked questions

What is epoxy?

An Android library from Airbnb that removes RecyclerView boilerplate by auto-generating model classes from annotations and automatically computing the minimum set of changes needed when your list data updates.

What language is epoxy written in?

Mainly Java. The stack also includes Java, Kotlin, Android.

How hard is epoxy to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is epoxy for?

Mainly developer.

Open on GitHub → Ask about another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.