PHPackages                             laravel-workflow/waterline - 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. [Admin Panels](/categories/admin)
4. /
5. laravel-workflow/waterline

Abandoned → [durable-workflow/waterline](/?search=durable-workflow%2Fwaterline)Library[Admin Panels](/categories/admin)

laravel-workflow/waterline
==========================

An elegant UI for monitoring Laravel Workflows.

1.0.17(3w ago)206275.3k—1.6%151MITPHPPHP ^8.0.2CI passing

Since Nov 19Pushed 2w ago7 watchersCompare

[ Source](https://github.com/durable-workflow/waterline)[ Packagist](https://packagist.org/packages/laravel-workflow/waterline)[ RSS](/packages/laravel-workflow-waterline/feed)WikiDiscussions v2 Synced 2w ago

READMEChangelog (10)Dependencies (28)Versions (201)Used By (1)

Waterline
=========

[](#waterline)

An elegant operator UI for monitoring the technical runtime state of [workflows](https://github.com/durable-workflow/workflow).

Waterline is for fleet health, queues, waits, retries, failures, repair, history, and runtime diagnostics. Business dashboards should read application-owned read models projected at domain milestones, with `workflow_id` and `run_id` stored only as correlation references.

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

[](#installation)

Waterline uses one UI and operator behavior contract with two backend modes:

- Embedded mode is the Composer package inside a Laravel application and adds the optional `durable-workflow/workflow` integration.
- Service mode is the self-contained `durableworkflow/waterline` image. It needs no host PHP installation and connects to a standalone server through the published PHP SDK, never through the server database.

See [Waterline service mode](SERVICE_MODE.md) for the image, deployment inputs, authorization modes, persistence boundary, and Docker Compose example.

### Embedded Laravel

[](#embedded-laravel)

This UI is installable via [Composer](https://getcomposer.org).

```
composer require \
    durable-workflow/waterline:2.0.0-rc.10@RC \
    durable-workflow/workflow:2.0.0-rc.12@RC \
    durable-workflow/sdk:2.0.0-rc.7@RC

php artisan waterline:install
```

The `@RC` stability flags are required while Waterline and its Durable Workflow runtime dependencies are on the 2.0 prerelease channel. Composer only honors prerelease stability allowances from the root project, so default-stable applications must allow all three packages explicitly. Drop the flags after `2.0.0` is tagged stable for all three packages.

Authorization
-------------

[](#authorization)

Waterline exposes a dashboard at the `/waterline` URL. By default, you will only be able to access this dashboard in the local environment. However, within your `app/Providers/WaterlineServiceProvider.php` file, there is an authorization gate definition. This authorization gate controls access to Waterline in non-local environments.

```
Gate::define('viewWaterline', function ($user) {
    return in_array($user->email, [
        'admin@example.com',
    ]);
});

```

This will allow only the single admin user to access the Waterline UI.

Isolated observer stacks that have no application users can opt in to unauthenticated Waterline access:

```
WATERLINE_ALLOW_UNAUTHENTICATED=true
```

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

[](#configuration)

Waterline can display a thin environment strip above the dashboard so production and non-production tabs are visibly distinct before an operator acts:

```
WATERLINE_ENV_NAME=production
WATERLINE_ENV_COLOR=#dc3545
```

`WATERLINE_ENV_COLOR` accepts hex colors. Invalid values fall back to a neutral gray.

If your workflow IDs are strings (for example UUIDs) and do not sort in a useful order, publish the config and set `workflow_sort_column` to a timestamp column such as `created_at`:

```
'workflow_sort_column' => 'created_at',
```

### Operator Preferences

[](#operator-preferences)

Waterline persists small operator view preferences through `GET /waterline/api/preferences/{surface}` and `PUT /waterline/api/preferences/{surface}`. Supported surfaces are `workflow-list`, `run-detail`, `schedules-list`, and `workers-list`; supported keys are `tab`, `sort_direction`, `row_density`, `saved_view_id`, and `columns`. Preferences are scoped to the authenticated Laravel user when one is available, otherwise to `WATERLINE_PREFERENCES_SCOPE` for local installs.

URL query parameters still win for shared links. For example, `?tab=timeline&sort=asc&density=dense&columns=workflow_id,status` returns those values in `effective_preferences` without mutating the stored preferences.

Upgrading Waterline
-------------------

[](#upgrading-waterline)

When upgrading into or within the 2.0 prerelease channel, keep Waterline and its runtime dependencies on the supported versions shown below and publish the latest assets.

```
composer require --with-all-dependencies \
    durable-workflow/waterline:2.0.0-rc.10@RC \
    durable-workflow/workflow:2.0.0-rc.12@RC \
    durable-workflow/sdk:2.0.0-rc.7@RC

php artisan waterline:publish
```

Screenshots
-----------

[](#screenshots)

The v2 branch keeps repo-owned screenshots in `docs/screenshots/`. They are refreshed by the Screenshots workflow and mirrored into the workflow artifact for visual review.

### Dashboard

[](#dashboard)

[![Waterline dashboard](docs/screenshots/dashboard.png)](docs/screenshots/dashboard.png)

### Workflow Detail

[](#workflow-detail)

[![Waterline workflow detail](docs/screenshots/workflow-detail.png)](docs/screenshots/workflow-detail.png)

Development
-----------

[](#development)

### Quick Start

[](#quick-start)

Get a working Waterline dashboard in under 5 minutes:

```
# Clone and install
git clone https://github.com/durable-workflow/waterline.git
cd waterline
make install

# Start development environment (asset watch + server)
make dev
```

Open

The `make dev` command automatically:

- Sets up the SQLite database with migrations
- Builds and watches assets for changes
- Starts the workbench server
- Publishes assets to the correct location

### Available Commands

[](#available-commands)

Run `make help` to see all available commands:

- `make dev` - Start development environment (recommended)
- `make install` - Install dependencies
- `make test` - Run PHPUnit test suite
- `make test-sqlite` / `make test-mysql` / `make test-pgsql` / `make test-mssql` - Run tests on specific database
- `make clean` - Clean build artifacts

### Manual Setup

[](#manual-setup)

If you prefer to run commands manually:

1. Install dependencies: ```
    composer install
    npm ci
    ```
2. Build assets: ```
    npm run production
    ```
3. Publish assets to testbench: ```
    ./vendor/bin/testbench waterline:publish
    ```
4. Run migrations: ```
    ./vendor/bin/testbench workbench:create-sqlite-db
    ./vendor/bin/testbench migrate:fresh --database=sqlite
    ```
5. Start server: ```
    composer run serve
    ```
6. Access dashboard at

###  Health Score

65

—

FairBetter than 99% of packages

Maintenance96

Actively maintained with recent releases

Popularity53

Moderate usage in the ecosystem

Community25

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 89.1% 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 ~7 days

Recently: every ~0 days

Total

194

Last Release

21d ago

Major Versions

0.0.13 → 1.0.02023-08-02

1.0.16 → 2.0.0-alpha.12026-04-17

1.0.17 → 2.0.0-beta.212026-07-27

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1130888?v=4)[Richard McDaniel](/maintainers/rmcdaniel)[@rmcdaniel](https://github.com/rmcdaniel)

---

Top Contributors

[![durable-workflow-ops](https://avatars.githubusercontent.com/u/267215253?v=4)](https://github.com/durable-workflow-ops "durable-workflow-ops (638 commits)")[![rmcdaniel](https://avatars.githubusercontent.com/u/1130888?v=4)](https://github.com/rmcdaniel "rmcdaniel (67 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")[![beholdr](https://avatars.githubusercontent.com/u/741973?v=4)](https://github.com/beholdr "beholdr (2 commits)")[![Naugrimm](https://avatars.githubusercontent.com/u/5753604?v=4)](https://github.com/Naugrimm "Naugrimm (2 commits)")[![GALCF](https://avatars.githubusercontent.com/u/14803394?v=4)](https://github.com/GALCF "GALCF (1 commits)")[![laravel-shift](https://avatars.githubusercontent.com/u/15991828?v=4)](https://github.com/laravel-shift "laravel-shift (1 commits)")[![martio](https://avatars.githubusercontent.com/u/133636?v=4)](https://github.com/martio "martio (1 commits)")[![feuzeu](https://avatars.githubusercontent.com/u/15174329?v=4)](https://github.com/feuzeu "feuzeu (1 commits)")

---

Tags

background-jobslaravelphpqueuesworkflows

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/laravel-workflow-waterline/health.svg)

```
[![Health](https://phpackages.com/badges/laravel-workflow-waterline/health.svg)](https://phpackages.com/packages/laravel-workflow-waterline)
```

###  Alternatives

[slowlyo/owl-admin

基于 laravel、amis 开发的后台框架~

61415.2k26](/packages/slowlyo-owl-admin)

PHPackages © 2026

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