PHPackages                             soloterm/solo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. soloterm/solo

ActiveLibrary[CLI &amp; Console](/categories/cli)

soloterm/solo
=============

A Laravel package to run multiple commands at once, to aid in local development.

v0.5.0(1y ago)1.2k303.2k—9.5%59[20 issues](https://github.com/soloterm/solo/issues)[3 PRs](https://github.com/soloterm/solo/pulls)4MITPHPPHP ^8.2CI passing

Since Nov 7Pushed 2mo ago9 watchersCompare

[ Source](https://github.com/soloterm/solo)[ Packagist](https://packagist.org/packages/soloterm/solo)[ Fund](https://aaronfrancis.com/backstage)[ GitHub Sponsors](https://github.com/aarondfrancis)[ RSS](/packages/soloterm-solo/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (11)Versions (15)Used By (4)

    ![Solo for Laravel](https://raw.githubusercontent.com/soloterm/solo/refs/heads/main/art/solo_logo_light.png)

### Your all-in-one Laravel command to tame local development

[](#your-all-in-one-laravel-command-to-tame-local-development)

---

Solo for Laravel
================

[](#solo-for-laravel)

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!

About
-----

[](#about)

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.

[![Screenshot](https://github.com/aarondfrancis/solo/raw/main/art/screenshot.png?raw=true)](https://github.com/aarondfrancis/solo/blob/main/art/screenshot.png?raw=true)

Installation
------------

[](#installation)

1. Require the package:

```
composer require soloterm/solo --dev
```

2. Install the package:

```
php artisan solo:install
```

This will publish the configuration file to `config/solo.php`.

Configuration
-------------

[](#configuration)

Solo is entirely config-driven through `config/solo.php`. Here's a quick overview of what you can configure:

### Commands

[](#commands)

Define your commands in the `commands` array:

```
'commands' => [
    'About' => 'php artisan solo:about',
    'Logs' => 'tail -f -n 100 ' . 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' => TestCommand::artisan(),
],
```

You can define commands in several ways:

```
'commands' => [
    // A simple string
    'About' => 'php artisan solo:about',

    // A custom Command class
    '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.

#### Lazy Commands

[](#lazy-commands)

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()
```

### Themes

[](#themes)

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.

### Keybindings

[](#keybindings)

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.

Usage
-----

[](#usage)

Start Solo with:

```
php artisan solo
```

### Key Controls

[](#key-controls)

> 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

Special Commands
----------------

[](#special-commands)

### MakeCommand

[](#makecommand)

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,
```

### TestCommand

[](#testcommand)

The `TestCommand` provides a safe way to run tests that automatically sets `APP_ENV=testing`. This ensures your tests run in the correct environment and don't accidentally affect your local database.

```
// Using Laravel's artisan test command (default)
'Tests' => TestCommand::artisan(),

// Using Pest
'Tests' => TestCommand::pest(),

// Using PHPUnit directly
'Tests' => TestCommand::phpunit(),

// Custom arguments
'Tests' => TestCommand::artisan('--filter=UserTest'),
```

### `solo:dumps`

[](#solodumps)

Solo also ships with a custom "[Dump Server](https://symfony.com/doc/current/components/var_dumper.html)" 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:dumps`.

FAQ
---

[](#faq)

#### My command isn't working

[](#my-command-isnt-working)

Try these steps:

1. Test if it works outside of Solo
2. Check if it has an `--ansi` or `--colors=always` option
3. Verify it's writing to STDOUT
4. Look for options to force STDOUT output

#### Can I run Sail commands?

[](#can-i-run-sail-commands)

Yes! Use this format: `vendor/bin/sail artisan schedule:work --ansi`

#### Does Solo support Windows?

[](#does-solo-support-windows)

No, Solo requires `ext-pcntl` and other Unix-specific features. If you know how to fix that, please open a PR.

#### Can I use this in production?

[](#can-i-use-this-in-production)

I wouldn't! Use supervisor or similar tools for production environments.

Support
-------

[](#support)

This is free! If you want to support me:

- Check out my courses:
    - [Database School](https://databaseschool.com)
    - [Screencasting](https://screencasting.com)
- Help spread the word about things I make

Credits
-------

[](#credits)

Solo was developed by Aaron Francis. If you like it, please let me know!

- Twitter:
- Website:
- YouTube:
- GitHub:

Special thanks to:

- [Joe Tannenbaum](https://x.com/joetannenbaum) for his [Laracasts course](https://laracasts.com/series/cli-experiments)
- Joe's [Chewie package](https://github.com/joetannenbaum/chewie)
- [Laravel Prompts](https://laravel.com/docs/11.x/prompts)
- [Will King](https://x.com/wking__) for the Solo logo

Related Projects
----------------

[](#related-projects)

- [Screen](https://github.com/soloterm/screen) - Pure PHP terminal renderer
- [Dumps](https://github.com/soloterm/dumps) - Laravel command to intercept dumps
- [Grapheme](https://github.com/soloterm/grapheme) - Unicode grapheme width calculator
- [Notify](https://github.com/soloterm/notify) - PHP package for desktop notifications via OSC escape sequences
- [Notify Laravel](https://github.com/soloterm/notify-laravel) - Laravel integration for soloterm/notify
- [TNotify](https://github.com/soloterm/tnotify) - Standalone, cross-platform CLI for desktop notifications
- [VTail](https://github.com/soloterm/vtail) - Vendor-aware tail for Laravel logs

###  Health Score

55

—

FairBetter than 98% of packages

Maintenance68

Regular maintenance activity

Popularity60

Solid adoption and visibility

Community35

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 81.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~15 days

Recently: every ~25 days

Total

10

Last Release

423d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/033238953a59b9223a1bde703b5e4254e63c7412195da1cb9de5af44bf53fc0a?d=identicon)[aarondfrancis](/maintainers/aarondfrancis)

---

Top Contributors

[![aarondfrancis](https://avatars.githubusercontent.com/u/881931?v=4)](https://github.com/aarondfrancis "aarondfrancis (249 commits)")[![CamKem](https://avatars.githubusercontent.com/u/112100521?v=4)](https://github.com/CamKem "CamKem (15 commits)")[![mergehez](https://avatars.githubusercontent.com/u/16548877?v=4)](https://github.com/mergehez "mergehez (7 commits)")[![nunomaduro](https://avatars.githubusercontent.com/u/5457236?v=4)](https://github.com/nunomaduro "nunomaduro (5 commits)")[![realpoke](https://avatars.githubusercontent.com/u/16293072?v=4)](https://github.com/realpoke "realpoke (3 commits)")[![joshcirre](https://avatars.githubusercontent.com/u/8452303?v=4)](https://github.com/joshcirre "joshcirre (2 commits)")[![mateusjunges](https://avatars.githubusercontent.com/u/19756164?v=4)](https://github.com/mateusjunges "mateusjunges (2 commits)")[![eleftrik](https://avatars.githubusercontent.com/u/6959298?v=4)](https://github.com/eleftrik "eleftrik (2 commits)")[![jordanhavard](https://avatars.githubusercontent.com/u/67948773?v=4)](https://github.com/jordanhavard "jordanhavard (1 commits)")[![joshmanders](https://avatars.githubusercontent.com/u/352113?v=4)](https://github.com/joshmanders "joshmanders (1 commits)")[![kachelle](https://avatars.githubusercontent.com/u/33377566?v=4)](https://github.com/kachelle "kachelle (1 commits)")[![mahansky](https://avatars.githubusercontent.com/u/1536298?v=4)](https://github.com/mahansky "mahansky (1 commits)")[![MSnoeren](https://avatars.githubusercontent.com/u/3404401?v=4)](https://github.com/MSnoeren "MSnoeren (1 commits)")[![nikuscs](https://avatars.githubusercontent.com/u/12662462?v=4)](https://github.com/nikuscs "nikuscs (1 commits)")[![riiad](https://avatars.githubusercontent.com/u/370008?v=4)](https://github.com/riiad "riiad (1 commits)")[![roy-bongers](https://avatars.githubusercontent.com/u/10220797?v=4)](https://github.com/roy-bongers "roy-bongers (1 commits)")[![SamuelNitsche](https://avatars.githubusercontent.com/u/24483576?v=4)](https://github.com/SamuelNitsche "SamuelNitsche (1 commits)")[![tobytwigger](https://avatars.githubusercontent.com/u/24829185?v=4)](https://github.com/tobytwigger "tobytwigger (1 commits)")[![aagjalpankaj](https://avatars.githubusercontent.com/u/15609300?v=4)](https://github.com/aagjalpankaj "aagjalpankaj (1 commits)")[![virgildotcodes](https://avatars.githubusercontent.com/u/16354900?v=4)](https://github.com/virgildotcodes "virgildotcodes (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/soloterm-solo/health.svg)

```
[![Health](https://phpackages.com/badges/soloterm-solo/health.svg)](https://phpackages.com/packages/soloterm-solo)
```

###  Alternatives

[laravel-zero/framework

The Laravel Zero Framework.

3371.4M369](/packages/laravel-zero-framework)[illuminate/console

The Illuminate Console package.

12944.1M5.1k](/packages/illuminate-console)[nunomaduro/laravel-console-menu

Laravel Console Menu is an output method for your Laravel/Laravel Zero commands.

815412.0k48](/packages/nunomaduro-laravel-console-menu)[statamic/cli

Statamic CLI Tool

7587.7k](/packages/statamic-cli)[regnerisch/laravel-beyond

23113.3k](/packages/regnerisch-laravel-beyond)[mwguerra/web-terminal

A web-based terminal component for Filament/Laravel with command whitelisting and multiple connection types

251.1k](/packages/mwguerra-web-terminal)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
