DaSCH Applications and Libraries Monorepo

April 22, 2026 · View on GitHub

Github Docker CI codecov

DSP-APP is the user interface for the DaSCH Service Platform — a software framework for storing, sharing, and working with primary resources and data in the humanities. It connects to DSP-API via DSP-JS and is released under the GNU Affero General Public License.

This monorepo is built on:

Quick Start

Use the NodeJs version supported by the installed Angular version (compatibility table), or the version pinned in .nvmrc.

npm install
npm run start-local   # app runs at http://localhost:4200

Requires a running DSP-API backend. To start it locally:

# In the dsp-api repository
make init-db-test
make stack-without-app

Every PR that touches apps/dsp-app/src/ or libs/ gets an automatic live preview deployed to Google Cloud Run — the URL is posted as a PR comment. You can also trigger a preview for any branch manually via the PR Preview workflow. To publish a Docker image directly from any branch (e.g. for a hotfix), trigger the Publish from branch workflow manually.

Quick Commands

Most common operations for daily development:

TaskCommand
Start local developmentnpm run start-local
Start with observabilitynpm run start-local-with-observability
Run testsnpm run test-local
Run all tests (CI mode)npm run test-ci-all
Lint all libs w/o auto-fixnpm run lint-all
Lint all libs with auto-fixnpm run lint-fix-all
Open E2E tests UInpm run e2e-local
Run E2E tests (headless)npm run e2e-ci
Build for developmentnpm run build
Build for productionnpm run build-prod
Generate test coveragenpm run unit-test-coverage
Browse all component storiesnpm run storybook
Build static Storybooknpm run build-storybook
Run Storybook interaction testsnpm run test-storybook

For all available commands, see package.json.

Developer Guide

Working with Individual Libraries

The monorepo contains multiple independently buildable libraries:

# Test, build, or lint a specific library
nx run [library-name]:test
nx run [library-name]:build
nx run [library-name]:lint

# Example
nx run vre-ui-date-picker:test

Note: To run nx commands, install it globally (npm install -g nx) or use npx nx.

Library path aliases are defined in tsconfig.base.json under paths. Main VRE libraries use the @dasch-swiss/vre/* namespace.

OpenAPI Client Generation

The TypeScript client for DSP-API is auto-generated from the OpenAPI spec:

npm run check-openapi-sync      # Check if the generated client is up to date
npm run update-openapi           # Update spec and regenerate client
npm run generate-openapi-module # Regenerate from the local spec only

The client is also regenerated automatically as part of npm install (via postinstall), so it stays in sync after dependency updates.

See OpenAPI Client README for full details.

IDE Plugins

Local Observability

Run a Grafana stack alongside the app to view Faro telemetry (logs, traces, Web Vitals):

npm run start-local-with-observability

Grafana is available at http://localhost:3001 (credentials: admin/admin). Includes Loki (logs), Tempo (traces), and Mimir (metrics).

To stop: docker compose -f docker-compose.observability.yml down

Storybook

A single global Storybook instance aggregates stories from all libraries and apps:

npm run storybook           # Start dev server (http://localhost:4400)
npm run build-storybook     # Build a static bundle to dist/storybook/
npm run test-storybook      # Run story interaction tests (requires a running server)

Stories are auto-discovered from any *.stories.ts file under libs/ or apps/ — no registration needed when adding new stories.

Issues & Contributions

To report an issue or contribute, contact us at support@dasch.swiss.