Aethera development is Docker-only. Do not run backend Python or frontend Node commands directly on the host.
./aethera.sh devDevelopment Compose starts:
backend: FastAPI API, workers, and schedulerfrontend: Vite dev server or built preview serversqlite-web: read-only SQLite inspection
Default URLs:
- Frontend: http://localhost:8173
- Backend API: http://localhost:8001
- SQLite Web: http://localhost:8081
The repository tracks docker-compose.dev.yml as the portable development baseline. Keep machine-specific ports, paths, or reverse-proxy wiring in docker-compose.dev.override.yml; that override file is ignored by Git and is loaded automatically when present.
Generate .env from .env.dev.example when PUID/PGID should match the runtime data directories:
./scripts/generate_env.sh.env is local-only and ignored by Git. .env.dev.example includes development-only ports and runtime controls.
Use AETHERA_DEV_HOT_RELOAD=1 for the normal hot-reload loop. Use AETHERA_DEV_HOT_RELOAD=0 to keep the same mounted source and config/ data while running backend with AETHERA_DEV_UVICORN_WORKERS workers and frontend from a built preview bundle.
The frontend dev container uses the host UID/GID exported by scripts/docker_compose.sh, while PUID/PGID control runtime data ownership.
config/ is persistent local data. Do not use it for tests or generated fixtures.
Repository checks use temporary AETHERA_CONFIG_ROOT directories so they cannot modify a real local deployment.
Run the full review gate:
./scripts/review_with_gates.shRun backend tests:
./aethera.sh test-backend