Case study · Stack

How Documenso built an open source DocuSign alternative

Documenso is an open source document signing platform that anyone can self-host or use as a cloud service. It runs on a TypeScript monorepo with React Router, Hono, tRPC, Prisma and PostgreSQL, and the team wrote its own PDF library to handle digital signatures.
Copy this stackdocumenso.com Open source e-signature · United States · founded 2023

Language

UI library

  • shadcn/uigithub.com

    Component library, built on Radix UI.

Full-stack framework

  • React Routerdocumenso.com

    Web app framework, version 7, after leaving Next.js.

    Why: Less magic than Next.js, with explicit routing and logic that is easy to follow.

Database

Payments

Email

Styling and UI kit

Build and runtime

  • Vitedocumenso.com

    Bundles the app and runs the dev server.

    Why: Development feels almost instant, and the plugin ecosystem leaves room to tune builds.

ORM

Data fetching

  • tRPCdocumenso.com

    Typed API between the front end and the server.

    Why: Server Actions were opaque and hard to track, so they moved those calls to tRPC.

  • Inngestgithub.com

    Runs background jobs through the app's /api/jobs route.

Backend framework

  • Honogithub.com

    HTTP server behind the app.

  • LibPDFdocumenso.com

    In-house TypeScript library that parses, edits and digitally signs PDFs.

    Why: No existing JavaScript library covered the full signing workflow, and the Rust signing code was costly to maintain.

Testing

Code quality

Analytics

  • Plausibledocumenso.com

    Website analytics, as listed in the privacy policy.

How they built it

Trust through open code

Documenso calls itself the open source DocuSign alternative, and the bet is that trust comes from code anyone can read and from the option to self-host. The code is AGPLv3.

The project ships official Docker images and supports Docker Compose, Railway, Render, Kubernetes and manual installs. Documents are stored in PostgreSQL by default, with S3-compatible storage as an option.

Sources:github.com docs.documenso.com

Leaving Next.js for React Router and Vite

The app started on Next.js, which the team called a no-brainer for server rendering, easy routing and its community. Over time, Server Actions became hard to debug, builds broke on async chunks, hot reload climbed to about 45 seconds and Turbopack kept failing for them.

In March 2025 they explained the move to React Router (the successor to Remix) with Vite. It was a straight lift and shift with no new features. They now use tRPC where Server Actions used to be.

Sources:documenso.com

Writing their own PDF library

Signing touches every part of a PDF's life, and no JavaScript library covered all of it. They used pdf.js for rendering, pdf-lib for editing and a separate Rust library with N-API bindings just for signatures, and kept patching the gaps.

In January 2026 they released LibPDF, a TypeScript library that parses, edits and signs PDFs. It replaced the old Rust signing code, and Documenso already runs it in production.

Sources:documenso.com

Monorepo tooling

The repo is an npm workspace driven by Turborepo. Biome handles linting and formatting, Playwright runs the end-to-end tests, Lingui handles translations and Inngest runs background jobs.

Sources:github.com github.com

Also detected on their website

Found on the homepage with the open Wappalyzer rules (HTML, scripts and headers). It shows what runs in the browser, not the whole backend.

  • Framer Sites
  • HSTS
  • HTTP/3
  • React