Resumo rápido
- Laravel Cashier cuida de assinatura recorrente via Stripe (webhooks, cancelamento, fatura em PDF) com um método como
$user->subscribed('plano_pro').- Autenticação (login, verificação de email, 2FA) vem pronta com Jetstream rodando por baixo dos panos com Fortify; se seu front-end é React/Vue separado, o pacote certo é o Sanctum.
- Multi-tenancy (isolar dados de cada cliente do seu SaaS) não é nativo do framework, mas pacotes maduros do ecossistema, como o stancl/tenancy, resolvem isso sem você reinventar a roda.
Existe um ciclo vicioso na vida do desenvolvedor que quer lançar um produto: você tem uma ideia boa para um SaaS (Software as a Service), senta para programar e passa as próximas semanas configurando login, conexão com banco de dados e cobrança recorrente, coisas que não são o seu produto de verdade.
No fim das contas, a motivação acaba antes do produto ver a luz do dia.
Este guia não é sobre a história do PHP nem sobre por que a linguagem “voltou à moda”. É sobre o que importa na prática: quais peças do Laravel 12 você usa, em que ordem, para sair da ideia e chegar num SaaS que cobra assinatura. Se você quer entender o panorama histórico e de mercado por trás desse movimento, o outro artigo daqui do blog cobre isso em detalhe; aqui o foco é código e decisões de arquitetura.
O Laravel 12 foi lançado em fevereiro de 2025 com uma filosofia deliberada: pouca mudança estrutural, foco em manter dependências atualizadas e em entregar novos starter kits (React, Vue, Svelte e Livewire, com opção de autenticação social via WorkOS AuthKit), segundo as notas oficiais de release. Ele roda em PHP 8.2 a 8.4. Ou seja: é a versão estável que você usa hoje para começar um projeto sério, não uma aposta arriscada.
Autenticação pronta: Jetstream, Fortify e Sanctum
A primeira semana de qualquer SaaS costuma virar cadastro, login, recuperação de senha e verificação de email. No Laravel, isso já vem resolvido, mas veja qual peça faz o quê:
- Laravel Fortify é o backend de autenticação, agnóstico de front-end. Ele registra as rotas e controllers de login, registro, dois fatores (2FA), verificação de email e reset de senha.
- Laravel Jetstream é o scaffolding completo que usa o Fortify por baixo e já entrega as telas prontas (com Livewire ou Inertia), incluindo gerenciamento de equipe e API tokens.
- Laravel Sanctum entra quando o seu SaaS tem um front-end separado (uma SPA em React ou Vue, ou um app mobile) consumindo uma API. Ele oferece dois mecanismos: autenticação por cookie de sessão para SPAs do mesmo domínio, e tokens Bearer no header
Authorizationpara apps mobile e integrações de terceiros.
Na prática: se você está construindo um painel administrativo tradicional em Blade/Livewire, Jetstream resolve tudo de uma vez. Se o seu SaaS separa front-end e back-end (API própria consumida por um app React, por exemplo), Sanctum é a peça certa.
Faturamento recorrente sem dor: Laravel Cashier
O coração de qualquer SaaS é cobrar os usuários de forma recorrente. Integrar um gateway como o Stripe do zero envolve webhooks, cartões recusados, cálculo de prorata e cancelamentos, um pesadelo técnico e de segurança para resolver sozinho.
O Laravel Cashier é o pacote oficial que abstrai essa complexidade. Ele adiciona as colunas necessárias na tabela de usuários e cria as tabelas subscriptions e subscription_items via migration. Depois disso, verificar se um usuário tem uma assinatura ativa fica assim:
if ($user->subscribed('plano_pro')) {
// Libera a funcionalidade premium do seu SaaS
}
Cashier também lida com cupons, troca de plano, quantidade de licenças e geração de fatura em PDF através de métodos prontos. O tempo que você gastaria integrando a API financeira do zero vira tempo focado na regra de negócio do seu produto.
Multi-tenancy: isolando os dados de cada cliente
Se o seu SaaS atende várias empresas ou usuários que não podem ver dados uns dos outros, você precisa de multi-tenancy. Isso não é um recurso nativo do Laravel 12 (vale corrigir uma confusão comum aqui), mas o ecossistema tem soluções maduras:
- O stancl/tenancy é o pacote de multi-tenancy mais usado da comunidade. Ele automatiza a troca de conexão de banco, cache, filesystem e filas por tenant, sem forçar você a reescrever a lógica da aplicação.
- Se você usa o Filament para montar o painel administrativo, ele já tem suporte nativo a multi-tenancy em banco único (via uma coluna como
team_id). Para tenancy com banco separado por cliente, a combinação recomendada é Filament com o próprio stancl/tenancy.
A escolha entre banco único (com coluna de tenant) e banco separado por cliente depende do volume de dados e das exigências de isolamento do seu SaaS. Se você ainda está decidindo o banco de dados por trás disso, vale a leitura de SQL ou NoSQL? A Escolha do Banco de Dados Sem Dor de Cabeça: o Eloquent (o ORM do Laravel) funciona melhor com bancos relacionais, o que já direciona boa parte dessa decisão.
Tarefas pesadas em segundo plano: Queues e Jobs
Imagine que você está construindo um micro-ERP ou um sistema de emissão de Nota Fiscal de Serviço Eletrônica (NFSe) para vender por assinatura. Emitir uma NFSe exige conectar com a prefeitura, o que pode levar vários segundos. Fazer isso de forma síncrona trava a tela do cliente.
No Laravel, o sistema de Filas (Queues) resolve isso. Em vez de processar na hora, você cria um Job:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Models\Fatura;
class EmitirNFSeJob implements ShouldQueue
{
use Dispatchable, Queueable;
public function __construct(public Fatura $fatura)
{
}
public function handle(): void
{
// Lógica de comunicação com a API da prefeitura.
// O Laravel cuida das tentativas e falhas automaticamente.
ServicoSefaz::emitir($this->fatura);
}
}
E no controller, você só despacha a tarefa para segundo plano:
public function fecharVenda(Request $request)
{
$fatura = Fatura::create($request->all());
// O usuário recebe a resposta instantaneamente.
EmitirNFSeJob::dispatch($fatura);
return response()->json(['status' => 'Processando emissão da NFSe...']);
}
Isso é arquitetura de processamento assíncrono acessível em poucas linhas, sem precisar montar uma infraestrutura de mensageria separada para começar.
Ambiente de desenvolvimento com Laravel Sail
O Laravel Sail é a camada Docker oficial do framework. Ao instalar um projeto novo com Sail, ele já gera um docker-compose.yml com PHP, banco de dados (MySQL ou PostgreSQL), Redis para cache e Mailpit para testar emails localmente, tudo containerizado.
./vendor/bin/sail up
Isso elimina boa parte da fricção de configurar ambiente local antes de escrever a primeira linha de regra de negócio. Depois de construir o SaaS, o próximo passo é colocar o projeto no ar; se você nunca fez esse último passo antes, o nosso guia de como colocar um site no ar cobre o básico de hospedagem e domínio, embora para uma aplicação Laravel completa (com banco e filas) você geralmente precise de um VPS ou de uma ferramenta como o Laravel Forge, não de hospedagem estática.
Perguntas frequentes
O Laravel 12 já vem com multi-tenancy pronto de fábrica? Não. Multi-tenancy não é um recurso nativo do framework. A comunidade resolve isso com pacotes como o stancl/tenancy, que automatiza a separação de banco, cache e filesystem por cliente, ou com o suporte nativo do Filament para tenancy em banco único.
Jetstream e Fortify são a mesma coisa? Não. Fortify é o backend de autenticação (rotas e controllers), sem interface. Jetstream usa o Fortify por baixo e entrega as telas prontas em Livewire ou Inertia, além de recursos extras como gerenciamento de equipe.
Cashier só funciona com Stripe? O pacote laravel/cashier-stripe é focado em Stripe. Existe também o laravel/cashier-paddle, uma versão separada para quem usa a Paddle como gateway de pagamento.
Dá para usar o Laravel só como API, com um front-end separado em React ou Vue? Sim. Esse é exatamente o caso de uso do Sanctum: ele autentica tanto SPAs quanto aplicativos mobile consumindo a mesma API Laravel, sem exigir OAuth completo como o Passport.
Conclusão
Ser um bom desenvolvedor é saber escrever algoritmos complexos. Lançar um SaaS exige outra habilidade: escolher a ferramenta certa para cada parte do problema e não reinventar o que já existe pronto e testado.
O Laravel 12 entrega autenticação (Fortify, Jetstream, Sanctum), cobrança recorrente (Cashier), processamento assíncrono (Queues) e um caminho claro para multi-tenancy (stancl/tenancy, Filament) como peças que se encaixam sem te prender a decisões de infraestrutura antes da hora. O trabalho que sobra é o que realmente importa: a regra de negócio do seu produto.
Recomendação relacionada
O Programador Pragmático: De Aprendiz a Mestre
Um clássico atemporal sobre boas práticas de desenvolvimento de software, útil pra qualquer stack ou linguagem.
Ver na Amazon →Como Associado Amazon, Visão Binária pode ganhar uma comissão sobre compras qualificadas feitas através deste link, sem custo adicional pra você.