# Automerge CRDT > Automerge is a library of data structures for building collaborative applications. This file contains links to documentation sections following the llmstxt.org standard. ## Table of Contents - [Welcome to Automerge](https://automerge.org/docs/hello): Automerge is a library of data structures for building collaborative - [Tutorial: An Automerge todo list](https://automerge.org/docs/tutorial): import { jsx } from "react/jsx-runtime"; - [Modeling Data](https://automerge.org/docs/cookbook/modeling-data): All data in Automerge must be stored in a document. A document can be modeled in a variety of ways, and there are many design patterns that can be ... - [Prosemirror + React + Automerge](https://automerge.org/docs/cookbook/rich-text-prosemirror-react): Automerge supports rich text editing on top of [ProseMirror](https://prosemirror.net/). This guide will show you how to set up a simple collaborati... - [Prosemirror + VanillaJS + Automerge](https://automerge.org/docs/cookbook/rich-text-prosemirror-vanilla): Automerge supports rich text using [ProseMirror](https://prosemirror.net/). This guide will show you how to set up a simple collaborative rich text... - [API Docs](https://automerge.org/docs/reference/api): - [`@automerge/automerge`](https://automerge.org/automerge/api-docs/js) - [Concepts](https://automerge.org/docs/reference/concepts): :::info - [Glossary](https://automerge.org/docs/reference/glossary): Automerge is a type of CRDT (Conflict-Free Replicated Datatype). A CRDT is a data structure that simplifies multi-user applications. We can use the... - [Library Initialization](https://automerge.org/docs/reference/library_initialization): Automerge is implemented in Rust and compiled to WebAssembly for use in javascript environments. Unfortunately the way that WebAssembly modules are... - [The JavaScript packages](https://automerge.org/docs/reference/the_js_packages): The javascript API has been through several iterations and is currently split over a few libraries. In greenfield applications, here's how the libr... - [Conflicts](https://automerge.org/docs/reference/documents/conflicts): Automerge allows different nodes to independently make arbitrary changes to their respective copies - [Counters](https://automerge.org/docs/reference/documents/counters): If you have a numeric value that is only ever changed by adding or subtracting (e.g. counting how - [Document Data Model](https://automerge.org/docs/reference/documents): Automerge documents are quite similar to JSON objects. A document always consists of a root map which is a map from strings to other automerge valu... - [Lists](https://automerge.org/docs/reference/documents/lists): JavaScript Arrays are fully supported in Automerge. You can use `push`, `unshift`, `insertAt`, `deleteAt`, `splice`, loops, and nested objects. - [Rich Text](https://automerge.org/docs/reference/documents/rich_text): As well as [supporting](../text) plain text Automerge supports rich text editing. The rich text APIs are extensions of the plain text API. In addit... - [Text](https://automerge.org/docs/reference/documents/text): Automerge provides support for collaborative text editing. Under the hood, whenever you create a `string` in Automerge you are creating a collabora... - [Simple Values](https://automerge.org/docs/reference/documents/values): All JSON primitive datatypes are supported in an Automerge document. In addition, JavaScript [Date objects](https://developer.mozilla.org/en-US/doc... - [`DocHandle`s](https://automerge.org/docs/reference/repositories/dochandles): Once you have a `Repo` with a `NetworkAdapter` and a `StorageAdapter` you can get down to the business of creating and working with [`DocHandle`](h... - [Ephemeral Data](https://automerge.org/docs/reference/repositories/ephemeral): Automerge encourages you to persist most of your application state. Sometimes however there is state which it doesn't make any sense to persist. Go... - [Repositories](https://automerge.org/docs/reference/repositories): `@automerge/automerge` provides a JSON-like CRDT and a sync protocol, but this still leaves a lot of plumbing to do to use it in an application. [`... - [Networking](https://automerge.org/docs/reference/repositories/networking): There are many ways to talk to other peers. In `automerge-repo` this is captured by the [`NetworkAdapter`](https://automerge.org/automerge-repo/cla... - [Storage](https://automerge.org/docs/reference/repositories/storage): In `automerge-repo` "storage" refers to any implementation of [`StorageAdapter`](https://automerge.org/automerge-repo/classes/_automerge_automerge_... - [Merge Rules](https://automerge.org/docs/reference/under-the-hood/merge_rules): :::info - [Rich Text Schema](https://automerge.org/docs/reference/under-the-hood/rich_text_schema): The [rich text](../../documents/rich_text) API provides a set of primitives for annotating a sequence of characters with formatting information. Th... - [Storage](https://automerge.org/docs/reference/under-the-hood/storage): In the [tutorial](../../../tutorial) section we introduced a simple task list which synchronizes a todo list between any number of tabs. If you clo... - [Migrating from Automerge 2 to Automerge 3](https://automerge.org/docs/migrating-from-automerge-2-to-automerge-3): Automerge 3 is a major update to the Automerge library which enormously reduces memory usage and in many cases improves performance. It is however,...