Important
This package requires ext-pcntl, so it will not work on Windows. Sorry about that. If you know how to fix that, let me know!
Solo for Laravel is a package to run multiple commands at once, to aid in local development. All the commands needed to run your application live behind a single artisan command:
php artisan solo
Each command runs in its own tab in Solo. Use the left/right arrow keys to navigate between tabs and enjoy a powerful, unified development environment.
- Require the package:
composer require soloterm/solo --dev
- Install the package:
php artisan solo:install
This will publish the configuration file to config/solo.php
.
Solo is entirely config-driven through config/solo.php
. Here's a quick overview of what you can configure:
Define your commands in the commands
array:
'commands' => [
'About' => 'php artisan solo:about',
'Logs' => EnhancedTailCommand::file(storage_path('logs/laravel.log')),
'Vite' => 'npm run dev',
'Make' => new MakeCommand,
// Lazy commands don't start automatically
'Dumps' => Command::from('php artisan solo:dumps')->lazy(),
'Queue' => Command::from('php artisan queue:work')->lazy(),
'Tests' => Command::from('php artisan test --colors=always')->lazy(),
],
You can define commands in several ways:
'commands' => [
// A simple string
'About' => 'php artisan solo:about',
// A custom Command class
'Logs' => EnhancedTailCommand::file(storage_path('logs/laravel.log')),
'Make' => new MakeCommand,
// Using the Command::from() static constructor
'Dumps' => Command::from('php artisan solo:dumps')->lazy(),
],
A simple string command is the easiest way, but if you need more control you're free to create your own custom class. The EnhancedTailCommand
is a good example of what you can do in a custom command.
If you want to define a command that does not start automatically, you can append lazy()
to a Command instance:
// You might need Reverb, but maybe not always, so don't autostart it.
'Reverb' => Command::from('php artisan reverb')->lazy()
Solo ships with both light and dark themes. Configure your preference in config/solo.php
:
'theme' => env('SOLO_THEME', 'dark'),
'themes' => [
'light' => Themes\LightTheme::class,
'dark' => Themes\DarkTheme::class,
],
You can define your own theme if you'd like. It's probably easiest to subclass one of the existing themes.
Choose between default and vim-style keybindings:
'keybinding' => env('SOLO_KEYBINDING', 'default'),
'keybindings' => [
'default' => Hotkeys\DefaultHotkeys::class,
'vim' => Hotkeys\VimHotkeys::class,
],
Again, you're welcome to define and register your own keybidings.
Start Solo with:
php artisan solo
Note these are the default bindings. They will be slightly different if you use the Vim bindings.
-
Navigation:
- Left/Right arrows to switch between tabs
- Up/Down arrows to scroll output
- Shift + Up/Down to page scroll
- g to quickly jump to any tab
-
Command Controls:
- s to start/stop the current command
- r to restart
- c to clear output
- p to pause output
- f to resume (follow) output
-
Interactive Mode:
- i to enter interactive mode
- Ctrl+X to exit interactive mode
-
Global:
- q or Ctrl+C to quit Solo
The EnhancedTailCommand
provides improved log viewing with features like:
- Vendor frame collapsing
- Stack trace formatting
- Toggle vendor frames with v
- File truncating
'Logs' => EnhancedTailCommand::file(storage_path('logs/laravel.log')),
Solo ships with a special php artisan solo:make
command that proxies to all of the underlying php artisan make:*
commands. It serves as a universal entry point to Laravel's make commands.
It lives in a custom MakeCommand
class.
'Make' => new MakeCommand,
Solo also ships with a custom "Dump Server" that will intercept dump
commands from your code and show them in Solo instead of inline. You can run this as a normal artisan command via php artisan solo:make
.
Try these steps:
- Test if it works outside of Solo
- Check if it has an
--ansi
or--colors=always
option - Verify it's writing to STDOUT
- Look for options to force STDOUT output
Yes! Use this format: vendor/bin/sail artisan schedule:work --ansi
No, Solo requires ext-pcntl
and other Unix-specific features. If you know how to fix that, please open a PR.
I wouldn't! Use supervisor or similar tools for production environments.
This is free! If you want to support me:
- Check out my courses:
- Share them with friends
- Help spread the word about things I make
Solo was developed by Aaron Francis. If you like it, please let me know!
- Twitter: https://twitter.com/aarondfrancis
- Website: https://aaronfrancis.com
- YouTube: https://youtube.com/@aarondfrancis
- GitHub: https://github.com/aarondfrancis/solo
Special thanks to:
- Joe Tannenbaum for his Laracasts course
- Joe's Chewie package
- Laravel Prompts
- Will King for the Solo logo