Skip to content

Toolset · PHP, Eloquent, Horizon, Octane

Laravel

  • PHP
  • Laravel
  • Redis

Laravel is our default PHP backend. The framework already supplies a strong container, ORM, and queue system — the toolset here is mostly about using them correctly under concurrency and scale.

Where two tools compete, the one marked our default is what we reach for.

01

Dependencies

1 tool
Composerour default

PHP's dependency manager. Our default — commit the lock file, audit packages.

02

Dependency injection

1 tool

Laravel's built-in IoC container with autowiring. Bind scoped, not singleton, for request state under Octane (see the Octane runbook). Our default — no library needed.

// Register in a service provider:
$this->app->bind(PaymentGateway::class, StripeGateway::class);
$this->app->scoped(TenantContext::class);      // per-request under Octane

// Resolve (autowired via constructor injection, or):
$gateway = app(PaymentGateway::class);
03

ORM & database

1 tool
Eloquentour default

Active-record ORM. Use global scopes for tenant isolation and lockForUpdate for concurrent writes (see the isolation spec and deadlock runbook). Our default.

04

HTTP client

2 tools
Laravel HTTPour default

Guzzle-backed fluent client with retries and pooling. Our default.

The underlying HTTP client for advanced control.

05

Queues & async

1 tool
Horizonour default

Redis queue dashboard and supervisor. Deploy workers with bounded lifetimes and graceful restart (see the workers runbook). Redis is our default queue driver — significantly faster and more scalable than the database driver, which matters for high-throughput, low-latency job processing. The database driver is acceptable only for prototypes or extremely low-traffic apps. Our default.

06

Auth & performance

3 tools
Sanctumour default

Lightweight token/SPA auth. Our default for API and first-party clients.

Full OAuth2 server when you need third-party grants.

Persistent-worker runtime (Swoole/FrankenPHP) that keeps the application in memory for dramatically higher throughput. The catch is rigorous state management: never hold request-specific state in singletons (use scoped bindings) and clean up any static state that could leak across requests. Reach for it on high-traffic APIs; for low-to-moderate-traffic web apps the standard PHP-FPM model is simpler and often sufficient.

07

Testing

2 tools
Pestour default

Expressive testing on top of PHPUnit. Our default.

The foundational PHP test framework — a solid choice for teams with established PHPUnit suites or a preference for traditional syntax, though more verbose than Pest. Decision rule: start with Pest for its modern, expressive syntax that encourages test-driven development; stick with PHPUnit only for legacy codebases where migration overhead isn't justified.

08

Monitoring & observability

4 tools
Sentryour default

Exception and performance monitoring with a first-class Laravel integration. Our default.

Laravel Pulseour default

First-party production dashboard — slow queries, slow jobs, usage, and exceptions at a glance. Our default for prod insight.

Local/staging debug assistant — requests, queries, jobs, cache, and mail. Not for production.

Hosted error tracking from the Laravel team, powered by Ignition.

09

CI/CD

4 tools
GitHub Actionsour default

Run Pest and static analysis, then trigger the deploy. Our default CI.

Laravel Forgeour default

Server provisioning and push-to-deploy on your own VPS. Our default for deployment.

Zero-downtime, atomic deployments with health checks and rollback.

Managed and serverless hosting when you'd rather not run servers.

10

Linting & formatting

3 tools
Laravel Pintour default

Zero-config PHP code-style fixer (PHP-CS-Fixer under the hood). Our default.

Static analysis tuned for Laravel — catches type and logic errors before runtime. Our default.

Automated refactoring and framework/PHP-version upgrades.

Building on Laravel?

We ship production Laravelwith exactly this stack. Tell us what you're building.

Start a conversation