Install the app
- Open the downloaded
.dmgand drag BitL into Applications. - Launch BitL. It lives in the menu bar (look for the B icon) — there is no Dock icon by default.
- BitL is signed with an Apple Developer ID and notarized by Apple, so it opens normally — no right-click or Open Anyway step needed.
First launch
The welcome screen installs three things, then asks for your administrator password once:
- nginx web server
- dnsmasq plus
/etc/resolver/test, so every*.testname resolves to127.0.0.1 - a default PHP runtime (8.5)
It also registers BitLHelper, a small privileged helper. After this one approval BitL can start services, write resolver files and update the CLI without prompting again. When you see “You're all set!”, the core stack is running and .test domains are live.
bitl config set auto-start true.The bitl CLI
The helper installs the CLI to /usr/local/bitl/bin/bitl and symlinks it to /usr/local/bin/bitl, which is already on the default macOS PATH. Check it:
bitl --versionbitl doctorbitl doctor checks PHP, nginx, dnsmasq, the .test resolver, ports, BitL's directories, installed services and the local CA, and prints a fix for anything that fails. Want tab completion?
bitl completions install # detects zsh, bash or fishTo use BitL's PHP, Composer and other binaries directly in your shell (for example php artisan without the bitl prefix), put BitL's bin directory on your PATH:
bitl php path --check # is it already set up?bitl php path --install # append it to ~/.zshrcsource ~/.zshrcQuick start
- 1
Link a project
From the project directory — or click + in the Sites list:
cd ~/Sites/my-laravel-appbitl linkThe site is now at
http://my-laravel-app.test. BitL detects Laravel, Symfony, Statamic, WordPress and static sites and serves the right document root automatically. - 2
Turn on HTTPS
bitl secureBitL issues a certificate from its own local CA. The first time, it may print a one-line
sudo security add-trusted-cert …command — run it once so browsers trust every BitL certificate from then on. - 3
Add a database
bitl services install mysqlbitl services start mysqlbitl env-sync # writes DB_HOST, DB_PORT, … into .envBitL services use non-standard ports (MySQL on
3360) so they never fight a Homebrew or Docker install.env-synctakes care of the details. - 4
Open it
bitl open
Start a new project
bitl new scaffolds a project in the current directory and links it in one go:
cd ~/Sitesbitl new laravel shop # → ~/Sites/shop, served at shop.testbitl new wordpress blogbitl new static landingComing from Laravel Herd or Valet
BitL imports linked sites, parked directories, SSL certificates and per-site PHP isolations.
bitl migrate # detect a Herd or Valet installbitl migrate herd --dry-run # preview, change nothingbitl migrate herd # importbitl migrate valet # same, from ValetAdd --force to overwrite configuration BitL already has. Projects with a herd.yml keep working — see herd.yml support.
bitl doctor will point at the conflict.Updates & uninstall
The app updates itself (Settings → Updates). The CLI can also update on its own:
bitl self-update --check # just lookbitl self-update # install the latest releasebitl self-update --beta # include pre-releasesbitl self-update --rollback # go back one versionTo remove BitL completely, quit the app, delete it from Applications, then:
| Remove | Contains |
|---|---|
~/Library/Application Support/BitL | Sites, settings, certificates, runtimes, service data (your databases!) |
/usr/local/bitl | CLI binary (needs sudo) |
/usr/local/bin/bitl | CLI symlink (needs sudo) |
/etc/resolver/test | DNS resolver for .test (needs sudo) |
~/Library/LaunchAgents/com.bitl.* | Service launch agents — stop services first with bitl services stop --all |
/Library/LaunchDaemons/com.bitl.* | Privileged helper (needs sudo) |
bitl db snapshot before-uninstall --database my_app) — service data lives in Application Support and goes with it.