# airbnb/epoxy

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/airbnb-epoxy).**

8,556 stars · 732 forks · Java · Apache-2.0

## Links

- GitHub: https://github.com/airbnb/epoxy
- Homepage: https://goo.gl/eIK82p
- awesome-repositories: https://awesome-repositories.com/repository/airbnb-epoxy.md

## Description

Epoxy is an Android library for building complex RecyclerView screens using a model-driven approach. It generates RecyclerView adapter models at compile time from annotated custom views, data binding layouts, or view holders, eliminating the manual boilerplate typically associated with view holders and adapters. The library provides a diffing engine that automatically compares model lists and applies minimal updates with animations for insertions, removals, and moves.

The library distinguishes itself through its controller-based model building, where a controller class with a buildModels method declaratively constructs immutable model lists and triggers rebuilds on data changes. It includes built-in horizontal carousel components with peeking and snapping behavior, supports background thread diffing to keep the UI thread responsive, and offers view pool sharing across multiple RecyclerView instances to maximize view recycling. Epoxy also provides visibility tracking with callbacks, pagination integration with the Android Paging Library, and view state persistence across configuration changes and scrolls.

Beyond its core capabilities, Epoxy offers extensive configuration options for annotation processing, including package-level defaults, model immutability enforcement, and compile-time validation of attribute equality and hash code implementations. It supports Kotlin DSL for declarative screen building, typed controllers for pure data flow, and interceptors for modifying model lists in aggregate. The library also provides memory management utilities, grid span size adaptation, and the ability to combine Litho components with traditional Android views in the same RecyclerView.

## Tags

### Part of an Awesome List

- [RecyclerView Screen Builders](https://awesome-repositories.com/f/awesome-lists/devtools/list-views/recyclerview-lists/recyclerview-screen-builders.md) — Generates model classes from annotated custom views, databinding layouts, or view holders to define RecyclerView screens. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [Controller Adapter Integrators](https://awesome-repositories.com/f/awesome-lists/ai/model-adaptation-and-merging/adapter-merging/recyclerview-adapter-mergers/controller-adapter-integrators.md) — Attaches a controller's adapter to a RecyclerView and triggers model builds when data changes. ([source](https://github.com/airbnb/epoxy/wiki/Basic-Usage))
- [Controller Attachments](https://awesome-repositories.com/f/awesome-lists/ai/model-adaptation-and-merging/adapter-merging/recyclerview-adapter-mergers/controller-attachments.md) — Connects an EpoxyController to a RecyclerView via its adapter or EpoxyRecyclerView for simplified setup. ([source](https://github.com/airbnb/epoxy/wiki/Basic-Usage))
- [RecyclerView List Differs](https://awesome-repositories.com/f/awesome-lists/devtools/file-and-directory-management/file-and-directory-moves/automatic-reference-updaters/recyclerview-list-differs.md) — Automatically diffs model lists and applies minimal updates with animations for insertions, removals, and moves. ([source](https://cdn.jsdelivr.net/gh/airbnb/epoxy@master/README.md))
- [Model-Driven View Holders](https://awesome-repositories.com/f/awesome-lists/devtools/list-views/recyclerview-lists/model-driven-view-holders.md) — Uses annotated abstract model classes and KotlinHolders to cache view lookups and generate equals/hashcode for diffing. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))
- [RecyclerView Model Identifiers](https://awesome-repositories.com/f/awesome-lists/devtools/unique-id-generation/recyclerview-model-identifiers.md) — Assigns unique identifiers to RecyclerView models for stable diffing and view state persistence. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [Model Group Root Access](https://awesome-repositories.com/f/awesome-lists/devtools/beyond-the-dom/model-group-root-access.md) — Retrieves the parent view that contains all submodel views through the holder's `getRootView()` method during bind or unbind. ([source](https://github.com/airbnb/epoxy/wiki/Grouping-Models))
- [Litho-View Combinations](https://awesome-repositories.com/f/awesome-lists/devtools/view-components/view-backed-components/litho-view-combinations.md) — Allows Litho components and traditional Android views to be used together in the same RecyclerView via an EpoxyController. ([source](https://github.com/airbnb/epoxy/wiki/Litho-Support))
- [List and Grid Components](https://awesome-repositories.com/f/awesome-lists/devtools/list-and-grid-components.md) — View architecture for complex lists.
- [List Components](https://awesome-repositories.com/f/awesome-lists/devtools/list-components.md) — Architecture for complex list views.
- [UI Components](https://awesome-repositories.com/f/awesome-lists/devtools/ui-components.md) — Building complex screens in RecyclerView.

### Mobile Development

- [Auto-Generated RecyclerView Models](https://awesome-repositories.com/f/mobile-development/recyclerview-adapter-wrappers/auto-generated-recyclerview-models.md) — Automatically creates RecyclerView adapter models from annotated custom views, data binding layouts, or view holders. ([source](https://cdn.jsdelivr.net/gh/airbnb/epoxy@master/README.md))
- [Annotation-Driven View Bindings](https://awesome-repositories.com/f/mobile-development/android-view-binding/annotation-driven-view-bindings.md) — Binds data to custom views via annotated setter methods with automatic prop assignment. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Generated Setter Bindings](https://awesome-repositories.com/f/mobile-development/android-view-binding/generated-setter-bindings.md) — Binds model properties to views through generated setter methods with automatic resource handling.
- [Controller-Based Model Builders](https://awesome-repositories.com/f/mobile-development/recyclerview-adapter-wrappers/auto-generated-recyclerview-models/controller-based-model-builders.md) — Subclasses the controller and implements buildModels to create immutable model instances for the RecyclerView. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Litho-View Combinations](https://awesome-repositories.com/f/mobile-development/android-ecosystem/android-ui-components/litho-view-combinations.md) — Allows Litho components and traditional Android views to coexist in the same RecyclerView via EpoxyController. ([source](https://github.com/airbnb/epoxy/wiki/Litho-Support))
- [Grid Span Adaptations](https://awesome-repositories.com/f/mobile-development/android-layout-components/screen-adaptation-libraries/grid-span-adaptations.md) — Provides automatic grid span adjustment for phone, tablet, and wide tablet screens. ([source](https://github.com/airbnb/epoxy/wiki/Grid-Support))
- [Android String](https://awesome-repositories.com/f/mobile-development/resource-bindings/android-string.md) — Accepts Android string resource IDs and plurals for text properties via generated methods. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Kotlin Property Delegates](https://awesome-repositories.com/f/mobile-development/view-bindings/kotlin-property-delegates.md) — Uses Kotlin property delegates to cache view lookups and simplify binding logic in RecyclerView models. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))

### User Interface & Experience

- [RecyclerView Screen Composition](https://awesome-repositories.com/f/user-interface-experience/scroll-interaction-handlers/scroll-state-controllers/scroll-observers/android-nested-scrolling/recyclerview-screen-composition.md) — Builds complex scrolling screens in Android with multiple item types, grid layouts, and nested carousels using a declarative model-based approach.
- [RecyclerView Carousels](https://awesome-repositories.com/f/user-interface-experience/carousel-components/recyclerview-carousels.md) — Embeds horizontal carousels as models within parent vertical RecyclerViews with automatic view pool sharing. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Layout-Based Model Generators](https://awesome-repositories.com/f/user-interface-experience/data-binding/layout-based-model-generators.md) — Generates RecyclerView model classes automatically from Android DataBinding layout files. ([source](https://github.com/airbnb/epoxy/wiki/Data-Binding-Support))
- [Generated Model Base Classes](https://awesome-repositories.com/f/user-interface-experience/data-binding/multiple-model-bindings/generated-model-base-classes.md) — Defines a shared base class for generated models to reuse attributes and binding logic. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [RecyclerView Item Declarers](https://awesome-repositories.com/f/user-interface-experience/data-tables/data-entry-forms/collection-item-controllers/recyclerview-item-declarers.md) — Defines which items to display in a RecyclerView by adding models in a build method with automatic rebuilds. ([source](https://cdn.jsdelivr.net/gh/airbnb/epoxy@master/README.md))
- [DataBinding Variable Bindings](https://awesome-repositories.com/f/user-interface-experience/data-to-ui-bindings/databinding-variable-bindings.md) — Binds Android DataBinding layout variables by matching EpoxyAttribute fields to variable names. ([source](https://github.com/airbnb/epoxy/wiki/Data-Binding-Support))
- [Hydration-Stable Identifiers](https://awesome-repositories.com/f/user-interface-experience/hydration-stable-identifiers.md) — Assigns stable identifiers to RecyclerView models for automatic diffing and view state persistence. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Adapter))
- [RecyclerView Diff Identifiers](https://awesome-repositories.com/f/user-interface-experience/hydration-stable-identifiers/recyclerview-diff-identifiers.md) — Compares model lists using equals and hashCode on stable identifiers for minimal RecyclerView updates.
- [RecyclerView Model Identifiers](https://awesome-repositories.com/f/user-interface-experience/hydration-stable-identifiers/recyclerview-model-identifiers.md) — Assigns stable identifiers to RecyclerView models for automatic diffing and view state persistence. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Adapter))
- [DataBinding Layout Model Generators](https://awesome-repositories.com/f/user-interface-experience/layout-utilities/declarative-layouts/declarative-layout-systems/databinding-layout-model-generators.md) — Generates RecyclerView model classes from declared DataBinding layouts using layout names. ([source](https://github.com/airbnb/epoxy/wiki/Basic-Usage))
- [List Transition Animations](https://awesome-repositories.com/f/user-interface-experience/list-transition-animations.md) — Automatically diffs state changes and applies animations for item additions, removals, and reorders. ([source](https://github.com/airbnb/epoxy/wiki/Sample-App))
- [RecyclerView DSL Builders](https://awesome-repositories.com/f/user-interface-experience/programmatic-element-construction/declarative-kotlin-builders/recyclerview-dsl-builders.md) — Uses extension functions to declare RecyclerView items in a declarative Kotlin block, removing the need for a separate controller class. ([source](https://cdn.jsdelivr.net/gh/airbnb/epoxy@master/README.md))
- [Carousel Snap Behaviors](https://awesome-repositories.com/f/user-interface-experience/scroll-snapping/carousel-snap-behaviors.md) — Attaches a snap helper to align carousel items cleanly when scrolling stops, with customization options. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [RecyclerView Carousels](https://awesome-repositories.com/f/user-interface-experience/scrolling-carousels/recyclerview-carousels.md) — Creates a horizontally scrolling RecyclerView with built-in peeking, snapping, and performance optimizations for nested or top-level use. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Annotation-Driven Model Generators](https://awesome-repositories.com/f/user-interface-experience/view-customizations/annotation-driven-model-generators.md) — Generates RecyclerView model classes from annotated custom views, automating view creation and property binding. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [RecyclerView Model Generators](https://awesome-repositories.com/f/user-interface-experience/view-customizations/custom-view-rendering/recyclerview-model-generators.md) — Generates RecyclerView adapter models from annotated custom views, eliminating manual view holder boilerplate. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))
- [Recycle Lifecycle Cleanups](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/recycle-lifecycle-cleanups.md) — Provides annotation-based cleanup callbacks to release resources when views are recycled. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Nullable Prop Auto-Clears](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/recycled-item-state-resets/nullable-prop-auto-clears.md) — Automatically clears nullable properties on view recycle to prevent memory leaks. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Recycle-Scoped State Persistence](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/recycled-item-state-resets/recycle-scoped-state-persistence.md) — Preserves view state across recycle and rebind cycles, maintaining user modifications during scroll. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Model-Driven View Binding](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/type-based-item-recycling/model-driven-view-binding.md) — Binds model properties to RecyclerView items when they scroll into view and releases resources on recycle. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [Kotlin DSL Carousel Builders](https://awesome-repositories.com/f/user-interface-experience/carousel-components/recyclerview-carousels/kotlin-dsl-carousel-builders.md) — Ships Kotlin extension functions for declaratively building carousel models within controllers. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Custom Carousel Subclassing](https://awesome-repositories.com/f/user-interface-experience/carousels/carousel-layout-configurations/custom-carousel-subclassing.md) — Allows subclassing carousels to change layout direction, grid columns, sizing, or other behavior. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Visible Item Count Configurators](https://awesome-repositories.com/f/user-interface-experience/carousels/carousel-layout-configurations/multi-item-layouts/visible-item-count-configurators.md) — Controls how many carousel items are displayed at once to adjust the layout density and peeking effect. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Model Click Listeners](https://awesome-repositories.com/f/user-interface-experience/click-event-phases/model-click-listeners.md) — Attaches a typed click listener to a model that provides the model, view, clicked view, and position on click. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [Change Payload Animations](https://awesome-repositories.com/f/user-interface-experience/component-animation-hooks/child-component-change-animations/change-payload-animations.md) — Passes change payloads to model bind methods for animating only the properties that changed. ([source](https://github.com/airbnb/epoxy/wiki/Sample-App))
- [Content Prefetching](https://awesome-repositories.com/f/user-interface-experience/content-prefetching.md) — Kicks off background fetches for image content before a model is bound to the view. ([source](https://github.com/airbnb/epoxy/wiki/Image-Preloading))
- [Litho Model Generations](https://awesome-repositories.com/f/user-interface-experience/data-binding/layout-based-model-generators/litho-model-generations.md) — Automatically creates EpoxyModel subclasses for Litho @LayoutSpec classes, adding setters for each @Prop and tracking prop state changes. ([source](https://github.com/airbnb/epoxy/wiki/Litho-Support))
- [Generated View Interfaces](https://awesome-repositories.com/f/user-interface-experience/data-view-customizers/data-view-renderers/generated-view-interfaces.md) — Generates interfaces from view annotations for polymorphic model grouping and type-safe access. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Carousel Peek Padding Configurators](https://awesome-repositories.com/f/user-interface-experience/font-configurations/font-metric-mappers/glyph-metric-adjusters/glyph-padding-configurators/carousel-peek-padding-configurators.md) — Sets horizontal padding with clip-to-padding disabled so adjacent items partially peek from the edges to indicate scrollable content. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [RecyclerView Drag Reorderers](https://awesome-repositories.com/f/user-interface-experience/gesture-interaction-libraries/long-press-gestures/long-press-gestures/recyclerview-drag-reorderers.md) — Enables rearranging list items via long-press drag, automatically updating the controller and notifying the RecyclerView of the move. ([source](https://github.com/airbnb/epoxy/wiki/Touch-Support))
- [Cell Column Spanning](https://awesome-repositories.com/f/user-interface-experience/grid-column-sizing/cell-column-spanning.md) — Controls how many grid columns an item occupies by overriding span size per model. ([source](https://github.com/airbnb/epoxy/wiki/Grid-Support))
- [Dynamic Span Overrides](https://awesome-repositories.com/f/user-interface-experience/grid-column-sizing/cell-column-spanning/dynamic-span-overrides.md) — Computes span size dynamically via callbacks based on total span count and position. ([source](https://github.com/airbnb/epoxy/wiki/Grid-Support))
- [Per-Item Span Overrides](https://awesome-repositories.com/f/user-interface-experience/grid-column-sizing/cell-column-spanning/per-item-span-overrides.md) — Computes span size per item via callbacks based on position and screen dimensions. ([source](https://github.com/airbnb/epoxy/wiki/Grid-Support))
- [Span Size Assignments](https://awesome-repositories.com/f/user-interface-experience/grid-layouts/item-positioning/dynamic-item-layout-syncing/grid-layout-management/span-size-assignments.md) — Assigns per-item span sizes in a GridLayoutManager for variable-width grid items. ([source](https://github.com/airbnb/epoxy/wiki/Grid-Support))
- [Post-Bind Property Coordination](https://awesome-repositories.com/f/user-interface-experience/headless-ui-property-bindings/post-bind-property-coordination.md) — Runs coordination logic after all properties are bound to synchronize multiple values before UI update. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Cyclic Scrolling Patterns](https://awesome-repositories.com/f/user-interface-experience/infinite-scrolling/cyclic-scrolling-patterns.md) — Implements cyclic scrolling that repeats items endlessly for infinite carousel effects. ([source](https://github.com/airbnb/epoxy/wiki/Cyclic-Adapters))
- [Carousel Item Count Configurators](https://awesome-repositories.com/f/user-interface-experience/item-visibility-detection/carousel-item-count-configurators.md) — Specifies how many items appear at once in the carousel, adjusting view size and prefetch count for performance. ([source](https://github.com/airbnb/epoxy/wiki/Carousel))
- [Model Group Layouts](https://awesome-repositories.com/f/user-interface-experience/layout-components/custom-layouts/model-group-layouts.md) — Groups multiple independent models into a single layout container using an XML layout resource. ([source](https://github.com/airbnb/epoxy/wiki/Grouping-Models))
- [Partial Property Updates](https://awesome-repositories.com/f/user-interface-experience/partial-property-updates.md) — Passes change payloads to bound views so they can animate or update only the parts that changed. ([source](https://github.com/airbnb/epoxy/wiki/Sample-App))
- [Scroll Observers](https://awesome-repositories.com/f/user-interface-experience/scroll-interaction-handlers/scroll-state-controllers/scroll-observers.md) — Notifies callbacks when items scroll on or off screen, tracking visible, invisible, and focused states. ([source](https://github.com/airbnb/epoxy/wiki/Visibility-Events))
- [RecyclerView Scroll State Persistence](https://awesome-repositories.com/f/user-interface-experience/scroll-interaction-handlers/scroll-state-controllers/scroll-restoration/recyclerview-scroll-state-persistence.md) — Preserves each view's user-modified state, such as scroll position, when it scrolls off screen and back. ([source](https://github.com/airbnb/epoxy/wiki/Saving-View-State))
- [Configuration Change Scroll Restorers](https://awesome-repositories.com/f/user-interface-experience/scroll-interaction-handlers/scroll-state-controllers/scroll-restoration/scroll-position-maintenance/configuration-change-scroll-restorers.md) — Restores scroll position of nested carousels and lists after data updates or configuration changes. ([source](https://github.com/airbnb/epoxy/wiki/Sample-App))
- [List Item Swipe-to-Dismiss](https://awesome-repositories.com/f/user-interface-experience/toast-notifications/swipe-to-dismiss-gestures/list-item-swipe-to-dismiss.md) — Allows swiping items left or right to remove them, requiring a callback to update the underlying data and trigger a model rebuild. ([source](https://github.com/airbnb/epoxy/wiki/Touch-Support))
- [Litho Model Generations](https://awesome-repositories.com/f/user-interface-experience/ui-architecture/design-utilities/ui-component-guidelines/natural-language-component-generators/component-generators-and-marketplaces/litho-model-generations.md) — Automatically creates EpoxyModel subclasses from Litho @LayoutSpec annotations with setters for each @Prop and change tracking. ([source](https://github.com/airbnb/epoxy/wiki/Litho-Support))
- [RecycledViewPool Sharing](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/generic-view-recycling/recycledviewpool-sharing.md) — Shares a single RecycledViewPool across multiple RecyclerView instances to maximize view recycling.
- [Stale-Proof Click Handlers](https://awesome-repositories.com/f/user-interface-experience/view-recycling-systems/type-based-item-recycling/model-driven-view-binding/stale-proof-click-handlers.md) — Provides click listeners that always deliver the current model data, avoiding stale references from recycled views. ([source](https://github.com/airbnb/epoxy/wiki/DoNotHash))
- [Visibility Reporters](https://awesome-repositories.com/f/user-interface-experience/visibility-reporters.md) — Reports scroll visibility state and percentage-visible events for items through annotations and listeners.
- [RecyclerView Item](https://awesome-repositories.com/f/user-interface-experience/visibility-toggles/recyclerview-item.md) — Toggles item visibility in RecyclerView without removal, using an empty zero-height layout. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Adapter))
- [Auto-Model Persistent Items](https://awesome-repositories.com/f/user-interface-experience/visibility-toggles/recyclerview-item/auto-model-persistent-items.md) — Provides @AutoModel annotation for automatic creation and stable ID assignment of persistent RecyclerView items. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Per-Instance Visibility Listeners](https://awesome-repositories.com/f/user-interface-experience/visibility-utilities/per-instance-visibility-listeners.md) — Attaches visibility state and percentage-visible listeners to individual model instances. ([source](https://github.com/airbnb/epoxy/wiki/Visibility-Events))

### Artificial Intelligence & ML

- [RecyclerView Model Lists](https://awesome-repositories.com/f/artificial-intelligence-ml/machine-learning/infrastructure/model-evaluation-and-validation/model-capability-assessment/model-capability-queries/model-list-management/recyclerview-model-lists.md) — Manages lists of models that define items and their order in a RecyclerView with change notifications. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Adapter))

### Business & Productivity Software

- [Model Property Change Detectors](https://awesome-repositories.com/f/business-productivity-software/data-change-listeners/model-property-change-detectors.md) — Rebinds only changed properties using equals and hashcode comparisons for efficient updates. ([source](https://github.com/airbnb/epoxy/wiki/Data-Binding-Support))
- [RecyclerView View State Persistence](https://awesome-repositories.com/f/business-productivity-software/saved-views/recyclerview-view-state-persistence.md) — Saves and restores RecyclerView item visual state across configuration changes. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))

### Data & Databases

- [Model Variable Change Detection](https://awesome-repositories.com/f/data-databases/data-change-subscriptions/model-variable-change-detection.md) — Provides automatic detection of data variable changes to rebind only modified properties in RecyclerView items. ([source](https://github.com/airbnb/epoxy/wiki/Data-Binding-Support))
- [List Update Optimizers](https://awesome-repositories.com/f/data-databases/data-insertion-interfaces/hierarchical-data-insertion/list-update-optimizers.md) — Compares old and new model lists to determine minimal changes and applies smooth animations. ([source](https://github.com/airbnb/epoxy/wiki))
- [Typed Controller Data Passing](https://awesome-repositories.com/f/data-databases/data-models/data-to-model-mappers/typed-controller-data-passing.md) — Provides typed controllers that receive data objects directly, enabling pure and testable model building. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [DataBinding Layout Model Generators](https://awesome-repositories.com/f/data-databases/model-as-a-table-integrations/databinding-layout-model-generators.md) — Generates RecyclerView model classes from Android DataBinding layouts using layout variables as properties. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [ViewHolder Model Generators](https://awesome-repositories.com/f/data-databases/model-as-a-table-integrations/viewholder-model-generators.md) — Generates RecyclerView model classes from view holder patterns using field annotations. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [Declarative Model Builders](https://awesome-repositories.com/f/data-databases/model-class-querying/mvc-controller-model-writers/declarative-model-builders.md) — Uses a controller class with a buildModels method to declaratively construct immutable model lists.
- [Preloading](https://awesome-repositories.com/f/data-databases/data-caching/remote-dataset-caching/network-image-caching/preloading.md) — Fetches image data in the background before a model is bound to the screen. ([source](https://github.com/airbnb/epoxy/wiki/Image-Preloading))
- [Glide Image Preloaders](https://awesome-repositories.com/f/data-databases/data-caching/remote-dataset-caching/network-image-caching/preloading/glide-image-preloaders.md) — Ships a built-in Glide preloader that matches image dimensions and scale type for cache hits. ([source](https://github.com/airbnb/epoxy/wiki/Image-Preloading))
- [Mixed Paginated and Custom Items](https://awesome-repositories.com/f/data-databases/data-pagination/mixed-paginated-and-custom-items.md) — Adds non-paged view types like headers alongside paginated items, rebuilding only custom models on demand. ([source](https://github.com/airbnb/epoxy/wiki/Paging-Support))
- [Auto-Managed Persistent Models](https://awesome-repositories.com/f/data-databases/model-class-querying/mvc-controller-model-writers/declarative-model-builders/auto-managed-persistent-models.md) — Annotates fields to automatically create and manage models with stable IDs for persistent items. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [RecyclerView Pagination](https://awesome-repositories.com/f/data-databases/pagination/asynchronous-pagination-handlers/recyclerview-pagination.md) — Loads large data sets page by page and constructs models on background threads to keep the UI responsive.
- [Annotation-Free Model Definitions](https://awesome-repositories.com/f/data-databases/schema-metadata-annotations/model-behavioral-annotations/annotation-free-model-definitions.md) — Creates RecyclerView models using Kotlin data classes and property delegates without annotation processing. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))
- [RecyclerView State Persistence](https://awesome-repositories.com/f/data-databases/state-persistence/list-state-persisters/recyclerview-state-persistence.md) — Saves and restores visual state of RecyclerView items across configuration changes, scrolls, and list updates.

### Development Tools & Productivity

- [RecyclerView Model Diffing](https://awesome-repositories.com/f/development-tools-productivity/code-quality-analysis/static-analysis-engines/static-analysis-tools/code-analysis-tools/local-change-reviewers/change-review-interfaces/live-diff-views/recyclerview-model-diffing.md) — Compares RecyclerView model states using equals and hashCode to update only the views that changed. ([source](https://github.com/airbnb/epoxy/wiki/Diffing))
- [Per-View State Persistence](https://awesome-repositories.com/f/development-tools-productivity/automatic-file-saving/state-auto-saving/per-view-state-persistence.md) — Activates view state saving on individual models, saving hierarchy state on unbind and restoring on initial bind. ([source](https://github.com/airbnb/epoxy/wiki/Saving-View-State))
- [Paginated Item Mixins](https://awesome-repositories.com/f/development-tools-productivity/github-integration-tools/item-detail-views/paginated-item-mixins.md) — Allows mixing paginated items with custom view types like headers in a single RecyclerView. ([source](https://github.com/airbnb/epoxy/wiki/Paging-Support))

### DevOps & Infrastructure

- [RecyclerView Model Rebuild Triggers](https://awesome-repositories.com/f/devops-infrastructure/automated-container-updaters/automatic-rebuild-triggers/recyclerview-model-rebuild-triggers.md) — Provides a requestModelBuild method to trigger debounced model list rebuilds and adapter updates. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Kotlin DSL Model Groups](https://awesome-repositories.com/f/devops-infrastructure/environment-grouping/configuration-set-grouping/model-groupings/kotlin-dsl-model-groups.md) — Provides a Kotlin DSL extension function for building and adding grouped models within an EpoxyController. ([source](https://github.com/airbnb/epoxy/wiki/Grouping-Models))

### Networking & Communication

- [RecyclerView Change Notifications](https://awesome-repositories.com/f/networking-communication/publish-subscribe-systems/data-change-notifications/recyclerview-change-notifications.md) — Dispatches standard RecyclerView notifications after modifying the model list to keep the displayed view in sync. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Adapter))
- [View-Recycling Cancellations](https://awesome-repositories.com/f/networking-communication/network-request-clients/request-cancellations/view-recycling-cancellations.md) — Calls annotated methods when a view is recycled to release listeners and bitmaps. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))

### Programming Languages & Runtimes

- [RecyclerView Model Generators](https://awesome-repositories.com/f/programming-languages-runtimes/java-annotation-processors/recyclerview-model-generators.md) — Generates RecyclerView adapter models at compile time from annotated views, layouts, or view holders.
- [RecyclerView Model DSL Builders](https://awesome-repositories.com/f/programming-languages-runtimes/language-ecosystems-tooling/kotlin-extensions/recyclerview-model-dsl-builders.md) — Uses generated extension functions on the controller to create and add models in a concise lambda syntax. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))

### Security & Cryptography

- [Controller Attachments](https://awesome-repositories.com/f/security-cryptography/encryption-as-a-service/controller-attachments.md) — Provides a one-call method to attach an EpoxyController to a RecyclerView and trigger the first model build. ([source](https://github.com/airbnb/epoxy/wiki/EpoxyRecyclerView))

### Software Engineering & Architecture

- [RecyclerView Model Generators](https://awesome-repositories.com/f/software-engineering-architecture/annotation-based-view-mapping/recyclerview-model-generators.md) — Generates RecyclerView model classes from custom views, data binding layouts, or view holders using annotation processing.
- [Data-Driven Model Builders](https://awesome-repositories.com/f/software-engineering-architecture/annotation-based-view-mapping/recyclerview-model-generators/data-driven-model-builders.md) — Builds immutable models from data state and diffs them against previous models for efficient updates. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Selective Property Rebinders](https://awesome-repositories.com/f/software-engineering-architecture/architectural-design-patterns/state-management/change-detection/property-change-observers/selective-property-rebinders.md) — Updates only changed properties when a model's state is updated, avoiding full view rebinds. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [List Diffing Dispatchers](https://awesome-repositories.com/f/software-engineering-architecture/background-thread-dispatchers/list-diffing-dispatchers.md) — Offloads RecyclerView model list diff computation to a background thread for UI responsiveness.
- [RecyclerView](https://awesome-repositories.com/f/software-engineering-architecture/diffing-engines/recyclerview.md) — Automatically diffs model lists and applies minimal updates with animations for insertions, removals, and moves.
- [ViewHolder Model Generators](https://awesome-repositories.com/f/software-engineering-architecture/metadata-attachments/code-annotations/spec-from-annotation-generators/viewholder-model-generators.md) — Generates RecyclerView model classes from annotated abstract classes with view binding in holders. ([source](https://github.com/airbnb/epoxy/wiki/Basic-Usage))
- [Selective Property Rebinders](https://awesome-repositories.com/f/software-engineering-architecture/model-view-update-runtimes/selective-property-rebinders.md) — Compares prop values and only calls setters for properties that changed, avoiding unnecessary view updates. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [RecyclerView Model Usage Validations](https://awesome-repositories.com/f/software-engineering-architecture/runtime-object-validity-checks/recyclerview-model-usage-validations.md) — Adds runtime validation to prevent duplicate model additions and post-addition modifications in controllers. ([source](https://github.com/airbnb/epoxy/wiki/Configuration))
- [Runtime Immutability Enforcements](https://awesome-repositories.com/f/software-engineering-architecture/schema-based-state-validation/model-based-state-validation/base-model-validations/runtime-immutability-enforcements.md) — Enforces runtime immutability and unique ID checks on generated models to prevent state corruption. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Model Building Thread Offloaders](https://awesome-repositories.com/f/software-engineering-architecture/task-scheduling/asynchronous-schedulers/asynchronous-thread-schedulers/model-building-thread-offloaders.md) — Builds and diffs item models on a background thread to keep the UI responsive during pagination. ([source](https://github.com/airbnb/epoxy/wiki/Paging-Support))
- [Typed Controller Data Flow](https://awesome-repositories.com/f/software-engineering-architecture/task-scheduling/dependency-aware-task-orchestration/typed-data-passing/typed-controller-data-flow.md) — Provides TypedEpoxyController for passing typed data directly to buildModels, reducing boilerplate. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Visibility Annotation Handlers](https://awesome-repositories.com/f/software-engineering-architecture/annotation-based-view-mapping/visibility-annotation-handlers.md) — Annotates view methods to receive scroll visibility state and percentage-visible events. ([source](https://github.com/airbnb/epoxy/wiki/Visibility-Events))
- [RecyclerView Data Classes](https://awesome-repositories.com/f/software-engineering-architecture/class-based-data-modeling/recyclerview-data-classes.md) — Creates RecyclerView models using Kotlin data classes with built-in equals/hashcode for automatic diffing. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))
- [Generated View Interfaces](https://awesome-repositories.com/f/software-engineering-architecture/interface-based-polymorphism/generated-view-interfaces.md) — Generates interfaces from shared view props for type-safe polymorphic model access. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Adapter Observer Leak Preventers](https://awesome-repositories.com/f/software-engineering-architecture/memory-usage-analysis/memory-leak-prevention/adapter-observer-leak-preventers.md) — Prevents memory leaks by removing adapter observers when RecyclerView is detached. ([source](https://github.com/airbnb/epoxy/wiki/Avoiding-Memory-Leaks))
- [Adapter Reuse Leak Preventers](https://awesome-repositories.com/f/software-engineering-architecture/memory-usage-analysis/memory-leak-prevention/adapter-reuse-leak-preventers.md) — Prevents memory leaks from reused adapters by recycling views on RecyclerView detachment. ([source](https://github.com/airbnb/epoxy/wiki/Avoiding-Memory-Leaks))
- [RecyclerView Adapter Leak Preventers](https://awesome-repositories.com/f/software-engineering-architecture/memory-usage-analysis/memory-leak-prevention/callback-leak-preventers/recyclerview-adapter-leak-preventers.md) — Prevents memory leaks by unregistering adapter observers on RecyclerView detachment. ([source](https://github.com/airbnb/epoxy/wiki/Avoiding-Memory-Leaks))
- [RecyclerView View Leak Preventers](https://awesome-repositories.com/f/software-engineering-architecture/memory-usage-analysis/memory-leak-prevention/recyclerview-view-leak-preventers.md) — Prevents memory leaks by recycling child views when RecyclerView is detached. ([source](https://github.com/airbnb/epoxy/wiki/Avoiding-Memory-Leaks))
- [Model Property Defaults](https://awesome-repositories.com/f/software-engineering-architecture/optional-value-types/default-value-insertions/model-property-defaults.md) — Makes model properties optional with default values via Kotlin defaults or annotations. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Paging Library Data Loading](https://awesome-repositories.com/f/software-engineering-architecture/performance-reliability/performance-optimization/frontend-rendering-loading/page-navigation-prefetching/paging-library-data-loading.md) — Loads large data sets page by page using the Android Paging Library, automatically building and caching models. ([source](https://github.com/airbnb/epoxy/wiki/Paging-Support))
- [Model List Interceptors](https://awesome-repositories.com/f/software-engineering-architecture/request-interception-middleware/model-call-interceptors/model-list-interceptors.md) — Ships an interceptor system for modifying the model list after build, enabling cross-cutting UI changes. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))
- [Prop Change Exclusion Annotations](https://awesome-repositories.com/f/software-engineering-architecture/state-synchronization-utilities/prop-driven-state-synchronization/prop-change-exclusion-annotations.md) — Excludes specific properties from triggering view updates via annotation, useful for listeners. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))
- [Android Resource String Overloads](https://awesome-repositories.com/f/software-engineering-architecture/string-formatting-utilities/string-binding-formatters/android-resource-string-overloads.md) — Generates convenience methods for setting text via Android string resources and plurals. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))

### Web Development

- [RecyclerView Model Annotations](https://awesome-repositories.com/f/web-development/restful-apis/documentation-schemas/multi-response-modeling/annotated-response-models/recyclerview-model-annotations.md) — Generates RecyclerView models from annotated custom views or view holders, automating equals/hashcode and binding. ([source](https://github.com/airbnb/epoxy/wiki/Kotlin-Model-Examples))
- [Item Click Delegators](https://awesome-repositories.com/f/web-development/event-delegation/item-click-delegators.md) — Attaches typed click listeners to models, providing the model, view, and position on click. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Models))
- [RecyclerView Model Build Offloaders](https://awesome-repositories.com/f/web-development/main-thread-offloading/recyclerview-model-build-offloaders.md) — Configures custom Handler threads for model building and diffing to offload work from the main thread. ([source](https://github.com/airbnb/epoxy/wiki/Epoxy-Controller))

### Education & Learning Resources

- [Mutually Exclusive Prop Groups](https://awesome-repositories.com/f/education-learning-resources/mutual-exclusion-algorithms/mutually-exclusive-prop-groups.md) — Groups setters so only the last-set prop is applied, preventing conflicting values on views. ([source](https://github.com/airbnb/epoxy/wiki/Generating-Models-from-View-Annotations))

### Game Development

- [RecyclerView State Persistence](https://awesome-repositories.com/f/game-development/emulation-save-management/save-state-managers/recyclerview-state-persistence.md) — Saves and restores view state across activity or fragment recreation by calling save and restore methods on the controller. ([source](https://github.com/airbnb/epoxy/wiki/Saving-View-State))

### Graphics & Multimedia

- [Model Visibility Override Callbacks](https://awesome-repositories.com/f/graphics-multimedia/model-visibility-overrides/model-visibility-override-callbacks.md) — Overrides visibility callbacks in model subclasses to handle scroll events for all models of that type. ([source](https://github.com/airbnb/epoxy/wiki/Visibility-Events))
