Skip to content

Configuration

Dev Cockpit reads ~/.devcockpit/config.yaml at startup. The file is optional: every setting has a default, and anything you leave out keeps it.

If ~/.devcockpit is not writable, for example under a sandboxed shell, Dev Cockpit falls back to a temporary location and carries on rather than failing.

A minimal file

You only need the keys you want to change.

yaml
theme: dark
update_interval: 1000

ui:
  mouse_enabled: true

modules:
  dashboard:
    graph_height: 10

General

yaml
theme: dark
update_interval: 1000
enable_telemetry: false
log_level: info
KeyTypeDefaultNotes
themestringdarkOverall theme
update_intervalint1000Metric refresh in milliseconds
enable_telemetryboolfalseOff by default and stays off unless you turn it on
log_levelstringinfodebug, info, warn or error

update_interval is the one to lower if you want a livelier dashboard, and to raise if Dev Cockpit is using more CPU than you would like. See Troubleshooting.

UI

yaml
ui:
  color_scheme: cyberpunk
  animation_speed: 60
  show_fps: false
  mouse_enabled: true
KeyTypeDefaultNotes
color_schemestringcyberpunkPalette used across modules
animation_speedint60Target frames per second
show_fpsboolfalseShow a frame counter, useful when debugging rendering
mouse_enabledbooltrueMouse reporting inside the TUI

Turn mouse_enabled off if you would rather your terminal handle selection and copying itself.

Modules

Dashboard

yaml
modules:
  dashboard:
    refresh_rate: 1
    show_cpu_details: true
    show_mem_details: true
    show_disk_details: true
    graph_height: 10
KeyTypeDefaultNotes
refresh_rateint1Dashboard refresh in seconds
show_cpu_detailsbooltrueExpanded CPU panel
show_mem_detailsbooltrueExpanded memory panel
show_disk_detailsbooltrueExpanded disk panel
graph_heightint10Height of history graphs, in rows

Note the unit difference: refresh_rate here is in seconds, while the top-level update_interval is in milliseconds.

Docker

yaml
modules:
  docker:
    socket_path: /var/run/docker.sock
    show_all_containers: false
    auto_refresh: true
KeyTypeDefaultNotes
socket_pathstring/var/run/docker.sockPoint this at OrbStack or a rootless socket if yours differs
show_all_containersboolfalseInclude stopped containers
auto_refreshbooltruePoll for changes

If Docker is not detected, the socket path is the first thing to check. See Troubleshooting.

Network

yaml
modules:
  network:
    packet_capture: false
    port_scan_timeout: 2
KeyTypeDefaultNotes
default_interfacestringdetectedDetected per platform at startup
packet_captureboolfalseOff by default; capture needs elevated rights
port_scan_timeoutint2Seconds before a port probe gives up

Security

yaml
modules:
  security:
    scan_interval: 300
    check_firewall: true
    check_filevault: true
    check_sip: true
KeyTypeDefaultNotes
scan_intervalint300Seconds between re-checks
check_firewallbooltrueFirewall status
check_filevaultbooltrueFileVault, macOS
check_sipbooltrueSystem Integrity Protection, macOS

These control whether a check runs, not what it reports. Dev Cockpit never changes a security setting.

Logs

yaml
modules:
  logs:
    max_lines: 500
    custom_log_paths:
      - /var/log/nginx/error.log
      - ~/projects/api/logs/app.log
KeyTypeDefaultNotes
max_linesint500Lines held per source
custom_log_pathslistemptyExtra files to aggregate

custom_log_paths is how you bring your own application logs alongside the system ones.

System

yaml
system:
  command_timeout: 30
  max_retries: 3
  sudo_command: sudo
KeyTypeDefaultNotes
command_timeoutint30Seconds before an external command is killed
max_retriesint3Retries for a failed command
sudo_commandstringsudoChange to doas or similar if you use one

Raise command_timeout if a slow disk makes cleanup scans time out. See Troubleshooting.

Storage

yaml
storage:
  max_history_days: 30
  compress_old_data: true
KeyTypeDefaultNotes
data_dirstring~/.devcockpit/dataMetrics database location
max_history_daysint30History older than this is pruned at startup
compress_old_databooltrueCompress history as it ages

Metrics history is stored locally in SQLite and never leaves your machine.

Full reference

Everything in one file, at its default:

yaml
theme: dark
update_interval: 1000
enable_telemetry: false
log_level: info

ui:
  color_scheme: cyberpunk
  animation_speed: 60
  show_fps: false
  mouse_enabled: true

modules:
  dashboard:
    refresh_rate: 1
    show_cpu_details: true
    show_mem_details: true
    show_disk_details: true
    graph_height: 10
  docker:
    socket_path: /var/run/docker.sock
    show_all_containers: false
    auto_refresh: true
  network:
    packet_capture: false
    port_scan_timeout: 2
  security:
    scan_interval: 300
    check_firewall: true
    check_filevault: true
    check_sip: true
  logs:
    max_lines: 500
    custom_log_paths: []

system:
  command_timeout: 30
  max_retries: 3
  sudo_command: sudo

storage:
  max_history_days: 30
  compress_old_data: true

See also

Released under GPL 3.0.