Daemon Overview¶
rninja's daemon architecture provides faster builds through persistent state and optimized resource usage.
What is the Daemon?¶
The rninja daemon (rninja-daemon) is a long-running background process that:
- Caches parsed manifests: Avoids re-parsing
build.ninjaon every invocation - Maintains state: Keeps file system caches warm
- Handles requests: Serves multiple
rninjainvocations - Manages resources: Coordinates parallel builds
Architecture¶
graph LR
subgraph "CLI Invocations"
A[rninja build1]
B[rninja build2]
C[rninja build3]
end
subgraph "Daemon Process"
D[rninja-daemon]
E[(Manifest Cache)]
F[(Build Cache)]
end
A -->|IPC| D
B -->|IPC| D
C -->|IPC| D
D --> E
D --> F
Benefits¶
Faster Startup¶
Without daemon:
With daemon:
Resource Efficiency¶
- Single daemon handles all builds
- Shared memory for manifest data
- Coordinated disk access
- Better CPU utilization
Consistent State¶
- File system cache stays warm
- Build graph always ready
- Faster dependency checking
How It Works¶
Auto-Spawn¶
When you run rninja, it:
- Checks if daemon is running
- If not, spawns daemon automatically
- Connects and sends build request
- Daemon executes build
- Results returned to CLI
# First invocation starts daemon
rninja
# Subsequent invocations connect to existing daemon
rninja
rninja
Socket Communication¶
Communication uses Unix domain sockets:
Session Management¶
Each build request creates a session:
- Isolated build state
- Separate output streams
- Independent failure handling
When Daemon Helps Most¶
- Repeated builds: Same project, many invocations
- Watch mode: Fast rebuilds on file changes
- IDE integration: Continuous compilation feedback
- CI with warm runners: Persistent build environment
When to Disable¶
Use --no-daemon when:
- Running in containers (ephemeral environment)
- Debugging build issues
- Single-shot CI jobs
- Resource-constrained systems
Quick Start¶
Default Usage (Recommended)¶
Just run rninja normally:
Check Daemon Status¶
Explicit Daemon Control¶
Next Steps¶
-
How automatic daemon spawning works
-
Working with multiple repositories
-
Managing the daemon process
-
Running without the daemon