Olympus Docs
Develop

Workspace setup

Clone the eight Olympus repos and run the dev stack from source

To work with Olympus source, patch a bug, add a feature, run a forked version, you need a workspace with the eight repos cloned side-by-side. This page sets that up.

Prerequisites

  • Git with SSH or HTTPS access to github.com/OlympusOSS/*.
  • Node.js 20+ with npm.
  • Bun, curl -fsSL https://bun.sh/install | bash.
  • Podman + podman-compose (or Docker + Docker Compose, podman-compose is recommended).
  • macOS: Homebrew; octl deploy will install missing tooling for you.
  • Linux: install Podman via your package manager.

Clone the eight repos

The dev compose.dev.yml uses relative volume mounts (../athena, ../hera, ../site) for live reload, so the repos must be siblings of one parent directory:

mkdir Olympus && cd Olympus
for repo in platform athena hera site canvas sdk octl daedalus; do
  git clone git@github.com:OlympusOSS/$repo.git
done

Your layout:

Olympus/
├── platform/
├── athena/
├── hera/
├── site/
├── canvas/
├── sdk/
├── octl/
└── daedalus/

This sibling layout is required, not advisory. If you have a different layout, the volume mounts in compose.dev.yml won't find the source.

Install dependencies in each app repo

for repo in athena hera site canvas sdk octl; do
  cd Olympus/$repo
  bun install
  cd ..
done

canvas and sdk ship as source-only npm packages. The dev install resolves them via bun's standard package resolution, when Athena's package.json declares @olympusoss/canvas, Bun reads it from the canvas/ sibling directory only when you use a workspace setup. The current Olympus setup is not a Bun monorepo workspace; each app reaches Canvas via the published npm package.

For local dev where you want to edit Canvas and see changes in Athena instantly, link manually:

cd Olympus/canvas && bun link
cd ../athena && bun link @olympusoss/canvas

Repeat for the SDK if you're editing it.

Start the stack

Easiest:

npx @olympusoss/octl deploy

Or manually:

cd Olympus/platform/dev
podman compose up -d

See Get Started, Quickstart with podman compose for what each command does and where to look when it fails.

Run a single app outside Compose

For faster iteration on, say, Athena:

cd Olympus/athena
DATABASE_URL=postgres://athena:athena@localhost:5432/olympus \
ENCRYPTION_KEY=$(cat ../platform/dev/.env.dev | grep ENCRYPTION_KEY | cut -d= -f2) \
SESSION_SIGNING_KEY=$(cat ../platform/dev/.env.dev | grep SESSION_SIGNING_KEY | cut -d= -f2) \
KRATOS_URL=http://localhost:4101 \
HYDRA_URL=http://localhost:4103 \
bun run dev

You'll need to bring up Postgres separately or have the Compose stack running for the DB. The other Olympus services should be running so Athena can talk to them.

Editor setup

  • VS Code: open the parent Olympus/ directory as a multi-root workspace. Add a .code-workspace file listing each repo as a folder. TypeScript should "Just Work", each repo has its own tsconfig.json.
  • JetBrains: same; open the parent directory as a project, mark each repo as a content root.

Per-repo scripts

Most repos share:

bun run dev          # start dev server
bun run typecheck    # tsc --noEmit
bun run lint         # biome check (athena, hera, site)
bun run test         # vitest run
bun run build        # production build

Refer to each repo's package.json for variations.

Inspecting your running deployment

Once you have local source, you can also exec into containers to compare your source against what's actually running:

podman exec olympus-athena-1 cat /app/src/middleware.ts | diff - athena/src/middleware.ts

See Develop, Inspecting your containers for the full inspection workflow.

Common setup pitfalls

  • Sibling layout missed. If you cloned the repos to ~/projects/<each>/ rather than ~/projects/Olympus/<each>/, the volume mounts fail. Move them into a common parent.
  • bun install skipped in one repo. Compose builds the dev image fresh from the volume mount, but if your app expects a built node_modules from the host, install before starting the stack.
  • Podman machine not started (macOS). podman machine init && podman machine start first.

Where next

On this page