# instagram/iglistkit

**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/instagram-iglistkit).**

13,070 stars · 1,540 forks · Objective-C · MIT

## Links

- GitHub: https://github.com/Instagram/IGListKit
- Homepage: https://instagram.github.io/IGListKit/
- awesome-repositories: https://awesome-repositories.com/repository/instagram-iglistkit.md

## Topics

`diffing` `instagram` `ios` `objective-c` `uicollectionview`

## Description

IGListKit is a data-driven list manager and framework for iOS that decouples data models from cell logic. It serves as a wrapper for collection views, using a system of section controllers to map specific data model types to independent objects that manage the logic and sizing for list sections.

The project features a diffing algorithm library that calculates the minimal set of changes between two data collections. By using unique identifiers and equality tracking, it identifies inserts, deletes, and moves to trigger animated updates instead of full interface reloads.

The framework covers a broad range of capabilities including the rendering of diverse content types within a single list, the integration of supplementary views, and the monitoring of cell display events. It also includes proximity monitoring to notify controllers when they enter a range around the viewport to allow for proactive asset pre-loading.

## Tags

### Mobile Development

- [CollectionView Wrappers](https://awesome-repositories.com/f/mobile-development/collectionview-wrappers.md) — Provides a data-driven wrapper for UICollectionView that decouples data models from cell logic using section controllers.
- [List Interface Frameworks](https://awesome-repositories.com/f/mobile-development/ios-apple-ecosystem/ios-development/list-interface-frameworks.md) — Offers a data-driven framework for building complex, performant scrolling lists and managing cell logic in iOS applications.

### Software Engineering & Architecture

- [Data Diffing Algorithms](https://awesome-repositories.com/f/software-engineering-architecture/data-diffing-algorithms.md) — Identify inserts, deletes, and moves between collections to prevent unnecessary user interface refreshes. ([source](https://instagram.github.io/IGListKit/getting-started.html))
- [Diffing Algorithms](https://awesome-repositories.com/f/software-engineering-architecture/diffing-algorithms.md) — Implements a high-performance linear-time algorithm to identify inserts, deletes, and moves between datasets.
- [Diffing Rule Definitions](https://awesome-repositories.com/f/software-engineering-architecture/diffing-algorithms/diffing-rule-definitions.md) — Allows establishing custom equality and identity rules for data models to control item updates and movement. ([source](https://instagram.github.io/IGListKit))
- [Referential Equality Checking](https://awesome-repositories.com/f/software-engineering-architecture/referential-equality-checking.md) — Uses unique identifiers and referential equality checks to detect if objects have moved or changed state.

### User Interface & Experience

- [Algebraic Data Type Layouts](https://awesome-repositories.com/f/user-interface-experience/algebraic-data-type-layouts.md) — Decouples data models from cell logic to render diverse content types within a single list. ([source](https://github.com/instagram/iglistkit#readme))
- [Data-Driven List Managers](https://awesome-repositories.com/f/user-interface-experience/data-display-components/list-components/list-filtering-utilities/data-driven-list-managers.md) — Decouples data models from cell logic using dedicated section controllers for each content type.
- [UI](https://awesome-repositories.com/f/user-interface-experience/data-mapping-frameworks/ui.md) — Maps data models to a UICollectionView to enable the rendering of complex lists with diverse content types.
- [Diffing-Based State Updates](https://awesome-repositories.com/f/user-interface-experience/diffing-based-state-updates.md) — Calculates the minimal set of changes between two data collections to trigger animated updates instead of full reloads.
- [Dynamic Feed Renderers](https://awesome-repositories.com/f/user-interface-experience/dynamic-feed-renderers.md) — Provides a system for mapping various data models to independent section controllers to render diverse content types in a single feed.
- [Heterogeneous List Rendering](https://awesome-repositories.com/f/user-interface-experience/heterogeneous-list-rendering.md) — Maps different data models to dedicated section controllers to display a single collection containing multiple content types. ([source](https://instagram.github.io/IGListKit))
- [Reactive List Updates](https://awesome-repositories.com/f/user-interface-experience/layout-utilities/presentation-engines/list-rendering/reactive-list-updates.md) — Automatically updates a collection view based on data set differences without manual reloads. ([source](https://github.com/instagram/iglistkit#readme))
- [Collection View Optimizers](https://awesome-repositories.com/f/user-interface-experience/performance-optimizers/collection-view-optimizers.md) — Reduces main thread lag by calculating the minimal set of data changes required to update the user interface.
- [Reactive State Synchronization](https://awesome-repositories.com/f/user-interface-experience/reactive-state-synchronization.md) — Updates the user interface automatically when data sets change without requiring manual reload methods.
- [Section Controllers](https://awesome-repositories.com/f/user-interface-experience/section-controllers.md) — Maps specific data model types to independent controller objects that manage the logic and sizing for list sections.
- [Cell Visibility Monitoring](https://awesome-repositories.com/f/user-interface-experience/cell-visibility-monitoring.md) — Tracks when section controllers and their cells enter or leave the visible screen area. ([source](https://instagram.github.io/IGListKit/getting-started.html))
- [Content Sectioning](https://awesome-repositories.com/f/user-interface-experience/content-dividers/content-sectioning.md) — Organizes long-form content into distinct sections mapped to independent controllers for custom rendering. ([source](https://instagram.github.io/IGListKit/getting-started.html))
- [Viewport Visibility Observers](https://awesome-repositories.com/f/user-interface-experience/viewport-visibility-observers.md) — Tracks when section controllers enter a range around the viewport to trigger pre-loading of assets.

### Web Development

- [Viewport-Based Preloading](https://awesome-repositories.com/f/web-development/viewport-based-preloading.md) — Notifies controllers when they enter a proximity range around the viewport to pre-load assets. ([source](https://instagram.github.io/IGListKit/getting-started.html))
