Quickstart

A blog backend in ten minutes.

Install Tangen, define a post and an author, push once, and query it from your app with full types. By the end you have a real content backend, a typed API, and an admin your team can use.

  1. 1 ~1 min

    Create your project

    One command scaffolds the project, installs Tangen, and writes a ready .env.

    terminal
    $ npx -p @tangen/cms tangen create blog
    $ cd blog          # then set your Postgres URL in .env
  2. 2 ~3 min

    Define your content

    Write the model as TypeScript. A post, an author, and a relation between them.

    content/blog.ts
    import { defineObjectType, field } from '@tangen/cms'
    
    export const author = defineObjectType({
      name: 'author',
      fields: { name: field.text({ validation: { required: true } }), bio: field.richtext() },
    })
    
    export const post = defineObjectType({
      name: 'post',
      fields: {
        title:  field.text({ validation: { required: true } }),
        body:   field.richtext(),
        author: field.relation({ targetType: 'author' }),
      },
    })
  3. 3 ~1 min

    Create the database

    Bootstrap creates the tables from your schema and generates types. Later, tangen push applies changes.

    terminal
    $ tangen bootstrap
    $ tangen push      # apply later schema changes
  4. 4 ~2 min

    Query from your app

    Read content anywhere with the typed SDK. Keys, filters, and sorts are checked at compile time.

    app/blog.ts
    const { data } = await tangen
      .objects('post')
      .where({ status: 'published' })
      .sort('publishedAt', 'desc')
      .get()
  5. 5 ~3 min

    Write and preview

    Open the admin, add a post, and watch it render on your real site as you type. No publish-and-refresh loop.

Build on Tangen in the private beta.

Define a content type, push it, and query it from anywhere, with your own AI agent doing the rest. Request access and we will get you set up.

Quickstart · Tangen