Open source · TypeScript-first · Self-hosted

Build your application. Bando handles the content.

Bando is an open-source headless CMS for developers. Define your content in TypeScript and let Bando handle the infrastructure required to store, manage, and deliver your application's data.

$ npm install bando-cms
bando.local — schema.ts
1 import { defineCollection, text, image, richText } from 'bando-cms'
2
3 export const post = defineCollection({
4   name: 'posts',
5   fields: {
6     title: text({ required: true }),
7     cover: image(),
8     body: richText(),
9     published: boolean(),
10   },
11 })
schema defined Studio + API + types
title string
cover image
body richText
published boolean
Bando Studio

Your content.
In a Studio built for it.

Bando Studio is designed to work with the content defined by your project. The goal is to keep the editorial experience close to your application's architecture.

bando.local / studio
Bando Studio — content management interface
Features

Content infrastructure built for developers.

Bando turns TypeScript schemas into a complete infrastructure for defining, managing, and consuming content in your applications.

Schema as code

Define types, validations, relationships, and configuration directly in TypeScript. Your schema lives in your project and can be versioned with Git.

API

Your content is available through the Bando API, ready to be consumed by the applications you build.

React Studio

An editorial interface built to work with the collections and fields defined by your project.

Developer-first

Content configuration and architecture are part of your codebase, making Git, review, and collaboration part of the workflow.

Continuous evolution

Bando continues to evolve with new capabilities, integrations, and tools to make content infrastructure increasingly complete.

Self-hosted

Run Bando on your machine, a VPS, or your own infrastructure. Your data stays under your control.

Developer experience

Define. Query. Render.

The same schema that defines your content provides the foundation for working with that data in your application.

1 import { defineCollection, text, image, slug } from 'bando-cms'
2
3 export const post = defineCollection({
4   name: 'posts',
5   fields: {
6     title: text({ required: true }),
7     slug: slug({ source: 'title' }),
8     cover: image(),
9   }
10 })
1 import { createBandoClient } from 'bando-cms'
2
3 const bando = createBandoClient({
4   baseUrl: 'http://localhost:3333',
5 });

6 const { data, total } = await bando
7  .collection( 'posts' )
8  .findMany({
9   limit: 10,
10   sort: '-createdAt',
11   filters: {
12     published: true,
13   }
14 });
1 import { createBandoClient } from 'bando-cms'
2
3 const bando = createBandoClient({
4   baseUrl: 'http://localhost:3333' });
5
6 export async function getPosts() {
7   const { data } = await bando
8     .collection( 'posts' )
9     .findMany({
10       limit: 10
11     });
12 return data;
13 }
Open source

The code is yours. The infrastructure is too.

Bando is open source and can run on your own infrastructure. You have access to the code, your data, and how your content integrates with your application.

Bando-CMS
Status Available
License MIT
Language TypeScript
Architecture Self-hosted
  • 01

    Open source

    The source code is publicly available for inspection, use, and contribution.

  • 02

    Open contributions

    Issues, pull requests, and community proposals are part of Bando's evolution.

  • 03

    No vendor lock-in

    Run the project on your own infrastructure while keeping control of your data.

Get started

Less infrastructure. More product.

Define your content, run Bando, and focus on the application you're actually building.

$ npm install bando-cms
View on GitHub