laravel/valet
Laravel Valet is a lightweight macOS development environment for Laravel and PHP. It runs Nginx automatically, uses DnsMasq to route *.test domains to local sites, avoids Vagrant and /etc/hosts edits, and can share sites via tunnels.
Installation:
brew install laravel/valet/valet
valet install
valet install to configure Nginx, DnsMasq, and PHP (if not already installed).PATH.First Project:
mkdir ~/Sites/my-project && cd ~/Sites/my-project
composer create-project laravel/laravel .
valet link
~/Sites/ (Valet’s default directory).valet link generates a my-project.test domain and configures Nginx.Access Your Site:
Open https://my-project.test in your browser. Valet handles SSL via Let’s Encrypt (automatically).
| Command | Purpose |
|---|---|
valet link |
Links current directory to a .test domain. |
valet secure |
Secures a site with HTTPS (Let’s Encrypt). |
valet open |
Opens the linked site in the default browser. |
valet share |
Generates a public URL (e.g., my-project.test.lndo.site) via Localtunnel. |
valet use php@8.2 |
Switches PHP version for the current project. |
valet logs |
Streams Nginx/PHP-FPM logs for debugging. |
valet doctor (diagnoses common issues like PHP/Nginx misconfigurations).~/.valet/Nginx/ (override default Nginx templates).Project Setup:
# Create and link a new project
mkdir ~/Sites/api && cd $_
composer create-project laravel/laravel .
valet link
valet secure
valet link early to avoid manual domain/hosts file management.PHP Version Management:
# List available PHP versions
valet php
# Switch globally or per-project
valet use php@8.2 # Global
echo "extension=redis" >> ~/.valet/php/php8.2.ini # Per-project PHP.ini
.valet-php.ini (auto-loaded).Environment-Specific Configs:
.env files as usual (Valet ignores them by default).valet trust
# Edit ~/Sites/my-project/public/Nginx.conf
Database & Services:
sail up -d
valet link # Works alongside Sail
valet db (if configured via ~/.valet/MySQL/).Collaboration:
valet share # Outputs: https://my-project.test.lndo.site
valet trust to allow local sites to access external APIs (e.g., Stripe).Laravel Mix/Vite:
Valet handles HTTPS, so mix/vite dev servers work out-of-the-box with https://my-project.test.
// vite.config.js
server: {
https: true,
}
Queue Workers:
Use valet queue:work (if using Laravel’s queue system) or integrate with Supervisor:
echo_supervisord_conf | sudo tee /etc/supervisord.conf
sudo supervisorctl reread
sudo supervisorctl update
CI/CD:
Mock Valet in pipelines by using *.test domains in tests (e.g., http://test-site.test).
Example in phpunit.xml:
<env name="APP_URL" value="https://test-site.test"/>
Monorepos:
Use valet link with subdirectories:
cd ~/Sites/monorepo/api
valet link api.test
cd ../frontend
valet link frontend.test
DNS Caching:
valet link, wait 10–30 seconds for DnsMasq to propagate.sudo killall -HUP mDNSResponder
PHP Version Conflicts:
valet php # Check installed versions
valet use php@8.2 && valet restart
valet php --version
php -v # Should match
Port Conflicts:
80/443. If another service (e.g., Docker) blocks them:
valet secure --port=8080 # Custom port
lsof -i :80
SSL Issues:
valet secure may fail if:
443:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/bin/valet
valet certs:prune # Clean old certs
valet secure
Nginx Misconfigurations:
Nginx.conf can break routing. Use valet trust sparingly.valet reset
valet logs # Streams Nginx/PHP-FPM
tail -f /usr/local/var/log/nginx/error.log
ping my-project.test # Should resolve to 127.0.0.1
curl -v http://my-project.test
~/.valet/php/php.ini:
display_errors = On
display_startup_errors = On
Aliases:
Add to ~/.zshrc or ~/.bashrc:
alias vlink='valet link'
alias vopen='valet open'
alias vlogs='valet logs --tail=50'
Project Templates:
Use valet new to scaffold projects with preconfigured PHP/Nginx:
valet new my-project --template=laravel
Custom Domains:
Extend beyond .test:
valet link my-project.local
# Edit ~/.valet/Dnsmasqfile to add custom TLDs
Performance:
valet php --disable-module=php_xdebug
valet restart --clear to reset Nginx cache.Backup Sites:
valet backup my-project.test ~/backups/
valet restore ~/backups/my-project.test ~/Sites/
Extending Valet:
~/.valet/commands/ (e.g., valet my:task).~/.valet/ValetServiceProvider.php.Docker Integration:
valet link with Docker volumes:
# Mount host directory to container
docker run -v ~/Sites/my-project:/var/www/html ...
valet link # Works with containerized apps
How can I help you explore Laravel packages today?