# void-linux/runit architecture

> Architecture diagram of the GitHub repository void-linux/runit, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/void-linux/runit
- Repository: https://github.com/void-linux/runit

## Overview

runit is a Unix service supervision and logging suite. Its principal workflow is system startup into a service-directory supervisor, which launches and monitors service processes; operators issue control commands and inspect status, while optional logging processes rotate and retain service output. The tree also includes process-setup utilities, wait helpers, and supporting runtime libraries. Relationships among sampled supervisors and utilities are clear, but several dispatch details are not excerpted, so those links are shown as unverified rather than asserted.

Main entry points: [`src/runsv.c`](https://github.com/void-linux/runit/blob/master/src/runsv.c) (Service supervisor), [`src/svlogd.c`](https://github.com/void-linux/runit/blob/master/src/svlogd.c) (Log daemon), [`src/sv.c`](https://github.com/void-linux/runit/blob/master/src/sv.c) (Control client), [`src/runsvctrl.c`](https://github.com/void-linux/runit/blob/master/src/runsvctrl.c) (Control utility)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_supervision["Service supervision"]
  node_init["System init<br/>[runit-init.c]"]
  node_runit["Shutdown coordinator<br/>[runit.c]"]
  node_directory["Service directory<br/>[runsvdir.c]"]
  node_supervisor["Service supervisor<br/>[runsv.c]"]
end

subgraph group_operations["Operator tools"]
  node_control["Control client<br/>[sv.c]"]
  node_controlctl["Control utility<br/>[runsvctrl.c]"]
  node_status["Status utility<br/>[runsvstat.c]"]
  node_waitup["Wait for up<br/>[svwaitup.c]"]
  node_waitdown["Wait for down<br/>[svwaitdown.c]"]
  node_processsetup["Process setup<br/>[chpst.c]"]
  node_chdir["Service directory changer<br/>[runsvchdir.c]"]
  node_accounting["Login accounting<br/>[utmpset.c]"]
end

subgraph group_logging["Logging"]
  node_logdaemon["Log daemon<br/>[svlogd.c]"]
  node_logfiles[("Rotated log files")]
end

subgraph group_runtime["Runtime utilities"]
  node_primitives["C runtime primitives<br/>[buffer.h]"]
  node_time["Time primitives<br/>[taia.h]"]
end

node_service["Service process"]
node_admin(("Administrator"))
node_serviceconfig["Service scripts"]

node_init -->|"starts"| node_runit
node_directory -.->|"dispatches"| node_supervisor
node_supervisor -->|"executes"| node_service
node_supervisor -->|"loads scripts"| node_serviceconfig
node_admin -.->|"requests control"| node_control
node_control -.->|"writes commands"| node_supervisor
node_admin -.->|"invokes"| node_controlctl
node_controlctl -.->|"writes commands"| node_supervisor
node_admin -.->|"requests status"| node_status
node_status -->|"reads status"| node_supervisor
node_waitup -->|"checks status"| node_supervisor
node_waitdown -->|"checks status"| node_supervisor
node_supervisor -.->|"pipes output"| node_logdaemon
node_logdaemon -->|"writes and rotates"| node_logfiles
node_admin -.->|"invokes"| node_processsetup
node_admin -.->|"invokes"| node_chdir
node_admin -.->|"invokes"| node_accounting
node_supervisor -->|"uses timestamps"| node_time
node_logdaemon -->|"uses timestamps"| node_time
node_supervisor -->|"uses buffers"| node_primitives
node_logdaemon -->|"uses buffers"| node_primitives

click node_init "https://github.com/void-linux/runit/blob/master/src/runit-init.c"
click node_runit "https://github.com/void-linux/runit/blob/master/src/runit.c"
click node_directory "https://github.com/void-linux/runit/blob/master/src/runsvdir.c"
click node_supervisor "https://github.com/void-linux/runit/blob/master/src/runsv.c"
click node_control "https://github.com/void-linux/runit/blob/master/src/sv.c"
click node_controlctl "https://github.com/void-linux/runit/blob/master/src/runsvctrl.c"
click node_status "https://github.com/void-linux/runit/blob/master/src/runsvstat.c"
click node_waitup "https://github.com/void-linux/runit/blob/master/src/svwaitup.c"
click node_waitdown "https://github.com/void-linux/runit/blob/master/src/svwaitdown.c"
click node_logdaemon "https://github.com/void-linux/runit/blob/master/src/svlogd.c"
click node_processsetup "https://github.com/void-linux/runit/blob/master/src/chpst.c"
click node_chdir "https://github.com/void-linux/runit/blob/master/src/runsvchdir.c"
click node_accounting "https://github.com/void-linux/runit/blob/master/src/utmpset.c"
click node_primitives "https://github.com/void-linux/runit/blob/master/src/buffer.h"
click node_time "https://github.com/void-linux/runit/blob/master/src/taia.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_init,node_runit,node_directory,node_supervisor toneBlue
class node_control,node_controlctl,node_status,node_waitup,node_waitdown,node_processsetup,node_chdir,node_accounting toneAmber
class node_logdaemon,node_logfiles toneMint
class node_primitives,node_time toneRose
class node_service,node_admin,node_serviceconfig toneIndigo
```

## Components

### Service supervision

- [System init](https://github.com/void-linux/runit/blob/master/src/runit-init.c): `src/runit-init.c`
- [Shutdown coordinator](https://github.com/void-linux/runit/blob/master/src/runit.c): `src/runit.c`
- [Service directory](https://github.com/void-linux/runit/blob/master/src/runsvdir.c): `src/runsvdir.c`
- [Service supervisor](https://github.com/void-linux/runit/blob/master/src/runsv.c): `src/runsv.c`

### Operator tools

- [Control client](https://github.com/void-linux/runit/blob/master/src/sv.c): `src/sv.c`
- [Control utility](https://github.com/void-linux/runit/blob/master/src/runsvctrl.c): `src/runsvctrl.c`
- [Status utility](https://github.com/void-linux/runit/blob/master/src/runsvstat.c): `src/runsvstat.c`
- [Wait for up](https://github.com/void-linux/runit/blob/master/src/svwaitup.c): `src/svwaitup.c`
- [Wait for down](https://github.com/void-linux/runit/blob/master/src/svwaitdown.c): `src/svwaitdown.c`
- [Process setup](https://github.com/void-linux/runit/blob/master/src/chpst.c): `src/chpst.c`
- [Service directory changer](https://github.com/void-linux/runit/blob/master/src/runsvchdir.c): `src/runsvchdir.c`
- [Login accounting](https://github.com/void-linux/runit/blob/master/src/utmpset.c): `src/utmpset.c`

### Logging

- [Log daemon](https://github.com/void-linux/runit/blob/master/src/svlogd.c): `src/svlogd.c`
- **Rotated log files**

### Runtime utilities

- [C runtime primitives](https://github.com/void-linux/runit/blob/master/src/buffer.h): `src/buffer.h`
- [Time primitives](https://github.com/void-linux/runit/blob/master/src/taia.h): `src/taia.h`

### Other components

- **Service process**
- **Administrator**
- **Service scripts**

## Connections

- System init → Shutdown coordinator: starts (evidence: `src/runit-init.c`)
- Service directory → Service supervisor: dispatches
- Service supervisor → Service process: executes (evidence: `src/runsv.c`)
- Service supervisor → Service scripts: loads scripts (evidence: `src/runsv.c`)
- Administrator → Control client: requests control
- Control client → Service supervisor: writes commands
- Administrator → Control utility: invokes
- Control utility → Service supervisor: writes commands
- Administrator → Status utility: requests status
- Status utility → Service supervisor: reads status (evidence: `src/runsvstat.c`)
- Wait for up → Service supervisor: checks status (evidence: `src/svwaitup.c`)
- Wait for down → Service supervisor: checks status (evidence: `src/svwaitdown.c`)
- Service supervisor → Log daemon: pipes output
- Log daemon → Rotated log files: writes and rotates (evidence: `src/svlogd.c`)
- Administrator → Process setup: invokes
- Administrator → Service directory changer: invokes
- Administrator → Login accounting: invokes
- Service supervisor → Time primitives: uses timestamps (evidence: `src/runsv.c`)
- Log daemon → Time primitives: uses timestamps (evidence: `src/svlogd.c`)
- Service supervisor → C runtime primitives: uses buffers (evidence: `src/runsv.c`)
- Log daemon → C runtime primitives: uses buffers (evidence: `src/svlogd.c`)
