PHPackages                             mehrancodes/laravel-harbor - 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. mehrancodes/laravel-harbor

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

mehrancodes/laravel-harbor
==========================

A CLI tool to Quickly create On-Demand preview environment for your apps.

v2.0.4(2w ago)10097.5k↓55.7%13[19 issues](https://github.com/mehrancodes/laravel-harbor/issues)[2 PRs](https://github.com/mehrancodes/laravel-harbor/pulls)MITPHPPHP ^8.2CI passing

Since Oct 4Pushed 2w ago3 watchersCompare

[ Source](https://github.com/mehrancodes/laravel-harbor)[ Packagist](https://packagist.org/packages/mehrancodes/laravel-harbor)[ Docs](https://laravel-harbor.com)[ RSS](/packages/mehrancodes-laravel-harbor/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (10)Dependencies (48)Versions (50)Used By (0)

[![Actions Status](https://github.com/mehrancodes/laravel-harbor/actions/workflows/run-tests.yml/badge.svg?event=pull_request)](https://github.com/mehrancodes/laravel-harbor/actions)

[![logo-harbor](https://private-user-images.githubusercontent.com/7046255/307621118-18186f83-dbd7-4a5a-ad2f-051e8c60c832.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI5MDY2MTIsIm5iZiI6MTc4MjkwNjMxMiwicGF0aCI6Ii83MDQ2MjU1LzMwNzYyMTExOC0xODE4NmY4My1kYmQ3LTRhNWEtYWQyZi0wNTFlOGM2MGM4MzIuanBnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDFUMTE0NTEyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MmJiZTI3NzEzZjFmNjQyZjg4ZTIwYjlhMjRhMTY5MzM0ZWJiODlkY2MwYzVhMmIzMTU3ZWU3NTcxNGFjZDY4OCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGanBlZyJ9.Q4gkupCpNfWvqk2d73spcoe68QN-6P1ZbrL8G3R7bA8)](https://private-user-images.githubusercontent.com/7046255/307621118-18186f83-dbd7-4a5a-ad2f-051e8c60c832.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI5MDY2MTIsIm5iZiI6MTc4MjkwNjMxMiwicGF0aCI6Ii83MDQ2MjU1LzMwNzYyMTExOC0xODE4NmY4My1kYmQ3LTRhNWEtYWQyZi0wNTFlOGM2MGM4MzIuanBnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDFUMTE0NTEyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MmJiZTI3NzEzZjFmNjQyZjg4ZTIwYjlhMjRhMTY5MzM0ZWJiODlkY2MwYzVhMmIzMTU3ZWU3NTcxNGFjZDY4OCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGanBlZyJ9.Q4gkupCpNfWvqk2d73spcoe68QN-6P1ZbrL8G3R7bA8)

Laravel Harbor (formerly Veyoze)
================================

[](#laravel-harbor-formerly-veyoze)

### On-Demand Laravel Forge deployments with all setup you need

[](#on-demand-laravel-forge-deployments-with-all-setup-you-need)

🚀 **Update (February 25, 2024):** Repository Name Change

We have officially changed the repository name from "Veyoze" to "Laravel Harbor." The new repository URL is now:

```
composer require mehrancodes/laravel-harbor
```

Please update your references and links accordingly.

Table of Contents
-----------------

[](#table-of-contents)

- [Introduction](#introduction)
- [Forge Server Requirements (Harbor)](#forge-server-requirements-harbor)
- [Forge Deployment Alert Reference](#forge-deployment-alert-reference)
- [Contributing](#contributing)
- [License](#license)
- [Roadmap](#roadmap)

Introduction
------------

[](#introduction)

In today's fast-paced software development world, the ability to quickly and efficiently test new features is a game-changer for teams aiming to maintain a competitive edge. Preview Environments serve as the critical testing grounds for new features, bug fixes, and updates before they are integrated into the main codebase. These environments are crafted on-demand to validate specific git branches, providing a transient yet powerful platform for thorough pre-merge testing.

`"Don't merge until you preview" - with Laravel Harbor, ensure that excellence is the standard, not the exception.`

Documentation, and Usage Instructions
-------------------------------------

[](#documentation-and-usage-instructions)

See the [documentation](https://laravel-harbor.com/docs/introduction/) for detailed installation and usage instructions.

Forge Server Requirements (Harbor)
----------------------------------

[](#forge-server-requirements-harbor)

Use this checklist when provisioning new Harbor preview servers, especially when running multiple Redis instances on the same machine.

- Configure `FORGE_ORGANIZATION` with your Forge organization slug (new Forge API is org-scoped).
- Create a Forge API token with scopes required by Harbor operations (sites, deploys, environment, commands, daemons/background processes, scheduled jobs, databases, domains/certificates, and webhooks).
- Set SWAP to at least `8 GB` for preview workloads with queues and Redis.
- Keep Horizon process counts conservative to avoid memory pressure under burst traffic.
- Plan Redis memory per instance (`maxmemory`) and make sure total Redis limits plus PHP workers fit within available RAM.
- Prefer one Redis instance per workload role when needed (for example: cache, queue, sessions) and monitor each separately.
- Enable basic Redis and system monitoring (memory usage, evictions, OOM events, and queue lag) before going live.

Forge Deployment Alert Reference
--------------------------------

[](#forge-deployment-alert-reference)

Use these examples as quick references when Harbor deploys fail in Forge.

### Generic Tunnel / SSH Failure Pattern

[](#generic-tunnel--ssh-failure-pattern)

- `Tunnel exited with a non-zero code [1].`
- Git ref lock error:
    - `cannot lock ref 'refs/remotes/origin/' ... (unable to update local ref)`
    - this often appears with `is at  but expected `
- SSH key reminder from Forge:
    - ensure Forge key exists in both:
        - `/home/forge/.ssh/authorized_keys`
        - `/root/.ssh/authorized_keys`
    - Forge output may be truncated (for example `/home/forge/.ssh/auth...`); treat it as the same `authorized_keys` guidance.

### Composer / Working Directory Failure Pattern

[](#composer--working-directory-failure-pattern)

- Dist download fallback:
    - `Failed to download  from dist ... make sure the directory is writable and you have internet connectivity`
    - `Now trying to download from source`
- Composer/source failure:
    - `RuntimeException: The provided cwd "" does not exist.`
    - `Could not determine the current working directory`

Suggested checks:

- Confirm deploy directory exists and is writable by `forge`.
- Confirm outbound network access to GitHub from the server.
- Confirm git/composer runtime can run from the expected release path.

### Composer Autoload ParseError Pattern

[](#composer-autoload-parseerror-pattern)

- Deploy and dependency install can succeed, but fail during:
    - `Illuminate\Foundation\ComposerScripts::postAutoloadDump`
- Example signature:
    - `autoload_static.php ... [ParseError] syntax error, unexpected string content "/php"`
- Typical meaning:
    - a malformed PHP file or generated classmap entry is breaking autoload generation.

Suggested checks:

- Run `composer dump-autoload -o` manually on the server in the release directory.
- Inspect the referenced `vendor/composer/autoload_static.php` line and trace the mapped file causing invalid PHP syntax.
- Validate recently changed PHP files for parse errors before deploy.
- If needed, clear and rebuild dependencies (`rm -rf vendor && composer install`) to rule out corrupted generated autoload files.

### Project Install Cleanup / Clone Failure Pattern

[](#project-install-cleanup--clone-failure-pattern)

- Forge may fail while preparing the project directory with output like:
    - `rm: cannot remove '.../vendor/composer': Directory not empty`
    - followed by `Couldn't clone repository?`
- Typical meaning:
    - stale/in-use files in the target path blocked cleanup before clone/install.

Suggested checks:

- Verify no running process is holding files in the target project directory.
- Manually clean the project path (`vendor`, temporary composer dirs) and retry install.
- Ensure `forge` user owns the directory tree and has full write permissions.
- Re-verify deploy key access to the repository (Forge key added to source provider with read access).

### Git Context Missing (`not a git repository`) Pattern

[](#git-context-missing-not-a-git-repository-pattern)

- Deploy step may fail with:
    - `Tunnel exited with a non-zero code [128].`
    - `fatal: not a git repository (or any of the parent directories): .git`
- Typical meaning:
    - deploy command ran outside the expected repository root, or `.git` metadata is missing/corrupted in the target path.

Suggested checks:

- Verify Forge site deploy path points to the correct project directory.
- Confirm repository clone completed successfully and `.git` exists in that directory.
- Ensure deploy script `cd` targets the repository root before any git command.
- Re-clone the repository into a clean directory if metadata is missing.

Contributing
------------

[](#contributing)

We welcome contributions! Please see our [CONTRIBUTING.md](https://github.com/mehrancodes/laravel-harbor/blob/main/CONTRIBUTING.md) for details on how to contribute and the process for submitting pull requests.

License
-------

[](#license)

This project is licensed under the MIT License - see the [LICENSE](https://github.com/mehrancodes/laravel-harbor/blob/main/LICENSE) file for details.

Roadmap
-------

[](#roadmap)

As this CLI tool has been crafted as an MVP and has undergone real-world testing, we're now focusing on enhancing its robustness and expanding its capabilities. Here's what's on our radar:

- 🛠️ **Enhanced Error Handling**: Aiming for comprehensive error handling throughout the entire CLI process to ensure smooth user experiences.
- 📘 **Expanded Documentation**: We'll be adding more examples showcasing the tool's versatility, such as:

    - Using Laravel as an API backend with Nuxt.js on the frontend for SSR handling.
    - Using with projects like WordPress and more.
- 🧪 **Testing**: Preparing unit tests and feature tests to ensure the tool's reliability and stability.

###  Health Score

61

—

FairBetter than 98% of packages

Maintenance92

Actively maintained with recent releases

Popularity47

Moderate usage in the ecosystem

Community21

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 77.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 ~23 days

Recently: every ~55 days

Total

43

Last Release

19d ago

Major Versions

v0.2.5 → v1.0.02024-03-27

v1.1.8 → v2.0.12026-05-30

PHP version history (2 changes)v0.0.1PHP ^8.1

v1.0.6PHP ^8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7046255?v=4)[Mehran Rasulian](/maintainers/mehrancodes)[@mehrancodes](https://github.com/mehrancodes)

---

Top Contributors

[![mehrancodes](https://avatars.githubusercontent.com/u/7046255?v=4)](https://github.com/mehrancodes "mehrancodes (289 commits)")[![shawnhooper](https://avatars.githubusercontent.com/u/2073284?v=4)](https://github.com/shawnhooper "shawnhooper (40 commits)")[![RobertBoes](https://avatars.githubusercontent.com/u/2871897?v=4)](https://github.com/RobertBoes "RobertBoes (14 commits)")[![mgkimsal](https://avatars.githubusercontent.com/u/75154?v=4)](https://github.com/mgkimsal "mgkimsal (7 commits)")[![shvansheikha](https://avatars.githubusercontent.com/u/29592795?v=4)](https://github.com/shvansheikha "shvansheikha (6 commits)")[![prashank25](https://avatars.githubusercontent.com/u/5788844?v=4)](https://github.com/prashank25 "prashank25 (5 commits)")[![kim-vetisearch](https://avatars.githubusercontent.com/u/97092354?v=4)](https://github.com/kim-vetisearch "kim-vetisearch (4 commits)")[![381181295](https://avatars.githubusercontent.com/u/78950093?v=4)](https://github.com/381181295 "381181295 (3 commits)")[![vintagesucks](https://avatars.githubusercontent.com/u/13335308?v=4)](https://github.com/vintagesucks "vintagesucks (2 commits)")[![marzvrover](https://avatars.githubusercontent.com/u/6617862?v=4)](https://github.com/marzvrover "marzvrover (1 commits)")

---

Tags

cicontinuous-integrationforgelaravellaravel-forgelaravel-harborlaravel-zerophppreviewpreview-environmentprovisionpull-requestsstagingphpcliconsolelaravel-zerocontinuous integrationpreviewcistagingprovisionpull-requestslaravel-harborlaravel-forge

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/mehrancodes-laravel-harbor/health.svg)

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

###  Alternatives

[nunomaduro/collision

Cli error handling for console/command-line PHP applications.

4.7k357.7M11.1k](/packages/nunomaduro-collision)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M131](/packages/roots-acorn)[whatsdiff/whatsdiff

See what's changed in your project's dependencies

771.2k](/packages/whatsdiff-whatsdiff)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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