Git Product home page Git Product logo

documenso's Introduction

Documenso Logo

The Open Source DocuSign Alternative.
Learn more »

Discord · Website · Issues · Upcoming Releases · Roadmap

Join Documenso on Discord Github Stars License Commits-per-month open in devcontainer Contributor Covenant

About this project

Signing 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.

Join us in creating the next generation of open trust infrastructure.

Recognition

Documenso - The open source DocuSign alternative | Product Hunt Documenso - The Open Source DocuSign Alternative. | Product Hunt

Community and Next Steps 🎯

We'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.

  • Check out the first source code release in this repository and test it.
  • Tell us what you think in the Discussions.
  • Join the Discord server for any questions and getting to know to other community members.
  • ⭐ the repository to help us raise awareness.
  • Spread the word on Twitter that Documenso is working towards a more open signing tool.
  • Fix or create issues, that are needed for the first production release.

Contributing

Contact us

Contact us if you are interested in our Enterprise plan for large organizations that need extra flexibility and control.

Book us with Cal.com

Tech Stack

Local Development

Requirements

To run Documenso locally, you will need

  • Node.js (v18 or above)
  • Postgres SQL Database
  • Docker (optional)

Developer Quickstart

Note: This is a quickstart for developers. It assumes that you have both docker and docker-compose installed on your machine.

Want to get up and running quickly? Follow these steps:

  1. Fork this repository to your GitHub account.

After forking the repository, clone it to your local device by using the following command:

git clone https://github.com/<your-username>/documenso
  1. 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.

  2. Run npm run dx in the root directory

    • This will spin up a postgres database and inbucket mailserver in a docker container.
  3. Run npm run dev in the root directory

  4. Want it even faster? Just use

npm run d

Access Points for Your Application

  1. App - http://localhost:3000

  2. Incoming Mail Access - http://localhost:9000

  3. Database Connection Details

    • Port: 54320
    • Connection: Use your favorite database client to connect using the provided port.
  4. S3 Storage Dashboard - http://localhost:9001

Developer Setup

Manual Setup

Follow these steps to setup Documenso on your local machine:

  1. Fork this repository to your GitHub account.

After forking the repository, clone it to your local device by using the following command:

git clone https://github.com/<your-username>/documenso
  1. Run npm i in the root directory

  2. Create your .env from the .env.example. You can use cp .env.example .env to get started with our handpicked defaults.

  3. Set the following environment variables:

    • NEXTAUTH_URL
    • NEXTAUTH_SECRET
    • NEXT_PUBLIC_WEBAPP_URL
    • NEXT_PUBLIC_MARKETING_URL
    • NEXT_PRIVATE_DATABASE_URL
    • NEXT_PRIVATE_DIRECT_DATABASE_URL
    • NEXT_PRIVATE_SMTP_FROM_NAME
    • NEXT_PRIVATE_SMTP_FROM_ADDRESS
  4. Create the database schema by running npm run prisma:migrate-dev

  5. Run npm run dev in the root directory to start

  6. Register a new user at http://localhost:3000/signup


  • Optional: Seed the database using npm run prisma:seed -w @documenso/prisma to create a test user and document.
  • Optional: Create your own signing certificate.

Run in Gitpod

  • Click below to launch a ready-to-use Gitpod workspace in your browser.

Open in Gitpod

Run in DevContainer

We support DevContainers for VSCode. Click here to get started.

Video walkthrough

If you're a visual learner and prefer to watch a video walkthrough of setting up Documenso locally, check out this video:

Watch the video

Docker

We provide a Docker container for Documenso, which is published on both DockerHub and GitHub Container Registry.

You can pull the Docker image from either of these registries and run it with your preferred container hosting provider.

Please note that you will need to provide environment variables for connecting to the database, mailserver, and so forth.

For detailed instructions on how to configure and run the Docker container, please refer to the Docker README in the docker directory.

Self Hosting

We support a variety of deployment methods, and are actively working on adding more. Stay tuned for updates!

Please note that the below deployment methods are for v0.9, we will update these to v1.0 once it has been released.

Fetch, configure, and build

First, clone the code from Github:

git clone https://github.com/documenso/documenso.git

Then, inside the documenso folder, copy the example env file:

cp .env.example .env

The following environment variables must be set:

  • NEXTAUTH_URL
  • NEXTAUTH_SECRET
  • NEXT_PUBLIC_WEBAPP_URL
  • NEXT_PUBLIC_MARKETING_URL
  • NEXT_PRIVATE_DATABASE_URL
  • NEXT_PRIVATE_DIRECT_DATABASE_URL
  • NEXT_PRIVATE_SMTP_FROM_NAME
  • NEXT_PRIVATE_SMTP_FROM_ADDRESS

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!

Now you can install the dependencies and build it:

npm i
npm run build:web
npm run prisma:migrate-deploy

Finally, you can start it with:

npm run start

This will start the server on localhost:3000. For now, any reverse proxy can then do the frontend and SSL termination.

If you want to run with another port than 3000, you can start the application with next -p <ANY PORT> from the apps/web folder.

Run as a service

You 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):

[Unit]
Description=documenso
After=network.target

[Service]
Environment=PATH=/path/to/your/node/binaries
Type=simple
User=www-data
WorkingDirectory=/var/www/documenso/apps/web
ExecStart=/usr/bin/next start -p 3500
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Railway

Deploy on Railway

Render

Deploy to Render

Koyeb

Deploy to Koyeb

Troubleshooting

I'm not receiving any emails when using the developer quickstart.

When using the developer quickstart, an Inbucket server will be spun up in a docker container that will store all outgoing emails locally for you to view.

The Web UI can be found at http://localhost:9000, while the SMTP port will be on localhost:2500.

Support IPv6

If 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

For local docker run

docker run -it documenso:latest npm run start -- -H ::

For k8s or docker-compose

containers:
  - name: documenso
    image: documenso:latest
    imagePullPolicy: IfNotPresent
    command:
      - npm
    args:
      - run
      - start
      - --
      - -H
      - '::'

I can't see environment variables in my package scripts.

Wrap your package script with the with:env script like such:

npm run with:env -- npm run myscript

The same can be done when using npx for one of the bin scripts:

npm run with:env -- npx myscript

This will load environment variables from your .env and .env.local files.

Repo Activity

Repository Activity

documenso's People

Contributors

18feb06 avatar abhinav-developer-23 avatar adithyaakrishna avatar adityadeshlahre avatar anikdhabal avatar ashrafchowdury avatar captain-akshay avatar catalinpit avatar dguyen avatar doug-andrade avatar eltimuro avatar ephraimduncan avatar esther-lita avatar fmerian avatar g3root avatar gautam-hegde avatar hallidayo avatar harkiratsm avatar jwthanh avatar mikezzb avatar mythie avatar notnavindu avatar nsylke avatar plxity avatar premiare avatar rishi-raj-jain avatar rohit-saluja avatar sadamhussain-m avatar sumitbishti avatar the-robin-hood avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

documenso's Issues

Hide Resend Button until Document is sent

The resend button on the reciepents page is disabled until the document is sent to the recipient.

Screenshot 2023-05-05 at 13 36 37

In my opinion, the resend button does not provide any significant functionality until the document is sent and only serves to clutter the interface.

I propose that we remove the button until the document is sent simplify the interface.

Cannot sign pdf with `’` in filename.

PDF files containing in their filenames throws an error when the user is about to sign.

To Reproduce

  • Take any pdf file and rename it but include an in the name.
  • Send the pdf to a user and try signing
  • The /documents/[id]/sign page will be stuck on the loading skeleton with the error displayed on the terminal

Error

TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Content-Disposition"]
    at ServerResponse.setHeader (node:_http_outgoing:666:3)
    at _res.setHeader (/Users/duncan/documenso/node_modules/next/dist/server/base-server.js:129:24)
    at getHandler (webpack-internal:///(api)/./pages/api/documents/[id].ts:79:7)
    at async eval (webpack-internal:///(api)/../../packages/lib/server/defaultResponder.ts:12:22)
    at async eval (webpack-internal:///(api)/../../packages/lib/server/defaultHandler.ts:16:5)
    at async Object.apiResolver (/Users/duncan/documenso/node_modules/next/dist/server/api-utils/node.js:367:9)
    at async DevServer.runApi (/Users/duncan/documenso/node_modules/next/dist/server/next-server.js:474:9)
    at async Object.fn (/Users/duncan/documenso/node_modules/next/dist/server/next-server.js:736:37)
    at async Router.execute (/Users/duncan/documenso/node_modules/next/dist/server/router.js:252:36)
    at async DevServer.run (/Users/duncan/documenso/node_modules/next/dist/server/base-server.js:384:29) {
  code: 'ERR_INVALID_CHAR'
}                                                 

Email Not Working

I've added the SendGrid API details and also tried Google SMTP details but the email feature is not working. What could the possible issue and way to solve this issue?

[DOC-170] Name Field

  • Field for Signer Name (in addition to the existing signature field and date field)
  • Prefilled with Signer Name from Recipient (The name set for the recipient, the field is associated to should be prefilled)
  • Freely editable (The content of the field should be freely editable as text field)

From SyncLinear.com | DOC-170

[DOC-229] Embeddable React Components/ iFrame Embedding

  • Ready-to-use components to embed and integrate will be a core pillar of Documenso's tech stack
  • Ready-to-use, beautiful react components can be integrated into web apps
  • Native android and iOS comments are possible if the demand is there
  • Basics iFrame can be used for simpler scenarios
  • Accessible via NPM
  • White-labeled and seamless on your site
  • Template Enabled: Generate a new Document Instance for the template associated with the component on the fly, when the user signs it

From SyncLinear.com | DOC-229

[DOC-230] Signature Workflow

  • Signatures never exist in a vacuum
  • The workflow around the signature is an important part of the domain
  • Recognizing that we want Documenso to support flexible workflow types to enable all kinds of real-life flow
  • Some fundamental types and rules for workflows are: Signing order, Parallel or sequential signing
  • Defining Subsitue signer for a step in the workflow

This feature will heavily integrate with the team inbox

[DOC-130] PDF Signer not loading

  • The signing link send via email (/documents/[id]/sign?token=xxx produces an empty page on mobile
  • A possible cause is an exception caused by a float in mobile coordinates, wherein integers are expected.

From SyncLinear.com | DOC-130

New user not redirected to `/dashboard`

  • When a user creates a new account on the /signup, the user should be redirected to the /dashboard on completion
  • A logged-in user is able to access /signup and /login. Logged In users should be redirected to the /dashboard
  • When a user is logged in, they can create another user account, whilst logged in.

[DOC-242] Teams

  • As we prepare Documenso for multi-user use cases we need to group individual users in teams to allow them to cooperate on common items (e.g. documents or settings)
  • This feature is closely linked to documenso/backlog#8 and should be planned accordingly
  • Discussion scope and range of the settings in these hierarchies will be essential and should be discussion first, preferably with in the context of real-life use cases
  • Especially roles and permissions should be incorporated

From SyncLinear.com | DOC-242

[DOC-244] Custom Signing Links

  • Custom Signing links upgrade Documenso Users with a public profile
  • Via the link structure: documenso.com/timur the profile is reached
  • Self-Hosted instanced would have their own network of profiles
  • If and what the profile shows are optional
  • Users can opt to show their Name, Email, and other data to create more trust
  • Users can also opt to show specific types of documents signed directly with them e.h. offers, agreements, NDAs, etc.
  • Potentially this profile can even be linked (long-term outlook!) via some metrics to determine the trustworthiness of the signing partner, by anonymously analyzing previous connections i.e. the trusted partners of my trusted partner is more likely to be my trusted than a stranger

From SyncLinear.com | DOC-244

CI/CD: .gitmodules with password protected repository breaks automated builds

I recently wanted to gice Documenso a spin and configured an automated build on our Openshift cluster.
However this didn't work since the file:

references a password-protected / non-public repository.

This breaks the build since the behavior to automatically check out repos specified in .gitmodules files can't be turned off.
Would it be possible to remove this repo from .gitmodules?

Thanks for your work and support!

[DOC-217] Show Completed Date for Documents

  • The document entity in the database should have a completedDate field
  • The field is null per default
  • When the status is set to completed, the field is filled with the current date
  • The completion date is shown in the recipients view and documents view

From SyncLinear.com | DOC-217

Darkmode 🌑

  • Dark mode reduces eye strain, saves battery, and is nice to look at
  • As a well-designed tool this should be implemented with care for detail and complement an equally nice light-mode
  • Optional Automatic switch could be a nice addon

From SyncLinear.com | DOC-249

From SyncLinear.com | DOC-249

Show List of Signers in Completed Email

Currently, an email is sent to all the signers when signing is completed.

Showing the list of other signers in the Completed Email will be a good enhancement.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.