> For the complete documentation index, see [llms.txt](https://docs.atsign.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.atsign.com/dart-sdk/atcollections/introduction.md).

# Introduction

Learn about what an AtCollection is and ways you can build one.

## What are AtCollections?

AtCollections is a typed, shareable, reactive layer on top of AtRecords.&#x20;

An `AtCollection<T>` hold a list of `CItem<T>`, where `T` is a type that you define. A `CItem<T>` is a record that wraps your own domain object (a `Todo` class, a `Pet` class, a Dart `Map`, or a plain `String`). Instead of working with raw `AtKey`/`AtValue` pairs, the SDK handles key shapes, per-recipient fan-out, encryption, sync, and event plumbing underneath.

Each collection is scoped to a namespace (like `todos.my_app`) and a type. Items in a collection are owned by the author Atsign that created them and can be shared with other Atsigns.

## Two ways to build a collection

There are two paths depending on what you want to store. Go to these next pages to continue your journey in AtCollections.

| **Collection item type**                                                                                      | **When to use**                                          |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| [Create AtCollection from domain object](/dart-sdk/atcollections/create-atcollection-from-domain-object.md)   | You have your own class (`Todo`, `Pet`, `BlogPost`)      |
| [Create AtCollection from Dart primitive](/dart-sdk/atcollections/create-atcollection-from-dart-primitive.md) | You just want to store a `Map`, `String`, or `Uint8List` |

There are a bit of tiny things that differ between the two paths, but by the end of each path, both  produce the same `AtCollection<T>` object which will be used to manage your collection of data. Everything after the initial setup (CRUD, sub-collections, read receipts, event streams) works the same way regardless of which path you took.
