Get started
Connecting a site to Porro
Let Porro install the connector with a pull request on Forge, Ploi or Laravel Cloud, or run one command with the site key.
Everything in the panel works without a Porro account. Connecting adds what can only be seen from outside the site, alongside every other site you look after.
Let Porro install it
On Laravel Forge, Ploi or Laravel Cloud, Porro can do all of this for you through a pull request:
- In the workspace's Settings, under Integrations → Connections, connect your host and GitHub, GitLab or Bitbucket.
- Import the site from the host. For a site you added another way, open its settings, then Connector & errors, and link it to where it lives on the host and to its repository.
- Click Install with a pull request on the site's page, or Install connectors on Sites to do several at once.
Porro opens a pull request adding the connector, sets PORRO_KEY in the site's environment on the host, and adds a report step to its deploy script (deploy commands on Cloud). Nothing changes on the site until you merge, and the first report arrives with the deploy. Porro never deploys, merges or runs commands on your servers.
Not on one of those hosts? Follow the steps below.
1. Add the site in Porro
Add the site in Porro, open its page and create a site key under Connector. A site key looks like porro_…, is shown once and signs every report the site sends.
2. Run connect
| Site | Command |
|---|---|
| Laravel or Filament | php artisan porro:connect <site key> |
| Statamic | php please porro:connect <site key> |
| Craft CMS | php craft porro/connect <site key> |
| JavaScript | npx @porro/js-connector connect <site key> |
connect saves the key to .env as PORRO_KEY and sends the first report.
3. Let it report on a schedule
PHP sites report every 15 minutes:
- Laravel, Filament and Statamic report on Laravel's scheduler, which needs one cron line. If the scheduler isn't running yet,
connectoffers to add the line to the server's crontab, with the right PHP binary and folder, or prints it to paste into Forge, Ploi orcrontab -e.--cronadds it without asking;--no-cronleaves the crontab alone. On Laravel Cloud, turn on Scheduler on the environment's App cluster, then save and redeploy: Cloud runsschedule:runevery minute, so there's no cron line. Vapor runs the scheduler unlessvapor.ymlsetsscheduler: false. On both, just setPORRO_KEY. - Craft reports from its own cron line, which
php craft porro/connectoffers to add in the same way.php craft porro/cronadds it later, without the key. - JavaScript reports on every production build instead. Add
PORRO_KEYto the host's production environment variables, not the repo.
Add the report command to your deploy script so Porro hears about deploys straight away: php artisan porro:report (php craft porro/report --deploy on Craft). It never fails a deploy.
Only production reports
With PORRO_ENABLED unset, only production reports: APP_ENV (or CRAFT_ENVIRONMENT) of production, prod or live. A local or staging copy running with the live .env stays quiet, so it can't overwrite the live site's state in Porro. Set PORRO_ENABLED=true to report from another environment on purpose, or false to stop reporting.
php artisan porro:status (or php craft porro/status) shows whether reporting is on and why, and --json prints the exact report.
What a report is
One signed POST with the site's versions, packages and health facts, never its content, users or secrets. What leaves a site lists every field. Porro never connects in: reading the site's findings back is a GET from the site, signed with the same key.