Alinea is a modern content management system.
- Content is stored in flat files and committed to your repository
- Content is easily queryable through an in-memory SQLite database
- Content is fully typed
Install alinea in your project directory
npm install alinea
Initialize alinea's config file
npx alinea init --next
Open the dashboard to have a look around
npx alinea dev
Start configuring types and fields →
Configure alinea in cms.tsx
import {Config, Field} from 'alinea'
const Blog = Config.document('Blog', {
contains: ['BlogPost']
})
const BlogPost = Config.document('Blog post', {
fields: {
title: Field.text('Blog entry title'),
body: Field.richText('Body text')
}
})
Retrieve content fully-typed and filter, order, limit as needed.
Select only the fields you need.
import {Query} from 'alinea'
console.log(
await cms.get({
type: Blog,
select: {
title: Blog.title,
posts: Query.children({
type: BlogPost,
select: {
title: BlogPost.title
}
})
}
})
)
Content is available during static site generation and when server side querying.
Content is bundled with your code and can be queried with zero network overhead.
Alinea supports custom backends that can be hosted as a simple Node.js process or on serverless runtimes.
Have a question or an idea? Found a bug? Read how to contribute.