- Flowglad é uma plataforma open source de processamento de pagamentos que funciona sem webhooks, com uma estrutura que permite aos desenvolvedores integrar cobrança e pagamentos com o mínimo de código
- Por meio de uma arquitetura stateless, é possível consultar o status de pagamento usando os próprios IDs de usuário, sem gerenciar uma tabela
subscriptions ou customer_id
- Oferece um SDK full-stack: no backend,
flowgladServer.getBilling(); no frontend, o hook useBilling() reflete o status do cliente em tempo real
- É possível testar modelos de preço no modo de teste e aplicá-los em produção com um clique, além de mudar planos sem redeploy do app
- Reduz a complexidade e o custo da integração de pagamentos, melhorando a experiência do desenvolvedor (DX) e oferecendo uma base para expandir conexões com vários provedores de pagamento por meio de uma única integração
Principais recursos
- Estrutura stateless, que elimina a necessidade de webhooks, tabela de assinaturas, ID de cliente e gerenciamento de variáveis de ambiente
- O próprio Flowglad lida diretamente com preços e mapeamento de funcionalidades, sem necessidade de manutenção manual
- Como fonte única da verdade (Single Source of Truth), permite consultar o estado mais recente de cobrança do cliente, permissões de acesso a funcionalidades e créditos de uso
- Suporta acesso baseado em IDs personalizados, permitindo consultar o status do cliente com IDs de usuário ou organização do sistema de autenticação já existente
- Fornece um SDK full-stack
- No backend, chamada de
flowgladServer.getBilling()
- No frontend em React, o hook
useBilling() reflete o status de pagamento em tempo real
- Gerenciamento flexível de modelos de preço
- Teste novos planos no modo de teste e aplique em produção com um clique
- Altere planos sem redeploy do app
Instalação e integração
- Instale os pacotes
@flowglad/nextjs, @flowglad/react, @flowglad/express e @flowglad/server de acordo com o tipo de projeto
- Exemplo de integração com Next.js
- Crie uma instância de
FlowgladServer e passe seu próprio ID de cliente
- Use
nextRouteHandler em rotas de API para se comunicar com o Flowglad com segurança
- Adicione
FlowgladProvider ao layout raiz para carregar automaticamente o status de pagamento no frontend
- Em B2C, use
user.id; em B2B, use organization.id ou team.id como ID do cliente
- O Flowglad não exige gerenciamento separado de IDs de cliente nem mudanças no sistema de autenticação
Exemplo de frontend
- Use o hook
useBilling() para verificar acesso a funcionalidades (checkFeatureAccess) e uso (checkUsageBalance)
- Exiba uma mensagem sugerindo upgrade quando o acesso a uma funcionalidade estiver restrito
- Quando o uso disponível for insuficiente, crie uma sessão de pagamento com
createCheckoutSession
Exemplo de backend
- Use
flowglad(user.id).getBilling() para verificar no servidor o acesso a funcionalidades e o uso
- Ex.: verificar se há acesso à funcionalidade
fast_generations antes de seguir com o processamento
- Ex.: gerar erro quando faltarem créditos de uso para
chat_messages
Como começar
- Crie um modelo de preço usando um template no dashboard
- Tipos de template disponíveis
- Híbrido de limite de uso + assinatura (semelhante ao Cursor)
- Uso ilimitado (modelo consumidor estilo ChatGPT)
- Acesso em camadas + créditos de uso (semelhante ao Midjourney)
- Assinatura com bloqueio de funcionalidades (semelhante ao Linear)
- Se necessário, também é possível criar um modelo manualmente sem template
Stack técnica
- Baseado em Next.js, tRPC, React.js, Tailwind CSS, Drizzle ORM, Zod, Trigger.dev, Supabase e Better Auth
Objetivo do projeto
- Nos últimos 15 anos, a stack de desenvolvimento se diversificou, mas quase não houve inovação na área de pagamentos
- A maioria dos serviços de pagamento exige até mesmo passar pela equipe comercial para configurar uma conta, e há poucas opções de pagamento self-service
- Como resultado, a melhoria da experiência do desenvolvedor (DX) e dos custos relacionados a pagamentos ficou estagnada
- O Flowglad busca minimizar o tempo de integração e manutenção de pagamentos, além de permitir o uso de vários provedores por meio de uma única integração
- Em um ambiente de cobrança para startups cada vez mais complexo com a expansão da IA, o objetivo é construir uma camada de pagamentos amigável para desenvolvedores
1 comentários
Comentários do Hacker News
Não entendo muito bem por que isso é chamado de A) "payment processor"
Parece estranho chamar assim algo que não processa pagamentos diretamente
E também B) dizem que é "open source", mas parece que tudo roda via SaaS e os dados ficam armazenados no banco de dados deles
Entendo a preocupação e a tentativa de criar um sistema flexível com feature gates, créditos de uso e esquemas de cobrança, mas não sinto que entregue na prática tudo o que o título promete
Sobre open source, a parte de SaaS está em AGPLv3 e o restante em licença MIT
Quanto ao termo "processor", queríamos deixar claro que isso inclui o processamento de pagamentos, e não é apenas um SaaS de cobrança, mesmo que processemos pagamentos via Stripe Connect
Por exemplo, nós nos preocupamos com problemas de chargeback junto com a loja. Diferentemente de um SaaS que só usa uma chave da Stripe, na nossa estrutura chargeback também vira um problema direto para nós, como acontece com a Stripe
É verdade que esse produto deixa algumas coisas fáceis, mas não sei se ele é de fato melhor
Se a estrutura exige enviar uma requisição de API para os servidores do Flowglad sempre que eu quiser verificar algo como o status de assinatura de um cliente, isso pode prejudicar a responsividade
Dá para fazer cache dos dados acessados com frequência, mas aí essa camada perde parte do sentido
Integrar com a Stripe é chato, mas se você não vai armazenar nada localmente, acho melhor usar a API da Stripe direto
Para mim foi muito mais confortável manter o estado em cache no banco de dados — até porque dá para fazer consultas complexas na hora
Nessa estrutura, você precisa torcer para que o Flowglad forneça a API necessária; caso contrário, pode acabar tendo que fazer uma chamada de API por cliente
Planejamos permitir que a loja armazene mais dados do seu lado, enquanto ainda aproveita nosso modelo de dados refinado e a usabilidade do SDK
Mesmo usando a API da Stripe diretamente, você ainda precisa gerenciar por conta própria os mapeamentos de price id, plan, feature e customer id, e queremos eliminar esse trabalho repetitivo
A Stripe é um sistema orientado à escrita, então eles não recomendam usá-la como camada de leitura em tempo real (documentação de rate limits da Stripe)
Nosso objetivo é dar aos desenvolvedores uma experiência unificada de pagamentos + movimentação de valor, como o Shopify fez para marcas DTC
No começo eu tinha entendido errado, mas parece que só o SDK e o código são open source, e os dados reais de cobrança são enviados para os servidores do Flowglad, então você não é realmente dono dos seus dados
Parabéns pelo lançamento da beta!
Eu também passei por um problema parecido, então criei uma biblioteca de integração com Stripe com uma DX semelhante à do Flowgrad (embora com menos recursos)
Também tenho um post no blog sobre por que a construí
A principal diferença é onde as informações finais de cobrança são armazenadas — nós fornecemos juntos o esquema do banco de dados e os handlers de webhook para registrar tudo no banco local
Caso ajude, também recomendo a biblioteca open source MIT que criamos
Parabéns pelo lançamento da beta, parece um produto impressionante e estou considerando integrar
Mas fiquei curioso: por que exigir uma dependência de React?
Não havia um jeito de implementar a UI desejada sem React?
Somos baseados em Svelte, então é inconveniente ter que puxar React por causa desse tipo de biblioteca
Começamos com React porque era o que conhecíamos melhor e onde estava a nossa comunidade
Não temos apego a React, e o suporte a Svelte e Vue deve chegar em breve
Quando o modelo de dados e os fluxos estiverem estáveis, pretendemos portar o SDK para outros frameworks
A base de usuários de React é de 10 a 50 vezes maior, então é difícil evitar esse incômodo
Mas React não é um framework, e sim uma camada de renderização de componentes, então se for uma biblioteca externa bem encapsulada, ela pode ser usada dentro de Svelte sem problemas
O design da landing page ficou realmente lindo
Não queria soar negativo, só fiquei decepcionado por ter sido construído em cima da Stripe
Isso porque passamos o último ano desenvolvendo o motor de cobrança, o modelo de dados e o SDK
O motivo de webhook ser popular é que ele é simples, confiável e funciona bem
Mas, ao usar isso, talvez você precise montar uma infraestrutura separada para acompanhar uso, nível de assinatura, cancelamentos etc.
Em um mundo ideal, quando o dinheiro se move, os recursos aos quais o cliente pode acessar deveriam ser definidos automaticamente com base nisso
Shopify é um exemplo assim — há webhooks, mas eles não são o principal ponto de integração
O webhook de pagamento foi originalmente uma solução improvisada para contornar um problema complexo de modelagem de domínio
Já existe um projeto chamado GNU Taler, e é um sistema feito por especialistas de verdade
https://www.taler.net/en/
Ele se destaca por ser um pagamento online focado em privacidade, sem necessidade de cadastro, com prevenção a fraude, possibilidade de operar sua própria infraestrutura e por ser software livre
Fiquei curioso sobre como isso funciona em relação à conta bancária da loja
É preciso algo além deste repositório?
No momento, configuramos as contas das lojas via Stripe Connect
Se a empresa estiver em um país onde a Stripe dá suporte a pagamentos para lojistas, ela pode usar imediatamente
No longo prazo, planejamos nos integrar mais profundamente à parte de pagamentos
Estruturalmente, é parecido com outros serviços de gateway, mas como há uma taxa intermediária extra, o custo por transação pode ficar mais alto
Disseram que os eventos de webhook da Stripe são mais de 250 e por isso complexos, mas não é preciso ouvir todos eles
Por exemplo, é preciso pensar em como tratar
charge.succeeded,payment_intent.succeededecustomer.subscription.created, e como evitar duplicações entre elesÉ preciso muito conhecimento detalhado para integrar a Stripe corretamente
Há 10 anos eu integrava em 20 minutos, mas recentemente levei um dia inteiro