Skip to main content

Umbraculum repository structure — where things live, why there, how they fit

Tier: Public
Status: v0.3 — updated 2026-06-08 (RFC-0012: platform/ + sdk/ + canonical/ + verticals/ package tiers)
Audience: new contributors, evaluators preparing to adopt Umbraculum as an operational dependency, prospective module developers, future maintainers running an orientation pass.
Owners: maintainers
Related: GLOSSARY.md, NAVIGATE-MONOREPO.md, MODULES.md, PLATFORM-ARCHITECTURE.md, rfcs/0002-canonical-module-physical-layout.md, rfcs/0011-application-surface-shell-layering.md, rfcs/0012-package-tier-clarity.md, design/pre-flip-application-surface-backbone.md, packages/sdk/module-sdk/README.md.

[!NOTE] Part of Umbraculum — an open-source toolset for building workspace-shaped operational applications. This doc is the spatial map of the monorepo: an inventory of every workspace + which layer it sits in + what depends on it.


1. Why this doc exists

The Umbraculum monorepo is structurally simple — three workspace trees (apps/, services/, packages/), one docs/ tree, one internal/ tree, plus packaging/ and scripts/CI plumbing. This page is the single artifact that answers "where does X live?" directly.

It complements:


2. The five-layer mental model

Every workspace belongs to exactly one layer. Modules consume lower layers, never peer verticals.

#LayerOn-disk patternExamplesPurpose
1Applicationsapps/*apps/web, apps/native, apps/web/e2eDeployable end-user surfaces. Apps consume layers 2–5, never each other.
2Servicesservices/*services/apiLong-running backends (Fastify + Prisma + Postgres + Redis).
3Platformpackages/platform/*@umbraculum/ui, @umbraculum/navigation, @umbraculum/i18n, @umbraculum/api-client, @umbraculum/media, @umbraculum/rendering, @umbraculum/contractsCross-cutting, industry-agnostic packages (Magento framework class).
4SDKpackages/sdk/*@umbraculum/module-sdk, @umbraculum/ai-tool-sdk, @umbraculum/i18n-keysPlug-in registration spine (MIT). Not a domain module.
5Canonical modulespackages/canonical/<code>/*@umbraculum/pim-contracts, @umbraculum/mrp-contracts, …Reserved-domain packages (contracts slice today; room for ui/ later).
6Vertical packagespackages/verticals/<code>/*@umbraculum/brewery-core, @umbraculum/brewery-recipes-ui, …Reference vertical + pattern for ISV products.

Two rules:

  1. No cross-app imports. Apps share code through layers 3–5.
  2. No vertical → vertical imports. Cross-vertical sharing belongs in layer 3 or platform contracts.

On-disk package tiers (RFC-0012):

packages/
platform/ # industry-agnostic horizontal libs + @umbraculum/contracts
sdk/ # module-sdk, ai-tool-sdk, i18n-keys
canonical/ # reserved-domain modules (pim/contracts, mrp/contracts, …)
verticals/brewery/ # reference vertical (core, beerjson, recipes-ui, contracts, …)

3. Workspace inventory

3.1 Applications (apps/*)

Pathnpm nameWhat it isNotable consumes
apps/web/@umbraculum/webNext.js + React + Tamagui — the member-facing web application (workspace web UI). Platform shared layout: app/_shared-layout/. Route groups: (auth)/, (platform-layout)/, (brewery)/, canonical `(pimmrp
apps/native/brewery/@umbraculum/native-breweryExpo + React Native + Tamagui — reference brewery brew-day app (RFC-0011 Wave 4). Umbrella: apps/native/README.md.Same horizontal + vertical packages as web where applicable
apps/web/e2e/(sub-workspace)Playwright E2E — folder taxonomy: platform/, canonical/, verticals/brewery/ (RFC-0011 Wave 5).Runs against live stack

Web app tree (spatial map):

apps/web/app/
_shared-layout/ # platform UI frame (nav, footer, providers)
[locale]/
layout.tsx
(auth)/ # login, signup, select-workspace
(platform-layout)/ # platform horizontal pages (ai, accessibility, …)
(brewery)/ # reference vertical
(pim|mrp|crp|automation)/ # canonical modules
platform/ # cross-workspace admin

See apps/web/README.md and BUILDING-YOUR-VERTICAL.md for placement decisions.

3.2 Services (services/*)

Pathnpm nameWhat it isNotable consumes
services/api/@umbraculum/apiFastify + Prisma API — auth, workspace, billing, AI, brewery + canonical module slices. Brewery domain services colocated under src/modules/brewery/services/ (Wave 3e).@umbraculum/{module-sdk, contracts, brewery-contracts, automation-contracts, pim-contracts, mrp-contracts, crp-contracts, brewery-core, brewery-beerjson}

3.2.1 Distribution adapters (packaging/*)

Not npm workspaces — Click / store packaging only.

PathRole
packaging/ubuntu-touch/Ubuntu Touch Lomiri webapp Click packages
packaging/ubuntu-touch/umbraculum-reference/Reference operator webapp → apps/web over HTTPS

3.3 Horizontal infrastructure packages (packages/platform/*)

Industry-agnostic. Brewery content lives in @umbraculum/brewery-i18n and @umbraculum/brewery-media-assets (Wave 3c); platform packages provide framework + merge/loader only.

Pathnpm nameRole
packages/platform/ui/@umbraculum/uiCross-platform Tamagui primitives — design tokens, AI chat panel, industry-agnostic components. Brewery widgets (BrewCheckbox, HydrometerChart) moved to @umbraculum/brewery-recipes-ui (Wave 3c).
packages/platform/navigation/@umbraculum/navigationCross-platform routing-policy framework.
packages/platform/i18n/@umbraculum/i18nPlatform + canonical locale bundles; merges @umbraculum/brewery-i18n in getSharedMessages() for reference profile.
packages/platform/i18n-react/@umbraculum/i18n-reactReact + next-intl bindings (useTranslator).
packages/platform/native-shell/@umbraculum/native-shellShared Expo bootstrap — auth, locale, theme tokens, platform RN/Tamagui primitives (RFC-0011 Wave 4B).
packages/platform/api-client/@umbraculum/api-clientTyped fetch + auth (cookie web, bearer native). Platform facades only — brewery HTTP facades live in @umbraculum/brewery-api-client.
packages/platform/media/@umbraculum/mediaMedia loader framework + empty platform manifest.
packages/platform/rendering/@umbraculum/renderingDocument rendering pipeline (RFC-0007).
packages/platform/test-mcp/@umbraculum/test-mcpHTTP testing tools for Cursor MCP.

3.4 Contracts packages (layer 4)

Pathnpm nameModuleRole
packages/platform/contracts/@umbraculum/contractsPlatform-wideAuth, workspaces, billing, ads, AI, rendering — no brewery/water/gravity (Wave 3b).
packages/verticals/brewery/contracts/@umbraculum/brewery-contractsbrewery verticalRecipe, brew-session, water, gravity wire types.
packages/canonical/automation/contracts/@umbraculum/automation-contractsautomationModbus mailbox, adapter SDK types.
packages/canonical/pim/contracts/@umbraculum/pim-contractspimPIM DTOs and schemas.
packages/canonical/mrp/contracts/@umbraculum/mrp-contractsmrpMRP read-only alpha contracts.
packages/canonical/crp/contracts/@umbraculum/crp-contractscrpCRP read-only alpha contracts.

3.5 Module SDK (layer 5)

Pathnpm nameRole
packages/sdk/module-sdk/@umbraculum/module-sdkMIT registration contract — registerModule, registerWebModule, ValidatedSchema<T>.
packages/sdk/ai-tool-sdk/@umbraculum/ai-tool-sdkMIT AI-tool interface types.
packages/sdk/i18n-keys/@umbraculum/i18n-keysMIT nav/message key conventions — zero locale JSON.

3.6 Vertical-flavored packages (packages/verticals/brewery/*)

Pathnpm nameRole
packages/verticals/brewery/api-client/@umbraculum/brewery-api-clientBrewery HTTP facades (recipes, water, brew sessions, …).
packages/verticals/brewery/core/@umbraculum/brewery-coreBrewing math (gravity, water chemistry).
packages/verticals/brewery/beerjson/@umbraculum/brewery-beerjsonBeerJSON adaptation layer.
packages/verticals/brewery/recipes-ui/@umbraculum/brewery-recipes-uiBrewery domain UI (editors, charts, BrewCheckbox).
packages/verticals/brewery/i18n/@umbraculum/brewery-i18nBrewery-only locale namespaces (recipes, equipment, …).
packages/verticals/brewery/media-assets/@umbraculum/brewery-media-assetsBrewery PNG assets + manifest.

4. How a single module materializes (the β layout)

Per RFC-0002 §3, every module is four coordinated slices:

SlicePathWhat it owns
APIservices/api/src/modules/<code>/Routes, services, AI tools, Prisma slice.
Webapps/web/app/[locale]/(<code>)/Next.js pages (route groups are URL-invisible).
Nativeapps/native/src/modules/<code>/RN screens (brewery reference today).
Contractspackages/canonical/<code>/contracts/ or packages/verticals/<code>/contracts/DTOs + Zod schemas.

Vertical contracts path: tier-6 verticals use packages/verticals/<code>/contracts/@umbraculum/<code>-contracts (brewery) or @umbraculum/brewery-contracts npm name.

Finding vertical module code on web

NeedGo to
Brewery recipesapps/web/app/[locale]/(brewery)/recipes/
PIM admin (β reference)apps/web/app/[locale]/(pim)/
Platform horizontal AIapps/web/app/[locale]/(platform-layout)/ai/
Platform admin recipesapps/web/app/[locale]/platform/recipes/not brewery
Recipe APIservices/api/src/modules/brewery/routes/

5. Dependency diagram

Repository structure dependency diagram


6. Trees that are not workspaces

PathRole
docs/Public reference set — indexed by docs/README.md.
internal/Pre-flip internal scaffolding — excluded from public flip.
scripts/Repo tooling including scripts/docs/check-readmes.py.
.github/CI workflows.

7. Where this doc fits + future docs publishing

Read this doc first for the spatial map, then MODULES.md for catalog vocabulary, then PLATFORM-ARCHITECTURE.md for architectural reasoning.

Docs site: docs-site/docs.umbraculum.dev.


8. Further reading