{"id":19051434,"url":"https://github.com/jdevalk/documenso","last_synced_at":"2025-11-11T18:03:45.726Z","repository":{"id":232493445,"uuid":"739004551","full_name":"jdevalk/documenso","owner":"jdevalk","description":null,"archived":false,"fork":false,"pushed_at":"2024-01-04T14:53:43.000Z","size":35391,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T00:41:23.410Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/jdevalk.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}},"created_at":"2024-01-04T14:53:37.000Z","updated_at":"2024-01-04T14:53:49.000Z","dependencies_parsed_at":"2024-04-10T02:48:17.264Z","dependency_job_id":null,"html_url":"https://github.com/jdevalk/documenso","commit_stats":null,"previous_names":["jdevalk/documenso"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jdevalk/documenso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevalk%2Fdocumenso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevalk%2Fdocumenso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevalk%2Fdocumenso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevalk%2Fdocumenso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdevalk","download_url":"https://codeload.github.com/jdevalk/documenso/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdevalk%2Fdocumenso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283900033,"owners_count":26913495,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-11T02:00:06.610Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-08T23:18:37.326Z","updated_at":"2025-11-11T18:03:45.703Z","avatar_url":"https://github.com/jdevalk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"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://github.com/documenso/documenso/milestones\"\u003eRoadmap\u003c/a\u003e\n    ·\n    \u003ca href=\"https://documen.so/launches\"\u003eUpcoming Launches\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\u003e\n  \u003cimg style=\"display: block; height: 120px; width: 24%\"\n    src=\"https://github.com/documenso/documenso/assets/1309312/67e08c98-c153-4115-aa2d-77979bb12c94)\"\u003e\n  \u003cimg style=\"display: block; height: 120px; width: 24%\"\n    src=\"https://github.com/documenso/documenso/assets/1309312/040cfbae-3438-4ca3-87f2-ce52c793dcaf\"\u003e\n  \u003cimg style=\"display: block; height: 120px; width: 24%\"\n    src=\"https://github.com/documenso/documenso/assets/1309312/72d445be-41e5-4936-bdba-87ef8e70fa09\"\u003e\n  \u003cimg style=\"display: block; height: 120px; width: 24%\"\n    src=\"https://github.com/documenso/documenso/assets/1309312/d7b86c0f-a755-4476-a022-a608db2c4633\"\u003e\n  \u003cimg style=\"display: block; height: 120px; width: 24%\"\n    src=https://github.com/documenso/documenso/assets/1309312/c0f55116-ab82-433f-a266-f3fc8571d69f\"\u003e\n\u003c/div\u003e\n\n## About this project\n\nSigning documents digitally should be fast and easy and should be the best practice for every document signed worldwide.\n\nThis 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.\n\nDocumenso 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\nWe're currently working on a redesign of the application, including a revamp of the codebase, so Documenso can be more intuitive to use and robust to develop upon.\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- [Typescript](https://www.typescriptlang.org/) - Language\n- [Next.js](https://nextjs.org/) - Framework\n- [Prisma](https://www.prisma.io/) - ORM\n- [Tailwind](https://tailwindcss.com/) - CSS\n- [shadcn/ui](https://ui.shadcn.com/) - Component Library\n- [NextAuth.js](https://next-auth.js.org/) - Authentication\n- [react-email](https://react.email/) - Email Templates\n- [tRPC](https://trpc.io/) - API\n- [Node SignPDF](https://github.com/vbuch/node-signpdf) - Digital Signature\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- [Vercel](https://vercel.com) - Hosting\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\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_URL\n   - NEXTAUTH_SECRET\n   - NEXT_PUBLIC_WEBAPP_URL\n   - NEXT_PUBLIC_MARKETING_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 dev` in the root directory to start\n\n7. 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\n🚧 Docker containers and images are current in progress. We are actively working on bringing a simple Docker build and publish pipeline for Documenso.\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\u003e Please note that the below deployment methods are for v0.9, we will update these to v1.0 once it has been released.\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_URL`\n* `NEXTAUTH_SECRET`\n* `NEXT_PUBLIC_WEBAPP_URL`\n* `NEXT_PUBLIC_MARKETING_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 both `NEXTAUTH_URL` and `NEXT_PUBLIC_WEBAPP_URL` variables!\n\nNow you can install the dependencies and build it:\n\n```\nnpm i\nnpm run build:web\nnpm run prisma:migrate-deploy\n```\n\nFinally, you can start it with:\n\n```\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/web` 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/web\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## 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 Next.js 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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdevalk%2Fdocumenso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdevalk%2Fdocumenso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdevalk%2Fdocumenso/lists"}