Configuration

Settings, where BitL keeps its files, keyboard shortcuts and shell integration.

bitl config

The same preferences as the app's Settings window, from the terminal.

bitl config                  # every key and its value (--json for scripts)bitl config get tldbitl config set editor cursorbitl config reset editor     # one key back to defaultbitl config reset            # everythingbitl config path             # where settings.json lives
KeyValuesDefault
tldletters and digits, e.g. test, localhosttest
php-defaultan installed version, e.g. 8.48.5
editorvscode phpstorm sublime cursor zedvscode
terminalterminal iterm warpterminal
browsersystemDefault safari chrome firefox arcsystemDefault
themeauto light darkauto
auto-starttrue false — launch BitL at loginfalse
Note. Changing tld affects sites you link afterwards. The resolver file for a new TLD needs root: echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/<tld>.

App settings

Open with ⌘ ,. General holds everything above plus a few app-only switches:

  • Start services on launch — bring up nginx, PHP-FPM and dnsmasq when BitL opens (on by default)
  • Stop services on quit
  • Auto-detect public folder — serve public/ when a project has one
  • Keep window on top
  • Watched Folders — the parked directories BitL monitors for new projects
  • Privileged Helper — its status, and an Install / Reinstall button if it needs repairing

The other tabs: Runtimes (PHP, Node, Python, Go, Flutter), Notifications, Certs (the local CA and every issued certificate), Keys (shortcuts) and About (version, updates).

Keyboard shortcuts

ShortcutWhereAction
⌘ ⇧ BanywhereShow or hide BitL (change it under Settings → Keys)
⌘ ⇧ EanywhereShow or hide the Debug Bar
⌘ Kin BitLQuick Switcher: jump to a site, switch PHP, start or stop a service
⌘ Rin BitLRefresh status
⌘ ,in BitLSettings
escin BitLClose the current panel
⌘ Qin BitLQuit

Shell completions

Tab-complete every command, subcommand and flag.

bitl completions install              # detects your shellbitl completions install --shell fishbitl completions generate zsh > _bitl  # or wire it up yourself

Where things live

Everything user-level is under ~/Library/Application Support/BitL/:

PathContents
config/settings.jsonPreferences (bitl config path)
config/sites.jsonLinked and parked sites
config/services.jsonInstalled service instances
config/groups.jsonSite groups
nginx/vhosts/One nginx server block per site
php/Per-version php.ini, php-fpm.conf and conf.d (xdebug.ini lands here)
ssl/ca/ · ssl/certs/Local certificate authority and site certificates
data/Service data directories — your databases
snapshots/Database snapshots
profiles/Saved profiler runs
php-versions/ node-versions/ …Installed runtimes
bin/Symlinks to the active php, node, python3, go, flutter, composer
log/nginx, PHP-FPM and service logs
plugins/Installed plugins

System-level pieces, written by the privileged helper:

PathContents
/usr/local/bin/bitlCLI symlink → /usr/local/bitl/bin/bitl
/etc/resolver/testSends *.test lookups to dnsmasq on 127.0.0.1
~/Library/LaunchAgents/com.bitl.service.*One launch agent per started service
/tmp/bitl/Sockets and PID files
Tip. Back up config/ and ssl/ to carry your setup to a new Mac; restore them before first launch.

Plugins (preview)

A plugin is a directory with a plugin.json that declares extra service types and the lifecycle hooks it wants.

bitl plugin create my-service         # scaffold ./my-service with plugin.json and READMEbitl plugin install ./my-service      # or a Git URLbitl plugin listbitl plugin remove com.bitl.my-service
Note. The plugin format is still settling: installing registers the manifest, but the app doesn't run plugin services or hooks yet. Expect changes before it's stable.

See also