The self-hosted deployment serves the same editor iframe from your own
infrastructure instead of ours. Your page embeds it exactly like the hosted SDK;
only embedUrl changes.
When to choose it
- The network cannot reach external hosts (air-gapped or restricted egress).
- Documents must not traverse any third party, even for loading the application.
- You need full control over versions, patching and rollout windows.
- Procurement requires the software to run inside your perimeter.
What you get
- A container image that serves the editor as static files behind nginx, from your own host.
- An offline licence: a JWT without
exp, verified against the public key built into the image — no call to an RSJ server at runtime, no telemetry. - Version pinning: you decide when an update is rolled out.
Deployment
- Load the image into your registry.
- Run it in your container environment:
docker run -d --name pdfmerge pdfmerge:<version>
- Serve it under a hostname your product can embed, for example
https://pdfmerge.internal.example— through your reverse proxy, ingress or service discovery, with the port and TLS your setup already uses. The image contains no secrets and makes no outbound requests.
The editor build reads its settings from src/config.production.json before the
image is built — most importantly licensePublicKey (the ES256 key the licence
is signed with) and licenseAudience. A self-hosted build is produced with your
licence key, so the tokens you receive verify inside your perimeter.
Embedding
Only embedUrl changes:
const editor = new PDFMergeSortSplitClass('#editor', {
embedUrl: 'https://pdfmerge.internal.example',
apiKey: '<offline licence>',
});
Events, exports, provenance and the origin checks behave exactly as in the hosted deployment.
Updates
Self-hosted customers receive new image tags and release notes. You choose when to deploy them; the licence does not expire with a version, only with the agreed term.
Support
Deployment support, architecture reviews and a test licence are part of the enterprise agreement. Contact info@rsj.de to start.