Browse all documentation

Introduction

Learn what Ridu provides, how an application is configured, and where to start.

What is Ridu?

Ridu is a Go content-management framework with a built-in Svelte 5 admin. You define collections, fields, access rules, hooks, and plugins in executable Go. Ridu resolves that config into a schema manifest and derives the database plan, REST contract, TypeScript types, Fetch client, and authoring interface from it.

Local Go calls, REST, the SDK, admin, tasks, and plugin transports use the same authorization, validation, hooks, transactions, population, and redaction. The built admin is embedded in the Go server, so Node.js and package managers are build-time tools.

Choose PostgreSQL for networked, multi-host deployments or SQLite for a local file on one host. MongoDB requires a transaction-capable replica set and has a narrower supported production profile. Uploads can use local storage or S3-compatible object storage.

Check Capability status for complete, limited, experimental, and planned behavior.

The authoring model

A collection is a typed Go config value:

content/posts.go
var Posts = ridu.Collection{
  Slug: "posts",
  Fields: []field.Definition{
    field.Text("title", field.Required()),
    field.Select("status",
      field.OneOf("draft", "published"),
      field.Default("draft"),
    ),
  },
}

Go checks names and option types at compile time; Ridu then validates cross-field and cross-collection rules while resolving the manifest. Ridu for TypeScript developers explains packages, struct literals, slices, functions, nil, errors, and contexts through familiar TypeScript ideas.

Frontend developers consume the generated application module and can remain in TypeScript:

src/posts.ts
import { createClient } from '~/generated/ridu.generated';

const client = createClient({ baseURL: 'https://cms.example.com' });

const page = await client.list('posts', {
  where: { status: { equals: 'published' } },
  sort: ['-publishedAt'],
  limit: 12
});

for (const post of page.docs) {
  console.log(post.title);
}

The generated module provides collection and field types through the Fetch SDK. Its methods return Promise<T> and throw structured RiduError failures.

Choose your path

I build TypeScript frontends

Read TypeScript SDK and Querying data first. You need Go only when you author the server schema or a compiled backend extension; a frontend consuming an existing Ridu application stays in TypeScript.

I model content and backend behavior

Follow the installation guide, then read Core concepts, Configuration, Fields, Access control, and Hooks. The Project structure guide separates files you own from committed generated contracts and disposable build state.

I am evaluating another CMS

Use Move from Payload for a concept and migration-contract map, or Ridu for PocketBase users for the code-defined and embedded-store trade-offs. Read Performance and footprint for benchmark results and test conditions.

Current limits

See Capability status for available, limited, experimental, and planned features before choosing them for a project.

Create an application

Open the project wizard with your preferred launcher:

npm create ridu@latest my-app

Choose Starter or Blank, a database, and optional agent guidance. Review the summary, then run the install and dev commands the initializer prints. Omit my-app if you prefer to name the directory inside the wizard.

Direct Go installation, organization-specific Go module/npm scope flags, non-interactive automation, and recovery are covered in Installation.

The CLI prints the local admin URL. On the first visit, create the initial admin account. Installation explains requirements, generated files, and database choices.