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.3k461.0k↓31.2%58[24 issues](https://github.com/soloterm/solo/issues)[3 PRs](https://github.com/soloterm/solo/pulls)4MITPHPPHP ^8.2CI passing

Since Nov 7Pushed 5mo ago8 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 2w 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

53

—

FairBetter than 96% of packages

Maintenance58

Moderate activity, may be stable

Popularity61

Solid adoption and visibility

Community35

Small or concentrated contributor base

Maturity50

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

514d 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/ai

The official AI SDK for Laravel.

1.1k4.6M322](/packages/laravel-ai)[laravel/boost

Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.

3.6k26.0M809](/packages/laravel-boost)[illuminate/console

The Illuminate Console package.

13046.6M7.4k](/packages/illuminate-console)[tallstackui/tallstackui

TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.

731189.9k16](/packages/tallstackui-tallstackui)[mike-bronner/laravel-model-caching

Automatic caching for Eloquent models.

2.4k161.4k2](/packages/mike-bronner-laravel-model-caching)[iazaran/smart-cache

Smart Cache is a caching optimization package designed to enhance the way your Laravel application handles data caching. It intelligently manages large data sets by compressing, chunking, or applying other optimization strategies to keep your application performant and efficient.

21114.2k](/packages/iazaran-smart-cache)

PHPackages © 2026

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