Estudo de caso · Stack

Como a Documenso construiu uma alternativa open source ao DocuSign

A Documenso é uma plataforma open source de assinatura de documentos que qualquer um pode hospedar por conta própria ou usar na nuvem. Roda num monorepo em TypeScript com React Router, Hono, tRPC, Prisma e PostgreSQL, e o time escreveu a própria biblioteca de PDF para cuidar das assinaturas digitais.
Copiar stackdocumenso.com Assinatura eletrônica open source · Estados Unidos · fundada em 2023

A stack da Documenso

Abrir no montador

Linguagem

Biblioteca de interface

  • shadcn/uigithub.com

    Biblioteca de componentes, feita sobre o Radix UI.

Framework full-stack

  • React Routerdocumenso.com

    Framework do app web, na versão 7, depois da saída do Next.js.

    Por quê: Tem menos mágica que o Next.js, com rotas explícitas e lógica fácil de seguir.

Banco de dados

Pagamentos

E-mail

Estilo e kit de interface

Build e runtime

  • Vitedocumenso.com

    Empacota o app e roda o servidor de desenvolvimento.

    Por quê: O desenvolvimento ficou quase instantâneo, e os plugins dão espaço para ajustar o build.

ORM

Busca de dados

  • tRPCdocumenso.com

    API tipada entre o front e o servidor.

    Por quê: As Server Actions eram opacas e difíceis de rastrear, então essas chamadas foram para o tRPC.

  • Inngestgithub.com

    Roda tarefas em segundo plano pela rota /api/jobs do app.

Framework de servidor

  • Honogithub.com

    Servidor HTTP por trás do app.

  • LibPDFdocumenso.com

    Biblioteca própria em TypeScript que lê, edita e assina PDFs digitalmente.

    Por quê: Nenhuma biblioteca em JavaScript cobria todo o fluxo de assinatura, e o código em Rust dava trabalho demais para manter.

Testes

Qualidade do código

Análise de uso

  • Plausibledocumenso.com

    Análise de visitas do site, como consta na política de privacidade.

Como montaram

Confiança pelo código aberto

A Documenso se apresenta como a alternativa open source ao DocuSign, e a aposta é que a confiança vem do código que qualquer um pode ler e da opção de hospedar por conta própria. A licença é AGPLv3.

O projeto publica imagens oficiais de Docker e aceita Docker Compose, Railway, Render, Kubernetes e instalação manual. Os documentos ficam no PostgreSQL por padrão, com armazenamento compatível com S3 como opção.

Fontes:github.com docs.documenso.com

Saindo do Next.js para React Router e Vite

O app começou em Next.js, que o time chamou de escolha óbvia pela renderização no servidor, pelas rotas fáceis e pela comunidade. Com o tempo, as Server Actions ficaram difíceis de depurar, o build quebrava por causa de chunks assíncronos, o hot reload chegou a uns 45 segundos e o Turbopack falhava sempre.

Em março de 2025 eles contaram a troca para React Router (o sucessor do Remix) com Vite. Foi uma mudança direta, sem nenhuma funcionalidade nova. No lugar das Server Actions agora entra o tRPC.

Fontes:documenso.com

Uma biblioteca de PDF própria

Assinar mexe em todas as etapas de um PDF, e nenhuma biblioteca em JavaScript dava conta de tudo. Eles usavam o pdf.js para exibir, o pdf-lib para editar e uma biblioteca em Rust com bindings N-API só para as assinaturas, sempre remendando os buracos.

Em janeiro de 2026 lançaram a LibPDF, uma biblioteca em TypeScript que lê, edita e assina PDFs. Ela substituiu o código antigo de assinatura em Rust e já roda em produção na Documenso.

Fontes:documenso.com

Ferramentas do monorepo

O repositório é um workspace do npm comandado pelo Turborepo. O Biome cuida de lint e formatação, o Playwright roda os testes de ponta a ponta, o Lingui cuida das traduções e o Inngest roda as tarefas em segundo plano.

Fontes:github.com github.com

Também detectado no site

Achado na página inicial com as regras abertas do Wappalyzer (HTML, scripts e cabeçalhos). Mostra o que roda no navegador, não o backend inteiro.

  • Framer Sites
  • HSTS
  • HTTP/3
  • React