Skip to content

Contributing ​

Notes for people working on Laika rather than with it. If you're building an app that uses Laika, see the Guides instead — this section is for changes to this repo.

Orientation ​

Laika is a monorepo carrying two core packages, released together:

PackageWhat it is
laikacmsCore domain, HTTP APIs, storage/document/asset implementations, serializers, shared utilities.
@laikacms/serverDecap CMS integrations: the Decap-compatible backend, OAuth2, widgets, server adapters.

Alongside them, packages/github, packages/gitlab, packages/bitbucket, and packages/vite-plugin hold git-host storage adapters and the dev-server plugin. docs/ and apps/website are the documentation site and marketing site, both apps in the same pnpm workspace.

Each core package follows the same layered, DDD-lite structure (see Architecture):

api      → HTTP surface (storage-api, documents-api, ...)          depends on domain
domain   → interfaces (StorageRepository, ...), no runtime deps
impl     → concrete implementations (storage-fs, storage-r2, ...)  depends on domain
shared   → no internal dependencies (core, crypto, i18n, json-api)

A domain package (e.g. documents) defines an interface; an implementation package (e.g. documents-drizzle) implements it; an api package (e.g. documents-api) exposes it over HTTP. Use an existing triple under packages/laikacms/src (domain/storage, impl/storage-fs, api/storage-api) as the reference shape when adding a new one.

Guide ​

  1. Local setup — clone, install, build.
  2. Inner loop — test, lint, typecheck, dev, and where to add code.
  3. Landing a PR — branch naming, changesets, commit convention, CI checks.
  4. House style — the conventions a reviewer will hold you to.

Other pages in this section:

  • Starter templates — status of the starter-* reference apps and the core building blocks they demonstrated.

Design decisions (ADRs, incident write-ups) are recorded internally, not on this public site.

The full contribution workflow also lives in CONTRIBUTING.md at the repo root.

Released under the MIT License.