Local development environment CLI for J26 microservices.
Sets up a full local dev environment by generating a Caddy reverse proxy and a Docker Compose stack that mirrors the production routing on https://local.j26.se.
- Node.js ≥ 24 — the CLI runs TypeScript directly using Node's built-in type stripping (no compilation step)
- Docker with the Compose plugin
npm install -g @scouterna/j26-cli| Command | Description |
|---|---|
j26 up |
Generate config files and start the stack (streams logs) |
j26 up -d |
Same but runs in the background (detached) |
j26 down |
Stop and remove the stack |
j26 config |
Interactively configure how each service runs |
j26 status |
Show current mode for all services |
j26 trust-ca |
Install the local Caddy CA so browsers trust the HTTPS certificate |
# First time
j26 up # initialises .j26.local.yaml with defaults and starts the stack
# Change which services run locally
j26 config # pick modes, add/remove local-only services
j26 up # apply changes
# Daily use
j26 up # pull latest images and restart
j26 down # shut everything down| Mode | Description |
|---|---|
cloud |
Proxy requests to the live cloud URL (default) |
docker |
Run the service's Docker image locally |
local |
Forward to a dev server running on your machine (e.g. npm run dev) |
skip |
Exclude the service entirely — no route is generated |
Each project that uses @scouterna/j26-cli ships a services.yaml manifest describing its microservices. Place it at the root of the repository and run commands with --config path/to/services.yaml if it's not in the current directory.
services:
- name: auth
path: /auth
cloudUrl: https://app.example.com/auth
dockerImage: ghcr.io/your-org/your-auth:latest
port: 80
- name: app
path: /
cloudUrl: https://app.example.com/
dockerImage: ghcr.io/your-org/your-app:latest
port: 3000
rewritePath: false| Field | Required | Description |
|---|---|---|
name |
✅ | Identifier, used as the Docker Compose service name |
path |
✅ | URL path prefix on https://local.j26.se (must start with /) |
cloudUrl |
✅ | Full HTTPS URL of the cloud-hosted service |
dockerImage |
✅ | Docker image to run in docker mode |
port |
✅ | Port the service listens on inside its container |
rewritePath |
Strip path prefix before forwarding (default: true) |
|
env |
Base env vars passed to the container in docker mode |
Personal configuration is stored in .j26.local.yaml at the project root. This file is gitignored — each developer maintains their own copy.
services:
auth:
mode: local
hostPort: 3001
app:
mode: cloud
# Services defined only on your machine (not in services.yaml)
localServices:
my-feature:
path: /my-feature
port: 5173