{"id":13469473,"url":"https://github.com/documenso/documenso","last_synced_at":"2026-03-10T12:03:23.727Z","repository":{"id":143512055,"uuid":"613010835","full_name":"documenso/documenso","owner":"documenso","description":"The Open Source DocuSign Alternative.","archived":false,"fork":false,"pushed_at":"2026-03-07T16:05:07.000Z","size":244835,"stargazers_count":12475,"open_issues_count":250,"forks_count":2397,"subscribers_count":39,"default_branch":"main","last_synced_at":"2026-03-07T17:27:24.880Z","etag":null,"topics":["digital-signature","document-signing","docusign-alternative","e-signature","esign","esignature","next-auth","nextjs","open-source","pades-standard","pdf","pdf-sign","pdf-signature","postgresql","prisma","self-hosted","signing","typescript"],"latest_commit_sha":null,"homepage":"https://documenso.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/documenso.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":"CLA.md"}},"created_at":"2023-03-12T16:28:56.000Z","updated_at":"2026-03-07T04:34:10.000Z","dependencies_parsed_at":"2023-10-17T08:37:41.604Z","dependency_job_id":"778b727c-a7fe-439c-b9b7-817d55b39e04","html_url":"https://github.com/documenso/documenso","commit_stats":{"total_commits":2474,"total_committers":126,"mean_commits":"19.634920634920636","dds":0.6592562651576395,"last_synced_commit":"c99cf4b8487b0c2289c2c2088b0075d677b15202"},"previous_names":[],"tags_count":211,"template":false,"template_full_name":null,"purl":"pkg:github/documenso/documenso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/documenso%2Fdocumenso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/documenso%2Fdocumenso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/documenso%2Fdocumenso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/documenso%2Fdocumenso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/documenso","download_url":"https://codeload.github.com/documenso/documenso/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/documenso%2Fdocumenso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30332869,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["digital-signature","document-signing","docusign-alternative","e-signature","esign","esignature","next-auth","nextjs","open-source","pades-standard","pdf","pdf-sign","pdf-signature","postgresql","prisma","self-hosted","signing","typescript"],"created_at":"2024-07-31T15:01:41.413Z","updated_at":"2026-03-10T12:03:23.709Z","avatar_url":"https://github.com/documenso.png","language":"TypeScript","readme":"\u003cimg src=\"https://github.com/documenso/documenso/assets/13398220/a643571f-0239-46a6-a73e-6bef38d1228b\" alt=\"Documenso Logo\"\u003e\n\n\u003cp align=\"center\" style=\"margin-top: 20px\"\u003e\n  \u003cp align=\"center\"\u003e\n  The Open Source DocuSign Alternative.\n  \u003cbr\u003e\n    \u003ca href=\"https://documenso.com\"\u003e\u003cstrong\u003eLearn more »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://documen.so/discord\"\u003eDiscord\u003c/a\u003e\n    ·\n    \u003ca href=\"https://documenso.com\"\u003eWebsite\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/documenso/documenso/issues\"\u003eIssues\u003c/a\u003e\n    ·\n    \u003ca href=\"https://documen.so/live\"\u003eUpcoming Releases\u003c/a\u003e\n    ·\n    \u003ca href=\"https://documen.so/roadmap\"\u003eRoadmap\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://documen.so/discord\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-documen.so/discord-%235865F2\" alt=\"Join Documenso on Discord\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/documenso/documenso/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/documenso/documenso\" alt=\"Github Stars\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/documenso/documenso/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-AGPLv3-purple\" alt=\"License\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/documenso/documenso/pulse\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/documenso/documenso\" alt=\"Commits-per-month\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/documenso/documenso\"\u003e\n   \u003cimg alt=\"open in devcontainer\" src=\"https://img.shields.io/static/v1?label=Dev%20Containers\u0026message=Enabled\u0026color=blue\u0026logo=visualstudiocode\" /\u003e\n   \u003c/a\u003e\n   \u003ca href=\"CODE_OF_CONDUCT.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg\" alt=\"Contributor Covenant\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/documenso/documenso/assets/13398220/d96ed533-6f34-4a97-be9b-442bdb189c69\" style=\"width: 80%;\" /\u003e\n\u003c/div\u003e\n\n## About Documenso\n\nSigning documents digitally should be fast and easy and should be the best practice for every document signed worldwide. This is technically quite easy today, but it also introduces a new party to every signature: The signing tool providers. While this is not a problem in itself, it should make us think about how we want these providers of trust to work. Documenso aims to be the world's most trusted document-signing tool. This trust is built by empowering you to self-host Documenso and review how it works under the hood.\n\nJoin us in creating the next generation of open trust infrastructure.\n\n## Recognition\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.producthunt.com/posts/documenso?utm_source=badge-top-post-badge\u0026utm_medium=badge\u0026utm_souce=badge-documenso\" target=\"_blank\"\u003e\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=395047\u0026theme=light\u0026period=daily\" alt=\"Documenso - The\u0026#0032;open\u0026#0032;source\u0026#0032;DocuSign\u0026#0032;alternative | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.producthunt.com/posts/documenso?utm_source=badge-featured\u0026utm_medium=badge\u0026utm_souce=badge-documenso\" target=\"_blank\"\u003e\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=395047\u0026theme=light\" alt=\"Documenso - The\u0026#0032;Open\u0026#0032;Source\u0026#0032;DocuSign\u0026#0032;Alternative\u0026#0046; | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Community and Next Steps 🎯\n\n- Check out the first source code release in this repository and test it.\n- Tell us what you think in the [Discussions](https://github.com/documenso/documenso/discussions).\n- Join the [Discord server](https://documen.so/discord) for any questions and getting to know to other community members.\n- ⭐ the repository to help us raise awareness.\n- Spread the word on Twitter that Documenso is working towards a more open signing tool.\n- Fix or create [issues](https://github.com/documenso/documenso/issues), that are needed for the first production release.\n\n## Contributing\n\n- To contribute, please see our [contribution guide](https://github.com/documenso/documenso/blob/main/CONTRIBUTING.md).\n\n## Contact us\n\nContact us if you are interested in our Enterprise plan for large organizations that need extra flexibility and control.\n\n\u003ca href=\"https://cal.com/timurercan/enterprise-customers?utm_source=banner\u0026utm_campaign=oss\"\u003e\u003cimg alt=\"Book us with Cal.com\" src=\"https://cal.com/book-with-cal-dark.svg\" /\u003e\u003c/a\u003e\n\n## Tech Stack\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://www.typescriptlang.org\"\u003e\u003cimg src=\"https://shields.io/badge/TypeScript-3178C6?logo=TypeScript\u0026logoColor=FFF\u0026style=flat-square\" alt=\"TypeScript\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://prisma.io\"\u003e\u003cimg width=\"122\" height=\"20\" src=\"http://made-with.prisma.io/indigo.svg\" alt=\"Made with Prisma\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://tailwindcss.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/tailwindcss-0F172A?\u0026logo=tailwindcss\" alt=\"Tailwind CSS\"\u003e\u003c/a\u003e\n  \u003ca href=\"\"\u003e\u003cimg src=\"\" alt=\"\"\u003e\u003c/a\u003e\n  \u003ca href=\"\"\u003e\u003cimg src=\"\" alt=\"\"\u003e\u003c/a\u003e\n  \u003ca href=\"\"\u003e\u003cimg src=\"\" alt=\"\"\u003e\u003c/a\u003e\n  \u003ca href=\"\"\u003e\u003cimg src=\"\" alt=\"\"\u003e\u003c/a\u003e\n  \u003ca href=\"\"\u003e\u003cimg src=\"\" alt=\"\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n- [Typescript](https://www.typescriptlang.org/) - Language\n- [ReactRouter](https://reactrouter.com/) - Framework\n- [Prisma](https://www.prisma.io/) - ORM\n- [Tailwind](https://tailwindcss.com/) - CSS\n- [shadcn/ui](https://ui.shadcn.com/) - Component Library\n- [react-email](https://react.email/) - Email Templates\n- [tRPC](https://trpc.io/) - API\n- [@documenso/pdf-sign](https://www.npmjs.com/package/@documenso/pdf-sign) - PDF Signatures (launching soon)\n- [React-PDF](https://github.com/wojtekmaj/react-pdf) - Viewing PDFs\n- [PDF-Lib](https://github.com/Hopding/pdf-lib) - PDF manipulation\n- [Stripe](https://stripe.com/) - Payments\n\n\u003c!-- - Support for [opensignpdf (requires Java on server)](https://github.com/open-pdf-sign) is currently planned. --\u003e\n\n## Local Development\n\n### Requirements\n\nTo run Documenso locally, you will need\n\n- Node.js (v22 or above)\n- Postgres SQL Database\n- Docker (optional)\n\n### Developer Quickstart\n\n\u003e **Note**: This is a quickstart for developers. It assumes that you have both [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/) installed on your machine.\n\nWant to get up and running quickly? Follow these steps:\n\n1. [Fork this repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.\n\nAfter forking the repository, clone it to your local device by using the following command:\n\n```sh\ngit clone https://github.com/\u003cyour-username\u003e/documenso\n```\n\n2. Set up your `.env` file using the recommendations in the `.env.example` file. Alternatively, just run `cp .env.example .env` to get started with our handpicked defaults.\n\n3. Run `npm run dx` in the root directory\n\n   - This will spin up a postgres database and inbucket mailserver in a docker container.\n\n4. Run `npm run dev` in the root directory\n\n5. Want it even faster? Just use\n\n```sh\nnpm run d\n```\n\n#### Access Points for Your Application\n\n1. **App** - http://localhost:3000\n2. **Incoming Mail Access** - http://localhost:9000\n3. **Database Connection Details**\n\n   - **Port**: 54320\n   - **Connection**: Use your favorite database client to connect using the provided port.\n\n4. **S3 Storage Dashboard** - http://localhost:9001\n\n## Developer Setup\n\n### Manual Setup\n\nFollow these steps to setup Documenso on your local machine:\n\n1. [Fork this repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.\n\nAfter forking the repository, clone it to your local device by using the following command:\n\n```sh\ngit clone https://github.com/\u003cyour-username\u003e/documenso\n```\n\n2. Run `npm i` in the root directory\n\n3. Create your `.env` from the `.env.example`. You can use `cp .env.example .env` to get started with our handpicked defaults.\n\n4. Set the following environment variables:\n\n   - NEXTAUTH_SECRET\n   - NEXT_PUBLIC_WEBAPP_URL\n   - NEXT_PRIVATE_DATABASE_URL\n   - NEXT_PRIVATE_DIRECT_DATABASE_URL\n   - NEXT_PRIVATE_SMTP_FROM_NAME\n   - NEXT_PRIVATE_SMTP_FROM_ADDRESS\n\n5. Create the database schema by running `npm run prisma:migrate-dev`\n\n6. Run `npm run translate:compile` in the root directory to compile lingui\n\n7. Run `npm run dev` in the root directory to start\n\n8. Register a new user at http://localhost:3000/signup\n\n---\n\n- Optional: Seed the database using `npm run prisma:seed -w @documenso/prisma` to create a test user and document.\n- Optional: Create your own signing certificate.\n  - To generate your own using these steps and a Linux Terminal or Windows Subsystem for Linux (WSL), see **[Create your own signing certificate](./SIGNING.md)**.\n\n### Run in Gitpod\n\n- Click below to launch a ready-to-use Gitpod workspace in your browser.\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/documenso/documenso)\n\n### Run in DevContainer\n\nWe support DevContainers for VSCode. [Click here to get started.](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/documenso/documenso)\n\n### Video walkthrough\n\nIf you're a visual learner and prefer to watch a video walkthrough of setting up Documenso locally, check out this video:\n\n[![Watch the video](https://img.youtube.com/vi/Y0ppIQrEnZs/hqdefault.jpg)](https://youtu.be/Y0ppIQrEnZs)\n\n## Docker\n\nWe provide a Docker container for Documenso, which is published on both DockerHub and GitHub Container Registry.\n\n- DockerHub: [https://hub.docker.com/r/documenso/documenso](https://hub.docker.com/r/documenso/documenso)\n- GitHub Container Registry: [https://ghcr.io/documenso/documenso](https://ghcr.io/documenso/documenso)\n\nYou can pull the Docker image from either of these registries and run it with your preferred container hosting provider.\n\nPlease note that you will need to provide environment variables for connecting to the database, mailserver, and so forth.\n\nFor detailed instructions on how to configure and run the Docker container, please refer to the [Docker README](./docker/README.md) in the `docker` directory.\n\n## Self Hosting\n\nWe support a variety of deployment methods, and are actively working on adding more. Stay tuned for updates!\n\n### Fetch, configure, and build\n\nFirst, clone the code from Github:\n\n```\ngit clone https://github.com/documenso/documenso.git\n```\n\nThen, inside the `documenso` folder, copy the example env file:\n\n```\ncp .env.example .env\n```\n\nThe following environment variables must be set:\n\n- `NEXTAUTH_SECRET`\n- `NEXT_PUBLIC_WEBAPP_URL`\n- `NEXT_PRIVATE_DATABASE_URL`\n- `NEXT_PRIVATE_DIRECT_DATABASE_URL`\n- `NEXT_PRIVATE_SMTP_FROM_NAME`\n- `NEXT_PRIVATE_SMTP_FROM_ADDRESS`\n\n\u003e If you are using a reverse proxy in front of Documenso, don't forget to provide the public URL for the `NEXT_PUBLIC_WEBAPP_URL` variable!\n\nNow you can install the dependencies and build it:\n\n```\nnpm i\nnpm run build\nnpm run prisma:migrate-deploy\n```\n\nFinally, you can start it with:\n\n```\ncd apps/remix\nnpm run start\n```\n\nThis will start the server on `localhost:3000`. For now, any reverse proxy can then do the frontend and SSL termination.\n\n\u003e If you want to run with another port than 3000, you can start the application with `next -p \u003cANY PORT\u003e` from the `apps/remix` folder.\n\n### Run as a service\n\nYou can use a systemd service file to run the app. Here is a simple example of the service running on port 3500 (using 3000 by default):\n\n```bash\n[Unit]\nDescription=documenso\nAfter=network.target\n\n[Service]\nEnvironment=PATH=/path/to/your/node/binaries\nType=simple\nUser=www-data\nWorkingDirectory=/var/www/documenso/apps/remix\nExecStart=/usr/bin/next start -p 3500\nTimeoutSec=15\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n```\n\n### Railway\n\n[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/bG6D4p)\n\n### Render\n\n[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/documenso/documenso)\n\n### Koyeb\n\n[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?type=git\u0026repository=github.com/documenso/documenso\u0026branch=main\u0026name=documenso-app\u0026builder=dockerfile\u0026dockerfile=/docker/Dockerfile)\n\n## Elestio\n\n[![Deploy on Elestio](https://elest.io/images/logos/deploy-to-elestio-btn.png)](https://elest.io/open-source/documenso)\n\n## Troubleshooting\n\n### I'm not receiving any emails when using the developer quickstart.\n\nWhen using the developer quickstart, an [Inbucket](https://inbucket.org/) server will be spun up in a docker container that will store all outgoing emails locally for you to view.\n\nThe Web UI can be found at http://localhost:9000, while the SMTP port will be on localhost:2500.\n\n### Support IPv6\n\nIf you are deploying to a cluster that uses only IPv6, You can use a custom command to pass a parameter to the Remix start command\n\nFor local docker run\n\n```bash\ndocker run -it documenso:latest npm run start -- -H ::\n```\n\nFor k8s or docker-compose\n\n```yaml\ncontainers:\n  - name: documenso\n    image: documenso:latest\n    imagePullPolicy: IfNotPresent\n    command:\n      - npm\n    args:\n      - run\n      - start\n      - --\n      - -H\n      - '::'\n```\n\n### I can't see environment variables in my package scripts.\n\nWrap your package script with the `with:env` script like such:\n\n```\nnpm run with:env -- npm run myscript\n```\n\nThe same can be done when using `npx` for one of the bin scripts:\n\n```\nnpm run with:env -- npx myscript\n```\n\nThis will load environment variables from your `.env` and `.env.local` files.\n\n## Repo Activity\n\n![Repository Activity](https://repobeats.axiom.co/api/embed/622a2e9aa709696f7226304b5b7178a5741b3868.svg)\n","funding_links":[],"categories":["TypeScript","Enterprise Products","Documentation \u0026 Tutorial Platforms","Table of Contents","Productivity","Document Signatures","Projects Using CodeRabbit","🛠 Part I: The Open SaaS Stack","Document Signing"],"sub_categories":["Document Modifier","Other","Enterprise Configuration Example","Finance \u0026 Legal"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdocumenso%2Fdocumenso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdocumenso%2Fdocumenso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdocumenso%2Fdocumenso/lists"}