Development

Run the Doska monorepo locally: requirements, commands, repository layout, and the self-host smoke tests.

Doska is a pnpm + Turborepo monorepo. Requires Node 22+ and pnpm 11+ (see .nvmrc / the root package.json engines).

pnpm install
pnpm dev        # web client + server, in watch mode
pnpm desktop    # native desktop shell (Tauri)
pnpm mobile     # Expo dev server

The client dev server proxies the sync API to the local server, so sync works end to end with no extra setup.

Commands

CommandWhat it does
pnpm buildBuild all web/server packages.
pnpm lintLint all packages.
pnpm type-checkType-check all packages.
pnpm testUnit tests.
pnpm e2ePlaywright end-to-end tests.
pnpm formatPrettier-format the repo.

Layout

PathWhat's in it
apps/clientThe web client, the board UI itself.
apps/serverSync API, auth, file endpoints, and the MCP endpoint.
apps/desktopTauri shell around the same client.
apps/mobileExpo app.
apps/landingThis site.

The shared code lives in packages/. The shape worth knowing:

  • core, the domain and data layers, platform agnostic.
  • ports, the interfaces between shared code and a platform.
  • markdown, parses a card body to mdast and walks it with a per-platform adapter, platform agnostic.
  • highlight, the editor's syntax highlighting, platform agnostic.
  • sync, the sync engine, platform agnostic.
  • ui-kit / ui-kit-mobile, components, per platform.
  • mcp, the board as MCP tools, transport-agnostic.

Self-host smoke tests

The scripts that CI runs against a real Docker stack:

pnpm test:install          # installer
pnpm test:selfhost         # bring the stack up and check it
pnpm test:selfhost:data    # data survives a restart
pnpm test:selfhost:upgrade # upgrade over an existing database
pnpm test:selfhost:restore # backup and restore
pnpm selfhost:down         # tear it all down, volumes included

Contributing

Issues and pull requests: github.com/romenkova/doska. Security reports go through SECURITY.md.