---
title: "createContent"
description: "Declares a set of content collections."
url: "https://pitlane.tools/package/content/function/createContent"
---

# createContent

```ts
import { createContent } from "@pitlane/content";
```

```ts
function createContent<T>(build): Content<T>;
```

Declares a set of content collections.

Returns the collection object synchronously without loading entries. Reads and rendering remain asynchronous. Declaration errors throw here.

Under `contentLayer()`, registers deferred population work. The plugin awaits it after evaluating the declarations and before emitting the bundle.

## Type Parameters

### T

`T` _extends_ `Record`\<`string`, [`CollectionDefinition`](https://pitlane.tools/package/content/interface/CollectionDefinition.md)\<[`StandardSchemaV1`](https://standardschema.dev)\<`unknown`>>>

## Parameters

### build

(`c`: [`ContentBuilder`](https://pitlane.tools/package/content/interface/ContentBuilder.md)) => `T`

Receives the [ContentBuilder](https://pitlane.tools/package/content/interface/ContentBuilder.md) and returns one collection per key, each declared with `c.collection({ loader, schema })`

## Returns

[`Content`](https://pitlane.tools/package/content/type/Content.md)\<`T`>

One [Collection](https://pitlane.tools/package/content/interface/Collection.md) per key of the object `build` returned

## Throws

Error when `c.reference()` names a collection `build` did not declare

## See

- [Content guide](https://pitlane.tools/guides/content.md)
- [Content guide, without a build](https://pitlane.tools/guides/content-no-build.md)

## Example

```ts title="app/content.ts"
import { createContent } from "@pitlane/content";
import * as loaders from "@pitlane/content/loaders";
import * as s from "remix/data-schema";
import * as coerce from "remix/data-schema/coerce";

export let content = createContent(c => ({
    blog: c.collection({
        loader: loaders.glob({ base: "app/content/blog", pattern: "*.{md,mdx}" }),
        schema: s.object({
            title: s.string(),
            pubDate: coerce.date(),
            author: c.reference("authors"),
        }),
    }),
    authors: c.collection({
        loader: loaders.file("app/content/authors.json"),
        schema: s.object({ name: s.string() }),
    }),
}));

let posts = await content.blog.getCollection();
let post = await content.blog.getEntry("hello-world");
```
