Orchestration

Tier-based startup ordering ensures dependencies are ready before dependent services begin.

How It Works

Services are grouped into tiers. fuku starts all services in the first tier, waits for them to become ready (via readiness checks or process start), then moves to the next tier. Within each tier, services start concurrently up to the configured worker limit.

fuku run default
$ fuku run default

 preflight  cleaning up stale processes...
 preflight  done

 tier foundation
    auth        running  pid 76741  2.1s
    gateway     running  pid 76742  1.8s

 tier platform
    api         running  pid 76758  4.5s
    worker      running  pid 76759  2.8s

 tier edge
    web         starting

Configuration

Assign tiers to services in fuku.yaml. The tier order is determined by first occurrence in the file:

fuku.yaml
services:
  auth:
    dir: auth
    tier: foundation # Starts first

  gateway:
    dir: gateway
    tier: foundation # Same tier — starts with auth

  api:
    dir: backend/api
    tier: platform # Starts after foundation is ready

  web:
    dir: frontend
    tier: edge # Starts after platform is ready

Key Details

  • Tier order is defined by first appearance in the YAML file
  • Services within each tier are sorted alphabetically by name
  • Services without a tier go to a default tier that runs last
  • Tier names are case-insensitive and whitespace is trimmed
  • You can use any tier names — infrastructure, middleware, api, frontend, etc.

Profiles

Profiles let you group services for batch operations — run only what you need:

fuku.yaml
profiles:
  default: "*" # All services
  backend: [auth, api] # Just the backend stack
  full: [auth, api, web]
fuku
$ fuku run backend
 profile  backend  auth, api

 tier foundation
    auth        running

 tier platform
    api         running

Concurrency

Control how many services start in parallel within a tier:

fuku.yaml
concurrency:
  workers: 5 # Max concurrent service starts (default: 5)

Ready to try it out?

Get Started