Does Laravel Work With Supabase?
Laravel and Supabase work seamlessly together—use Supabase as your PostgreSQL database and auth provider while Laravel handles your application logic.
Quick Facts
How Laravel Works With Supabase
Laravel connects to Supabase via standard PostgreSQL drivers, treating it like any other PostgreSQL database. Configure your `.env` file with Supabase's connection credentials and you're ready to run migrations and queries. For authentication, you can either use Supabase's Auth service directly (via their PHP SDK or REST API) or leverage Laravel's built-in auth guards with Supabase's JWT tokens. Many developers prefer using Laravel's Eloquent ORM against Supabase's PostgreSQL backend while delegating authentication to Supabase's managed service—this reduces authentication overhead and gives you enterprise features like MFA and social login out of the box. The realtime capabilities require custom implementation since Laravel doesn't have native bindings, but you can use Laravel Echo with Supabase's realtime subscriptions or build a simple WebSocket bridge. The main architectural consideration is that Supabase's Row Level Security (RLS) policies operate at the database level, so you need to coordinate between Laravel's authorization logic and Supabase's RLS rules to avoid conflicts.
Best Use Cases
Quick Setup with Laravel & Supabase
composer require supabase/supabase-php// .env
DB_CONNECTION=pgsql
DB_HOST=your-project.supabase.co
DB_PORT=5432
DB_DATABASE=postgres
DB_USERNAME=postgres
DB_PASSWORD=your-password
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-anon-key
// routes/web.php
use Supabase\SupabaseClient;
Route::get('/auth-test', function () {
$supabase = new SupabaseClient(
env('SUPABASE_URL'),
env('SUPABASE_KEY')
);
$response = $supabase->auth->signUpWithPassword(
email: 'user@example.com',
password: 'password123'
);
return $response;
});
// Use Laravel's Eloquent normally
Route::get('/posts', function () {
return Post::all(); // Queries Supabase PostgreSQL
});Known Issues & Gotchas
Supabase's connection pooling has strict limits on concurrent connections
Fix: Use PgBouncer or configure Laravel's connection pool carefully. For high-concurrency apps, consider upgrading your Supabase tier or implementing queue jobs to reduce simultaneous connections.
Row Level Security (RLS) policies can block queries if not properly coordinated with Laravel's authorization
Fix: Define RLS policies that align with your Laravel Gate/Policy authorization logic. Test both layers together during development. Ensure service role keys are only used server-side.
Realtime subscriptions require additional setup since Laravel doesn't have native Supabase bindings
Fix: Use Supabase's JavaScript client on the frontend for realtime, or build a thin Node.js service for server-side subscriptions. Alternatively, use Laravel Echo with a WebSocket server.
Supabase's REST API has rate limits that can affect high-volume integrations
Fix: Use direct PostgreSQL connections instead of REST API for bulk operations. Reserve REST API for client-side access where needed.
Alternatives
- •Firebase (Firestore + Auth) with Laravel—fully managed but requires REST API integration and lacks PostgreSQL's relational power
- •Laravel + AWS RDS PostgreSQL + Cognito—more infrastructure to manage but offers greater control and scalability
- •Laravel + PlanetScale MySQL + Laravel Sanctum—lighter-weight alternative with managed MySQL and traditional token-based auth
Resources
Related Compatibility Guides
Explore more compatibility guides