Isolation
Harbour shares infrastructure where Laravel supports safe logical boundaries and creates physical resources only where necessary.
Application and development ports
APP_PORT, VITE_PORT, and REVERB_PORT are allocated independently. APP_URL is built from the application port. Projects can add arbitrary named allocations.
Databases
PostgreSQL and MySQL/MariaDB workspaces receive distinct, safely quoted database names and random ownership markers. SQLite receives a workspace-local file constrained to the checkout.
Teardown verifies both persisted state and the ownership marker before dropping a server database. A configured database name alone is never sufficient authority.
Redis, cache, and locks
Each workspace receives REDIS_PREFIX and CACHE_PREFIX. Laravel cache keys and cache-backed locks therefore occupy separate keyspaces when the project template connects those variables to Laravel's standard configuration.
Sessions
SESSION_COOKIE is unique per workspace. This matters because browser cookies are scoped by hostname rather than port: two applications on 127.0.0.1 with different ports would otherwise share the same cookie name.
Queues and Horizon
QUEUE_NAME, REDIS_QUEUE, QUEUE_PREFIX, and HORIZON_PREFIX are workspace-specific. Queue workers must start with the rendered workspace environment so they listen to that workspace's queue.
Harbour configures workers; it does not supervise them.
Vite
VITE_PORT avoids HMR port collisions. Laravel's default public/hot file is already inside each checkout, so normal worktrees do not need a custom hot file.
See Vite and Reverb for process commands and advanced custom hot-file support.
Reverb
REVERB_PORT gives each checkout a safe listener port. Harbour does not run Reverb; launch it normally after loading the workspace environment.