# Alinea CMS Docs Full documentation: /llms-full.txt ## Pages - [Introduction](/llms/docs.md): Alinea is an open source headless CMS written in Typescript. - [Configuration](/llms/docs/configuration.md): All configuration can be managed from the `cms.ts` file. - [Fields](/llms/docs/configuration/fields.md): Fields make data editable. - [Check](/llms/docs/configuration/fields/check.md): A check field is used to input boolean data. - [Code](/llms/docs/configuration/fields/code.md): A code field is used to input code. - [Custom fields](/llms/docs/configuration/fields/custom-fields.md): It's possible to create custom fields. - [Date & time](/llms/docs/configuration/fields/date.md): A date field is used to input a date. - [Entry](/llms/docs/configuration/fields/entry.md): The entry field can be used to link to an internal page. - [File](/llms/docs/configuration/fields/file.md): The file field can be used to link to a file. - [Image](/llms/docs/configuration/fields/image.md): The image field can be used to select an image. - [Link](/llms/docs/configuration/fields/link.md): The link field can be used to create one or multiple references to other entries or external resources (like a webpage or an email address). - [List](/llms/docs/configuration/fields/list.md): A list field contains blocks of fields. - [Number](/llms/docs/configuration/fields/number.md): A number field is used to input numeric data. - [Object](/llms/docs/configuration/fields/object.md): An object field groups multiple fields together. - [Path](/llms/docs/configuration/fields/path.md): A path field is used to generate a slug based on another field - by default, the title field. - [Rich Text](/llms/docs/configuration/fields/rich-text.md): Rich text can contain text marks like bold, italics or underline. - [Select](/llms/docs/configuration/fields/select.md): A select field limits data to a specific set of options. - [Tabs](/llms/docs/configuration/fields/tabs.md): Tabs help you structure the input fields in the admin panel. - [Text](/llms/docs/configuration/fields/text.md): A text field is used to input textual data. - [Url](/llms/docs/configuration/fields/url.md): The Url field can be used to link to an external resource. - [Roles & Permissions](/llms/docs/configuration/roles-permissions.md): Roles define what users can see and do within the CMS dashboard. - [Schema](/llms/docs/configuration/schema.md): A schema is a collection of [Types](/docs/configuration/schema/type). - [Document](/llms/docs/configuration/schema/document.md): Use the `document` utility function to create a [Type](/docs/configuration/schema/type) with the following preconfigured fields: - [Type](/llms/docs/configuration/schema/type.md): A type defines fields and presentational settings. - [Workspaces](/llms/docs/configuration/workspaces.md): Workspaces allow you to structure content into logical categories. - [Media](/llms/docs/configuration/workspaces/media.md): To manage uploads a Media Root is added to a Workspace. - [Roots](/llms/docs/configuration/workspaces/root.md): Roots help you organize content hierarchically in a tree. - [Content](/llms/docs/content.md): Alinea generates files on your file system in a few places. - [Editing content](/llms/docs/content/editing-content.md): Your CMS instance has methods to create and update content. - [Live previews](/llms/docs/content/live-previews.md): You can set up a live preview of your website inside the dashboard. - [Querying content](/llms/docs/content/query.md): Once content has been saved in the CMS you'll want a way to retrieve it. - [Advanced](/llms/docs/content/query/advanced.md): When fetching data, you will eventually need information from a linked entry. - [Examples](/llms/docs/content/query/examples.md): export const ChildSchema = Config.document('Child', { - [Filtering](/llms/docs/content/query/filtering.md): Use the filter property when you need to narrow down your results based on dynamic criteria or specific field values. - [Related](/llms/docs/content/query/related.md): As mentioned previously, you can use include to fetch related 'edges' of a queried item. - [Structural](/llms/docs/content/query/structural.md): Use top-level properties to define the scope of your query. - [TypeScript](/llms/docs/content/typescript.md): The type of a content [Type](/docs/configuration/schema/type) can be inferred. - [Deploy](/llms/docs/deploy.md): Once you're ready to deploy to production it's time to hook up Alinea to a backend. - [Alinea Cloud](/llms/docs/deploy/alinea-cloud.md): [Alinea.cloud](https://www.alinea.cloud) provides a cloud service to set up a backend in a few clicks. - [Self-Hosted](/llms/docs/deploy/self-host.md): The Alinea backend can be hosted on most Javascript runtimes if provided with a database (PostgreSQL, SQLite or Mysql) and a Github authentication token. - [Getting started](/llms/docs/getting-started.md): Get started by creating a new Next.js project. - [Reference](/llms/docs/reference.md): Working with Alinea should feel intuitive but if you're looking for more in-depth information or feel like something is missing have a look here. - [Agents playbook](/llms/docs/reference/agents-playbook.md): This page is the operational playbook for coding agents that need to create or update Alinea content JSON directly. - [CLI](/llms/docs/reference/cli.md): Usage - [Internationalization](/llms/docs/reference/internationalization.md): Alinea is built with internalization in mind. - [Tutorial](/llms/docs/tutorial.md): This tutorial is an opinionated, Next.js-first setup for building a real website with Alinea. - [Step 1: Landing page](/llms/docs/tutorial/step-1-landing-page.md): We're going to work towards setting up a welcome page, served on the root domain of the website. - [Step 2: Content blocks](/llms/docs/tutorial/step-2-block-list.md): Websites are often build up with a variety of full-width "page blocks". - [Step 3: Shared root](/llms/docs/tutorial/step-3-layout-root.md): In this step we keep the landing page from the previous steps and add a dedicated settings root for layout content shared by all pages. - [Step 4: Blog](/llms/docs/tutorial/step-4-blog.md): In this step we keep the landing page, blocks, and shared settings root from step 3, then add a dedicated blog section. - [Step 5: Catch-all route](/llms/docs/tutorial/step-5-catch-all.md): In this step we replace dedicated routes with one catch-all route, which gives full freedom to content editors to create and maintain their own content structures.