Skip to main content

Scripts

Run everything from the repo root. Root scripts fan out to the workspaces with pnpm --filter, so you rarely need to cd into a package. Workspace layout is in Project structure.

pnpm install # install all workspace dependencies

Build

Builds run in dependency order — the library first, since every other artifact consumes it.

ScriptDoes
pnpm buildLibrary, then server and webapp concurrently
pnpm build:libLibrary only (@tumaet/apollon)
pnpm build:serverStandalone server only
pnpm build:webappStandalone webapp only
pnpm build:vscodeVS Code extension plus its webviews
pnpm build:docsLibrary, then the Docusaurus site (static HTML)

Dev

Hot-reload watchers for local development.

ScriptDoes
pnpm devLibrary build watch + server + webapp + local Redis, all concurrent
pnpm dev:libLibrary build watch only
pnpm dev:serverEnsures local Redis, then runs the server under tsx watch
pnpm dev:webappWebapp on Vite HMR
pnpm dev:vscodeVS Code extension build watch
pnpm dev:docsLibrary build, then the Docusaurus dev server

pnpm dev resolves port collisions for the webapp, server, WebSocket relay, and Redis, and starts the Redis container only when no compatible local instance is reachable. Override ports with APOLLON_WEBAPP_PORT, APOLLON_SERVER_PORT, APOLLON_WS_PORT, or APOLLON_REDIS_PORT.

Start

Run a production build locally — assumes pnpm build already ran.

ScriptDoes
pnpm startBuilt server and webapp concurrently
pnpm start:serverBuilt server only
pnpm start:webappBuilt webapp only
pnpm start:webapp:hostWebapp bound to 0.0.0.0 (LAN / device testing)
pnpm start:localdbLocal Redis container via docker/compose.local.db.yml

Lint and format

ScriptDoes
pnpm lintESLint across library, server, webapp, vscode, and docs
pnpm lint:fixESLint with --fix across library, server, webapp, vscode
pnpm formatPrettier write across all supported file types
pnpm format:checkPrettier check only — no writes (used in CI)

Per-workspace variants (lint:lib, lint:server, lint:webapp, lint:vscode, lint:docs, and their lint:fix:* counterparts) exist for narrower runs. lint:docs runs markdownlint-cli2 over the docs Markdown and tsc --noEmit on the Docusaurus config + theme.

Test

ScriptDoes
pnpm testLibrary Vitest unit suite
pnpm test:e2eWebapp Playwright end-to-end tests

The webapp and server have their own Vitest suites that the root scripts do not aggregate. Run them per-workspace:

pnpm --filter @tumaet/webapp run test # webapp unit tests
pnpm --filter @tumaet/server run test # server unit tests

Playwright visual regression lives in the webapp workspace — see Visual tests.

Docs

ScriptDoes
pnpm dev:docsLibrary build, then the Docusaurus dev server
pnpm build:docsLibrary build, then the static Docusaurus site

The docs site is published at https://ls1intum.github.io/Apollon/. The Docusaurus build uses onBrokenLinks: "throw", so a bad internal link fails build:docs.

Capacitor

Mobile shell scaffolding for the webapp. Run these once per platform; see Mobile builds for the full flow.

ScriptDoes
pnpm capacitor:add:androidAdd the Android platform
pnpm capacitor:add:iosAdd the iOS platform
pnpm capacitor:syncSync web assets into native shells
pnpm capacitor:open:androidOpen Android Studio
pnpm capacitor:open:iosOpen Xcode
pnpm capacitor:assets:generate:androidGenerate Android icons / splash
pnpm capacitor:assets:generate:iosGenerate iOS icons / splash

Release and packaging

Releases run on GitHub Actions — there are no local publish scripts. Cut a release by dispatching the Version Bump workflow and merging the PR it opens; see npm publishing. pnpm package:vscode builds a local .vsix for the VS Code extension.

Before opening a PR

The pull-request checklist (lint, format check, build, test) lives in the Contributor overview.