Self-hosted, Flutter-first mobile CI and internal app distribution platform.
Documentation · Live Demo · Hosted UI
Alpha — Oore CI is under active development. APIs, config formats, and CLI flags will change without notice. Use at your own risk.
Want a quick product tour before installing? Open the live demo: demo.oore.build
Oore CI lets you run your own mobile CI server. V1 targets Android, iOS, and macOS Flutter builds on a macOS host. It provides:
- A daemon (
oored) that orchestrates builds and serves the API - An operator CLI (
oore) for setup, admin, and runner management - A web UI for managing builds, apps, and team access
- OIDC authentication for non-loopback access — no local passwords (loopback-only local login supported for local-first onboarding)
| Dashboards | Builds |
|---|---|
![]() |
![]() |
Try the live demo first: demo.oore.build
- macOS (backend requirement for V1)
curl,tar, andshasum(for release installer)
For source development, also install Rust and Bun.
# Install latest stable release binaries (macOS)
curl -fsSL https://oore.build/install | bashPublic alpha onboarding guide (common first-time blockers + fastest paths):
- Public alpha onboarding guide
- Alpha feedback playbook (testers start here)
- Known alpha limitations (v0.1.x)
- Live demo (no install)
Install prerelease channels:
# Latest alpha
curl -fsSL https://oore.build/install | OORE_CHANNEL=alpha bash
# Latest beta
curl -fsSL https://oore.build/install | OORE_CHANNEL=beta bashUpdate in-place:
oore update --check
oore updateThen complete setup using one of these paths:
- Hosted UI: open ci.oore.build and add an HTTPS-reachable backend URL
- Local-only backend:
- run
oore setupfrom CLI, or - run bundled local frontend
oore-web --backend-url http://127.0.0.1:8787, or - expose backend through a tunnel and continue in hosted UI
- run
Detailed setup docs: docs.oore.build
bun install
make clean-dev-state # Wipe isolated dev data (~/.oore/dev.noindex)
make run-daemon # Start oored with isolated dev data
make run-cli # Generate setup token against dev DB
make dev-fresh-setup # Clean dev state, local build, start daemon, start tunnel, generate setup token
make dev-web # Local web UI (http://localhost:3000)
make clean-dev-state # Remove isolated dev daemon data (~/.oore/dev.noindex)Notes:
make dev-fresh-setupstarts a Cloudflare quick tunnel by default and prints the assigned public URL.- Disable the tunnel with
OORE_DEV_ENABLE_TUNNEL=0 make dev-fresh-setup. make dev-fresh-setupruns token-only setup by default for hosted UI E2E.- Use
OORE_DEV_SETUP_MODE=cli make dev-fresh-setuponly when you explicitly want CLI-driven OIDC setup. - Dev state uses a
.noindexdirectory and writes.metadata_never_indexto reduce Spotlight indexing load on macOS. make clean-dev-statealso stops the matching dev daemon and Cloudflare tunnel for the configured dev URL/port before deleting state.make run-daemon*targets use an isolated dev data root (~/.oore/dev.noindex) so local source runs do not collide with production daemon data.
apps/web/ React 19 + TanStack Router (product UI)
apps/docs-site/ VitePress documentation site
apps/site/ Neutral landing/install site (`oore.build`)
crates/oored/ Daemon — Axum HTTP server
crates/oore/ Operator CLI — Clap
crates/oore-runner/ Build runner agent
crates/oore-contract/ Shared data types (Serde structs)
docs/ Internal docs pointers + change ledger (canonical docs live in Linear)
All commands are available as make targets:
make dev-web # Web UI dev server (port 3000)
make dev-docs # Docs dev server (VitePress)
make dev-site # Landing site dev server (port 3002)
make build # Build everything (web + docs + site + cargo check)
make check # Lint web + cargo check
make test-web # Run web tests (Vitest)
make test-rust # Run Rust tests
make cargo-check # Type-check Rust workspace
make run-daemon # Start oored on 127.0.0.1:8787
make run-cli # Open a setup window (15 min TTL)
make clean-dev-state # Remove isolated dev daemon data directory
make dev-fresh-setup # Fresh local build + tunnel + token-first UI setup simulation
make doctor # Check system prerequisitesReleases are published via GitHub Actions.
High-level flow:
- PR/push validation -> CI runs frontend/docs (Linux) and Rust (macOS) checks in parallel
- Merge to
alpha-> CI cutsvX.Y.Z-alpha.Ntags (prerelease) - Merge to
beta-> CI cutsvX.Y.Z-beta.Ntags (prerelease) - Merge to
stable-> CI cutsvX.Y.Ztags (stable), auto-incrementing patch when needed - Tag push -> CI builds macOS artifacts (arm64 + x86_64), deploys Pages targets (
oore,oore-docs,oore-ci,oore-demo) with strict branch+commit verification, and publishes a GitHub Release with attached artifacts
Major/minor bumps are done by updating Cargo.toml workspace.package.version (for example 0.2.0), then continuing the alpha -> beta -> stable promotion flow.
- Guidelines: See CONTRIBUTING.md for how to submit PRs, code style, and testing.
- Code of Conduct: Review CODE_OF_CONDUCT.md for community expectations.
- Support & Reporting: Use SUPPORT.md for troubleshooting, bug reports, and feature requests.
- Known Alpha Limitations: Refer to the Known Alpha Limitations page for current constraints.

