Laravel Artisan
Run Artisan for any linked site, from anywhere, with that site's isolated PHP version. Everything after the site name is passed straight through.
bitl artisan shop migratebitl artisan shop make:model Order --migrationbitl artisan shop.test tinkerbitl artisan shop route:list --jsonQueue workers
Run php artisan queue:work for a site. The connection is read from the project's .env unless you pass one.
bitl queue start # current directory, 1 worker, queue "default"bitl queue start shop --workers 3 --queue emails,defaultbitl queue start shop --connection redisFor workers you want to keep an eye on, use the app instead: open the site, click Add Worker under Queue Workers, and BitL supervises the workers, shows their status, and lets you restart or stop them after a deploy.
bitl queue status # workers from any earlier bitl queue startbitl queue restart shop # after a deploybitl queue stop shop/tmp/bitl/queue-workers.json, so a later status, restart or stop finds them. Workers that have exited are dropped from the list. Workers added in the app are managed in the app.Vite
Run a project's Vite dev server. BitL picks npm, pnpm, yarn or bun from the lockfile and hands out ports from 5173 upward so several projects can run at once.
bitl vite start # current directorybitl vite start ~/Sites/shop --port 5180bitl vite statusbitl vite stop ~/Sites/shop # same site or path you started it with/tmp/bitl/vite-instances.json, so status and stop work from any terminal.WordPress · WP-CLI
bitl wp blog plugin listbitl wp blog core updatebitl wp blog.test db export backup.sqlBitL runs your installed wp with the site's PHP version. It does not bundle WP-CLI: brew install wp-cli.
Composer
A composer wrapper ships inside BitL.app and is copied into BitL's bin directory. It downloads composer.phar on first use and runs it with the active PHP version.
bitl composer # status: where it is, which versionbitl composer self-updatebitl composer install --force # reinstall the wrapper from scratchWith BitL's bin on your PATH (see Runtimes) you just type composer.
Scaffolding
bitl new creates the project in the current directory, then links it:
| Template | Runs | Needs |
|---|---|---|
laravel | composer create-project laravel/laravel | Composer (bundled) |
wordpress | wp core download | wp (WP-CLI) |
static | a folder with an index.html | nothing |
cd ~/Sitesbitl new laravel shop # → ~/Sites/shop, served at shop.testbitl new laravel api --park # park ~/Sites instead of linking the one sitebitl new static landing --tld=localhostnginx templates
BitL writes a vhost per site automatically. When you need a different shape — an SPA fallback, a reverse proxy to a Node or Python server — start from a built-in template:
| Template | For |
|---|---|
laravel | Laravel / PHP front controller via PHP-FPM |
spa | Single-page apps (React, Vue …): every path falls back to index.html |
wordpress | WordPress with pretty permalinks |
static | Plain files |
proxy | Reverse proxy to a local port |
node | Node.js app, with WebSocket upgrade headers |
bitl nginx templatesbitl nginx template spa --domain app.test --root ~/Sites/app/distbitl nginx template node --domain api.test --root ~/Sites/api --port 3000bitl nginx validate # check BitL's nginx configbitl nginx reloadbitl nginx template prints the rendered server block; it doesn't install it. Save the output as ~/Library/Application Support/BitL/nginx/vhosts/<domain>.conf, then run bitl nginx validate and bitl nginx reload. For a reverse proxy to a Docker container, bitl docker link does it in one step.