Workspace Structure¶
EUDIPLO is a pnpm monorepo. Applications live in apps/, reusable packages
live in packages/, and operational resources are kept alongside the code they
support.
.
├── apps/
│ ├── backend/ # NestJS API server
│ ├── client/ # Angular management UI
│ ├── cli/ # Command-line client
│ ├── kms-reference/ # Reference KMS implementation
│ └── webhook/ # Webhook test application
├── packages/ # Reusable SDK packages
├── docs/ # MkDocs documentation
├── deployment/ # Docker Compose and Kubernetes resources
├── monitor/ # Prometheus and Grafana setup
├── scripts/ # Repository-wide generation and maintenance scripts
├── package.json # Root scripts and development dependencies
└── pnpm-workspace.yaml # Workspace package definitions
Applications¶
Backend (@eudiplo/backend)¶
The backend is the NestJS API server and protocol implementation. It owns OID4VCI and OID4VP flows, authentication, configuration, persistence, trust, and key management. See Backend Structure before adding or moving backend code.
The development server listens on port 3000 by default.
Client (@eudiplo/client)¶
The Angular management UI provides credential configuration, presentation management, monitoring, and administration. Its development server listens on port 4200 by default.
CLI (@eudiplo/cli)¶
The CLI provides scriptable access to management operations. Package-specific
instructions are in apps/cli/README.md.
Webhook (@eudiplo/webhook)¶
The webhook application is a test integration for presentation verification and webhook development.
KMS reference application¶
The KMS reference application demonstrates the external key-management contract used by EUDIPLO.
Packages and Supporting Directories¶
packages/contains reusable TypeScript SDK code.docs/contains hand-written and generated project documentation.deployment/contains local and production deployment examples.monitor/contains the observability stack used in development.scripts/contains schema, API, and documentation generation utilities.
Common Workspace Commands¶
Run commands from the repository root unless a guide says otherwise.
# Install dependencies
pnpm install
# Start workspace applications in development mode
pnpm run dev
# Build, lint, and test all packages
pnpm run build
pnpm run lint
pnpm run test
# Target one application
pnpm --filter @eudiplo/backend run dev
pnpm --filter @eudiplo/client run dev
Add an application-specific dependency through its workspace package instead of adding it to the repository root:
pnpm --filter @eudiplo/backend add dependency-name
pnpm --filter @eudiplo/client add dependency-name
Root dependencies should be limited to tooling used by multiple workspaces.