Self-hosted alternatives to DocuSign: Documenso and DocuSeal compared

Documenso and DocuSeal on one Debian 13 server, each sending the same three-page contract to two signers in order and a copy recipient, signed on a desktop and a phone, compared on the signed PDF and its certificate, reminders, templates, links, API, roles, memory and cost, next to DocuSign and the EU's signature levels.

Tested on Documenso 2.20.0 and DocuSeal 3.3.2 on Debian 13 (trixie) on a Melonslab server Updated October 14, 2026

Recommended server for this guide

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy · 2 vCPU · 8 GB Memory · 60 GB Storage

Month to month, no lock-in 7-day money-back guarantee

€8.99/mo

Deploy now
On this page

The short answer

Pick Documenso if you want the most from the free version: two signers in order with a copy recipient, automatic reminders, teams with roles, your own logo on the signing page and a sealed PDF with the signing history inside it are all free. Pick DocuSeal if you want the lightest and simplest tool: it used half the memory, its step-by-step signing form is the easiest on a phone, and a public signing link takes one switch, but reminders, roles and your logo are in its paid Pro plan.

Both give a simple electronic signature out of the box, which is what most agreements between companies use. Neither has Swedish or BankID built in.

What we tested

We installed both on the same fresh Melonslab VC-P Alloy (2 vCPU, 8 GB) with Debian 13, each under a user of its own, behind the same Caddy. Documenso followed our guide Sign documents with Documenso and rootless Podman step by step, and every step worked as written. We have no DocuSeal guide, so we ran DocuSeal's official image in the same pattern: a pod under its own user, Quadlet units, secrets in Podman and Caddy in front (How we ran DocuSeal has the files).

Then we did the same thing in both:

  • a three-page service agreement as a PDF, with a signature, a date, a text field for the title and a checkbox for each of two signers, placed on page 3 in each app's editor;
  • the two signers in a fixed order, the customer first and the supplier second, and a third person, the finance department, getting a copy of the finished agreement;
  • the first signer signed in a desktop browser, the second in Chromium with a phone-sized screen, 390 by 844 pixels with touch;
  • a reminder to the first signer before he had signed;
  • the same agreement as a template, signed through a public link by someone who was not invited;
  • the API, a webhook, a second user, the signed PDF checked with pdfsig, a backup restored, and a reboot.

All email went to a test mail server on the server itself. No real email was sent, and we did not test a real email provider.

DocuSign itself was not tested. We did not sign up for it. What this page says about DocuSign comes from its own pages, linked where we use them and read on 14 October 2026.

The numbers

Documenso 2.20.0DocuSeal 3.3.2
Containers2: Documenso, PostgreSQL 172: DocuSeal (web server, background jobs and Redis in one), PostgreSQL 17
Memory at rest after a rebootabout 305 MB (Documenso 295, PostgreSQL 10)about 155 MB (DocuSeal 148, PostgreSQL 6)
Memory just after a document was signedabout 375 MBabout 215 MB
Images on disk1.82 GB0.81 GB
Data after the test69 MB68 MB
First start, image download includedabout 2 minutes 10 secondsabout 1 minute
Signers in a fixed orderyesyes
Copy recipientyes, a recipient rolea copy of the finished agreement to set addresses
Automatic remindersyesPro
Public signing linkyes, per templateyes, per template
Teams and rolesyesPro
Your logo on the signing pageyesPro
Your own signing certificateyesyes
Swedish interfacenono
LicenceAGPL 3.0, a few parts commercialAGPL 3.0

Memory is the sum of each app's containers, measured with podman stats five minutes after a reboot, and again 15 seconds after one more agreement was signed in each. The first start is from creating the user to the app answering, with the commands run by a script; most of it is downloading images. The data is mostly the empty databases.

Setup

Documenso's guide has 11 steps, and one of them makes the signing certificate the finished PDFs are sealed with. Documenso cannot be set up without email: the first account has to confirm its address, and the guide then makes it an administrator with one SQL command and closes sign-ups.

DocuSeal is one image with its own Redis and background worker inside, plus PostgreSQL. Its first page is a setup form for the company name and the first administrator, so whoever opens it first owns the instance. Our Caddy block only let our own address through until that was done. DocuSeal makes a signing certificate by itself at setup; we replaced it with our own, as The signed PDF explains.

Sending a document

Both editors work the same way: upload the PDF, pick a field type and place it on the page. Fields belong to one recipient, shown in a colour of its own.

Documenso starts from the document. We entered the three recipients with name and email, switched on Enable signing order, and gave the finance department the role Receives copy. Fields are placed with a click. A document's settings set the language of the emails, the date format, the time zone, reminders and expiry. The signing request is emailed only to the first signer; the second got hers when he had signed.

DocuSeal starts from a template: every PDF you upload becomes one, with parties called First Party and Second Party, and you draw each field as a box. Send asks for each party's name and email, and Preserve order is on by default. DocuSeal has no copy role. Instead, a template's Preferences take a Completed documents notification BCC address, which got the finished agreement; Settings > Notifications has the same for every template.

Both emailed the first signer at once, the second when the first had signed, and everyone when it was done.

Reminders

Documenso sends reminders by itself. They are on by default in a document's settings, the first after 5 days and then every 2 days, and an organisation can change the defaults. We moved the first reminder's time into the past in the database, and a "Reminder:" email reached the first signer about a minute and a half later.

DocuSeal's automatic reminders, under Settings > Notifications, need Pro. In the free version, RE-SEND EMAIL on a pending submission sent the request again, which we tried.

Signing on a phone

Both worked in our phone-sized browser, and neither needs the signer to have an account or install anything.

Documenso shows the whole page scaled to the phone's width, so the fields on page 3 are small, and you tap each one. A bar at the bottom shows how many fields are left, with Next Field and Complete. Tapping the signature field opened a box to draw, type or upload a signature.

DocuSeal shows the document with a panel at the bottom that asks for one field at a time: draw the signature, Set Today for the date, type the title, tick the box, with NEXT in between. It was the easier of the two on a small screen.

The signed PDF

When everyone had signed, both emailed the finished PDF to every recipient and to the sender, and both signed the PDF digitally, so any change afterwards breaks the signature.

Documenso added a fourth page, Signing Certificate, with each recipient's name and email, when the agreement was sent, viewed and signed in UTC, and the signer's IP address and device. The PDF was signed with the certificate from step 3 of our guide: pdfsig printed "Example AB document signing", "Signature is Valid" and "Certificate issuer isn't Trusted", as expected for a certificate you made yourself. A setting under the organisation's Certificates also puts the full audit log into the PDF.

DocuSeal kept the agreement at three pages and sent a separate Audit Log PDF with it: each signer's email, whether the email was verified, the IP address, browser, time zone and the value of every field, a log of every email, view and signature in local time, and SHA-256 hashes of the original and the signed file. Both PDFs were signed, at first with a certificate chain DocuSeal made at setup, "DocuSeal", "DocuSeal Sub-CA" and "DocuSeal Root CA", valid for 100 years. pdfsig from Debian 13 could not check that signature: it showed no signer and "Unknown Validation Failure". Two other tools, pyHanko and OpenSSL, found it intact and covering the whole file, and DocuSeal's own check under Settings > E-Signature called it valid. After we uploaded our own certificate there, a .p12 file with its password, which is free, the next agreements and audit logs were signed with it, and pdfsig showed "Signature is Valid", as with Documenso. If you choose DocuSeal, upload your own certificate first.

Both recorded the signer's real IP address through Caddy.

A certificate you make yourself proves that the PDF has not changed since it was signed, and who sealed it, but PDF readers such as Adobe Acrobat do not show it as trusted. For that, buy a document signing certificate from a provider on Adobe's trust list and use it in either app. DocuSeal also sells a trusted certificate of its own with Pro.

Documenso has templates next to documents. A template's Direct Link creates a link anyone can open: they enter their name and email, fill in their fields and sign, and the signed document appears in the sender's list. The link signer needs a signature field of their own; until it had one, Documenso showed "Invalid direct link template".

DocuSeal is built around templates, so a template's share link is one switch, Enable shared link. The signer gives an email address, and can be asked for a name, a phone number or a code sent by email.

Both worked, and both sent the signer the finished copy.

API and webhooks

Both have a REST API, which is free in both, and webhooks.

  • Documenso's API tokens belong to a team and expire after 3 months by default, or never. We listed the documents and downloaded a signed PDF through its v2 API. Webhooks are set per team, with events such as document.sent, document.signed and document.completed, and a secret that Documenso sends as it is in the X-Documenso-Secret header. Documenso refused to call our test receiver on the server itself, as it blocks private and internal addresses by default. Webhooks to a public address work as they are; for one inside your network, the setting NEXT_PRIVATE_WEBHOOK_SSRF_BYPASS_HOSTS lists the names to allow, which is how we tested it.
  • DocuSeal has one API token per user, sent as X-Auth-Token. We created a submission from a template, which emailed the signer, and fetched the signed documents and audit log. Its webhooks report each signer viewing, starting, finishing or declining, and submissions and templates changing, signed with an HMAC signature in X-Docuseal-Signature. According to DocuSeal's pricing page, read on 14 October 2026, the free version's API is "Basic", and Pro charges 0.20 US dollars per completed document sent through the API or embedded signing.

Teams, roles and branding

Documenso has organisations, teams and groups. We created a second user in the admin panel and invited him to the organisation as Member, one of three roles with Manager and Admin. He saw the team's documents; a document's visibility can be limited to managers or admins. An organisation's Branding took our logo, a website, colours and custom CSS, and the logo replaced Documenso's on the signing page. All of this is free.

DocuSeal's free version adds users, but every user is an admin: "Unlock more user roles with DocuSeal Pro". Teams, your company logo and white-label are Pro too. The free version lets you change the text of its emails and the message after signing, and its licence requires the DocuSeal attribution to stay in the interface.

Swedish

Neither has a Swedish interface. Documenso comes in English, German, French, Spanish, Italian, Dutch, Polish, Portuguese, Japanese, Korean and Chinese, and each document's emails and signing page follow the language set on it. DocuSeal's setup offered English, French, Spanish, Portuguese, German, Italian and Dutch, and its signing form also has Polish, Ukrainian, Czech, Hebrew, Arabic, Korean and Japanese. A Swedish signer gets English.

What the signatures are worth in the EU

This is a summary of EU sources, not legal advice. The EU's eIDAS regulation, Regulation (EU) No 910/2014, and the European Commission's eSignature FAQ (last updated 2 February 2026, read 14 October 2026) describe three levels:

  • A simple electronic signature is data in electronic form attached to other data and used by the signer to sign, according to Article 3. A drawn signature on a web page, or your name under an email, can be one.
  • An advanced electronic signature must also be uniquely linked to the signer, be able to identify them, be created with means the signer controls alone, and make any later change detectable, according to Article 26. In practice, the signer signs with a key of their own, often after identifying with an eID.
  • A qualified electronic signature is an advanced signature made with a qualified signature device and based on a qualified certificate. Only this level has the same legal effect as a handwritten signature in every EU country, according to Article 25.

Article 25 also says that no electronic signature may be denied legal effect or refused as evidence only because it is electronic. Which level a document needs is not set by eIDAS: its Article 2 leaves national rules on the form of contracts in place, and the Commission says different levels suit different contexts.

What Documenso and DocuSeal give you is a simple electronic signature. The signer is identified by the email link and, with DocuSeal, optionally a code by email; the audit trail records IP addresses and times; and the whole PDF is sealed with your company's certificate. That seal shows the document is unchanged, but it is your certificate, not the signer's, so it does not make the signature advanced. Documenso's documentation describes advanced and qualified signatures through a trust service provider, using the Cloud Signature Consortium standard, but that needs its paid Enterprise Edition and a provider; we did not test it. Neither has BankID built in.

What that means for a Swedish company: an ordinary agreement between companies, an NDA, an order or a consultancy agreement, has no form requirement in most cases, and a simple signature with a good audit trail is what most e-signing services use for them. Some documents are different. Lantmäteriet's information sheet on digital and physical signing (dated 28 September 2023, read 14 October 2026) lists documents that must be signed by hand to be valid, among them deeds of sale and purchase contracts for real property, deeds of gift, wills and estate distributions. Where you need a signer's identity proven with BankID, or a qualified signature, neither tool does it out of the box. If you are unsure, ask a lawyer about the specific document.

Resources

Documenso is a Node.js app, and its container held nearly all of its 305 MB at rest. DocuSeal is a Ruby on Rails app that runs its web server, background jobs and a small Redis in one container, in about 150 MB. Both PostgreSQL databases used 10 MB or less. Documenso's image is more than twice the size of DocuSeal's.

Either fits a small server, and both together used under 600 MB, so a VC-P Alloy runs both with plenty of room, as ours did.

Updates and backups

Both pin the version in the unit file, and you update by changing the tag after reading the release notes; both update their database by themselves when they start. Both release often: Documenso 2.18.0, 2.19.0 and 2.20.0 between 9 September and 8 October 2026, DocuSeal 3.2.6 to 3.3.2 once a week from 21 September to 12 October.

Documenso keeps the documents in PostgreSQL, so its backup is one database dump plus the keys and the signing certificate, 2.0 MB in our test. DocuSeal keeps the PDFs as files in a volume and the rest in PostgreSQL, so its backup is a dump, the volume and the secret key, 1.0 MB here. We restored each: Documenso's documents came back, and still showed "Signature is Valid"; for DocuSeal, we deleted the volume and the database, restored both, and a submission that was pending before the restore was signed afterwards with our own certificate.

Both came back by themselves after a reboot.

How we ran DocuSeal

We followed DocuSeal's own Docker Compose file, an app container and PostgreSQL, as a pod under a user of its own. DocuSeal reads the database address, its secret key and the email settings from environment variables, and keeps uploaded and signed files in /data/docuseal. Two things we learned:

  • FORCE_SSL makes DocuSeal put https:// in the links it emails, and trust Caddy's X-Forwarded-Proto. HOST is the name in those links.
  • With SMTP_ADDRESS set, SMTP_FROM is required, and DocuSeal's email settings page goes away. Port 587 uses STARTTLS.

As root, create the user, as in step 1 of the Documenso guide:

useradd -m -s /bin/bash docuseal
loginctl enable-linger docuseal
machinectl shell docuseal@

As docuseal, create the secrets:

pw=$(openssl rand -hex 24)
printf %s "$pw" | podman secret create docuseal-db-password -
printf 'postgresql://docuseal:%s@127.0.0.1:5432/docuseal' "$pw" | podman secret create docuseal-database-url -
unset pw
openssl rand -hex 64 | tr -d '\n' | podman secret create docuseal-secret-key-base -
printf %s 'the-smtp-password' | podman secret create docuseal-smtp-password -

~/.config/containers/systemd/docuseal.pod:

[Pod]
PodName=docuseal
PublishPort=127.0.0.1:8132:3000

[Install]
WantedBy=default.target

docuseal-db.container:

[Container]
ContainerName=docuseal-db
Image=docker.io/library/postgres:17-alpine
Pod=docuseal.pod
Volume=docuseal-db:/var/lib/postgresql/data
Environment=POSTGRES_USER=docuseal POSTGRES_DB=docuseal
Secret=docuseal-db-password,type=env,target=POSTGRES_PASSWORD
HealthCmd=pg_isready -U docuseal -d docuseal
HealthInterval=10s
Notify=healthy
AutoUpdate=registry

[Service]
Restart=always

docuseal-app.container:

[Unit]
Requires=docuseal-db.service
After=docuseal-db.service

[Container]
ContainerName=docuseal-app
Image=docker.io/docuseal/docuseal:3.3.2
Pod=docuseal.pod
Volume=docuseal-data:/data/docuseal
Environment=HOST=docuseal.example.com FORCE_SSL=true
Secret=docuseal-database-url,type=env,target=DATABASE_URL
Secret=docuseal-secret-key-base,type=env,target=SECRET_KEY_BASE
Environment=SMTP_ADDRESS=smtp.example.com SMTP_PORT=587
Environment=SMTP_USERNAME=sign@example.com SMTP_FROM=sign@example.com
Secret=docuseal-smtp-password,type=env,target=SMTP_PASSWORD

[Service]
Restart=always

Run systemctl --user daemon-reload, systemctl --user start docuseal-pod and systemctl --user enable --now podman-auto-update.timer. It is ready when curl -s -o /dev/null -w '%{http_code}\n' -H 'X-Forwarded-Proto: https' http://127.0.0.1:8132/up prints 200.

As caddy, add this block to ~/Caddyfile, with your own IP address in place of 203.0.113.10, and restart Caddy:

docuseal.example.com {
    @others not remote_ip 203.0.113.10
    respond @others "Not yet" 403
    reverse_proxy 127.0.0.1:8132
}

Open https://docuseal.example.com, fill in the setup form, and skip the newsletter page. Then remove the two lines with @others and restart Caddy again. Under Settings > E-Signature, upload your own certificate with UPLOAD CERT; a .p12 made as in step 3 of the Documenso guide works.

To back up, as docuseal:

umask 077
mkdir -p ~/backup
podman exec docuseal-db pg_dump -U docuseal docuseal > ~/backup/docuseal.sql
podman volume export docuseal-data > ~/backup/docuseal-data.tar
podman secret inspect --showsecret --format '{{.SecretData}}' docuseal-secret-key-base > ~/backup/docuseal-secret-key-base

The secret key encrypts the settings DocuSeal keeps in the database, among them your uploaded certificate. To restore, stop docuseal-app, drop and create the database and load the dump as in step 10 of the Documenso guide, then podman volume rm docuseal-data, podman volume create docuseal-data and podman volume import docuseal-data ~/backup/docuseal-data.tar, and start docuseal-app.

Licence and cost

We read the licence texts and pricing pages on 14 October 2026.

  • Documenso is made by Documenso, Inc. in the United States, and is open source under the AGPL 3.0. The code in its ee folder is under a commercial licence and needs an Enterprise Edition subscription in production; its feature list names Stripe billing, the organisation sign-in portal, reauthentication with passkeys and two-factor codes for document actions, 21 CFR Part 11, email domains and embedded authoring. Advanced and qualified signatures through a trust service provider need it as well, according to Documenso's documentation. The Enterprise Edition page gives no price. Its hosted service, on the pricing page, is free for 5 documents a month, and the Teams plan costs 480 US dollars a year for 5 users. Nothing we tested needed a licence.
  • DocuSeal is made by DocuSeal LLC, and is open source under the AGPL 3.0 with one added term: the DocuSeal attribution has to stay in the interface. According to the pricing page, Pro on your own server costs 20 US dollars per user a month, billed yearly, and adds your logo and white-label, automated reminders, user roles and teams, bulk sending from a spreadsheet, SAML single sign-on, SMS verification, conditional and formula fields, and more. Pro also charges 0.20 dollars per document completed through the API or embedded signing.

On your own server, the documents and the signing history stay in Sweden, and you pay for the server, not per sender.

Why DocuSeal and not OpenSign. OpenSign is the other open-source tool often named next to Documenso. On GitHub on 14 October 2026, its last release was 2.41.3 on 21 August 2026, with 19 commits in the three months before; DocuSeal released every week in the same period and had more than twice the stars. We tested the one that is better maintained today.

DocuSign today

What follows is from DocuSign's own pages, read on 14 October 2026, not from our tests.

DocuSign's eSignature pricing page for Sweden lists, billed yearly:

  • Personal at 110 kronor a month, for one user and 5 envelopes a month, without shared templates or branding;
  • Standard at 275 kronor per user a month, with 100 envelopes per user a year, shared templates, your branding and the API;
  • Business Pro at 425 kronor per user a month, with the same envelopes, adding bulk sending, web forms, PowerForms, attachments from signers and payments;
  • Enhanced plans at a price from sales.

On monthly billing, the envelope limit is 10 per user a month, according to the same page. All plans have reminders. Every plan signs at the simple level; a qualified signature is an add-on at 125 kronor per recipient on Personal, Standard and Business Pro, and the Enhanced plans include advanced and qualified signatures. ID verification is a paid add-on. DocuSign's customer story about the Swedish law firm Cederquist describes signing combined with Swedish BankID verification.

What you give up compared with DocuSign

Running your own keeps the agreements on your server, costs a fixed server price instead of a price per user and envelope, and has no envelope limit. But be clear about what you leave behind:

  • Higher signature levels and BankID. DocuSign sells qualified signatures per recipient and ID verification; neither tool here does either out of the box.
  • A trusted seal. DocuSign's PDFs are signed with a certificate PDF readers trust. With your own certificate, Acrobat shows the signature as valid but not trusted, unless you buy a certificate on Adobe's trust list.
  • Swedish. DocuSign signs in many languages; neither tool has Swedish.
  • Integrations. DocuSign connects to CRM, storage and HR systems out of the box. Here you have the API and webhooks, and build the rest yourself.
  • Payments and SMS. DocuSign's Business Pro collects payments, and DocuSeal has payments and SMS in Pro. Bulk sending from a spreadsheet is in DocuSeal Pro, and Documenso's templates have a bulk send, which we did not test.
  • Running it. Updates, backups, the certificate and a working email account are yours. A lost certificate or secret key can make old settings unreadable, so the backup matters.

Which one to pick

Most companies, especially with several senders: Documenso. Signers in order, a copy recipient, automatic reminders, templates with direct links, organisations with teams and roles, your logo and colours on the signing page, and a PDF with the signing history inside it are all free, in about 300 MB. Its weak points are the bigger image, an account setup that needs working email and one SQL command, a phone view where fields are small, webhooks that skip addresses inside your own network until you allow them, no Swedish, and advanced or qualified signatures only with its paid Enterprise Edition. Follow the Documenso guide, on a VC-P Alloy.

A small team that wants the simplest tool, or forms people sign from a link: DocuSeal. It is the lightest, at about 150 MB, its templates and share links are quick, its phone form is the best of the two, and the API and webhooks are free. Its weak points are that automatic reminders, roles, your logo and teams cost 20 dollars per user a month, there is no copy recipient, only a copy to set addresses, the setup form goes to whoever comes first, the first certificate it makes could not be checked with pdfsig, so you upload your own, no Swedish, and no guide of ours yet: the files in How we ran DocuSeal are what we ran, on top of the Podman guide. A VC-P Alloy suits it too.

Together they used under 600 MB at rest, so one VC-P Alloy runs both, as ours did.

Run it on your own server

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy

€8.99/mo

vCPU
2
Memory
8 GB
Storage
60 GB
Transfer
10 TB
Performance
SSD · RAID 1
  • Full root access
  • Native /64 IPv6
  • RAID-protected storage
  • Malmö, Sweden
  • Month to month, no lock-in
  • 7-day money-back guarantee
All guides