One native PDF SDK, in the language you already use

Create, edit, render, sign, secure and convert PDF from a single native engine — with bindings for C, C++, .NET, Delphi, PHP, Python, Node and Flutter. Royalty-free to redistribute. Verified offline. No activation call, ever.

  • No card, no sales call
  • Evaluation watermark only
  • Public, unrestricted download

Perpetual licences from EUR 249.00 per developer seat. Talk to an engineer →

The engine itself

LumasPDF SDK

One native engine, packaged for every stack it is licensed on. Pick the one you build with — the engine inside is the same.

Every package above licenses the same engine, on the platforms that package covers. LumasReader — beside this — is one application built over one of them.

LumasPDF Reader

Free

A full desktop PDF reader with no PDF code of its own. Every feature below is the engine doing the work.

  • Opens what other readers stall on

    A 1,113-page document is on screen in under half a second, because pages are parsed when they are looked at rather than at open.

    ras* page cache
  • Annotate, comment, reply

    Highlight, note, draw and stamp; a comments panel that summarises the document and exports the lot to FDF.

    Annotation APIs
  • Fill in forms and sign

    AcroForm fields fill, reset, import and export. Fill & Sign places typed text, ticks and a stored signature on any page.

    Forms + signatures
  • Measure and stamp

    Distance, perimeter and area with real drawing units, and a stamp gallery that writes its own appearance streams.

    Measure + appearance
  • Search, extract, read aloud

    Find across the whole document including embedded fonts, pull the text back out, or have it read to you with the sentence lit.

    Text extraction
  • Runs with nothing behind it

    One executable, no runtime to install, no account and no network call — on Windows, Linux and macOS from one source tree.

    Static linking

None of this is Reader code. It is one native engine, linked into an application — the same engine, the same exports and the same licence terms you get on the download above. What the Reader does, your software can do.

LumasReader ships from this repository and is built from the engine in the current release — not a mock-up drawn for this page.

Built for

Teams that ship software, not documents

LumasPDF is an engine you embed and redistribute. That shapes who it suits — and we would rather say so than show a wall of logos nobody gave us permission to print.

  • Independent software vendors redistributing PDF inside a product
  • Enterprise line-of-business and back-office systems
  • Document automation and output management
  • Regulated and on-premises environments with no outbound network
  • Engineering teams replacing a per-document or per-server licence

One engine, your stack

Seventeen packages, so you licence what you actually build with

A package is not a marketing tier. The licence key names the one you bought, and the engine honours it on the platforms that package covers — which is why every platform list on this site is generated from the engine rather than written by hand.

Open the package finder →

Windows C/C++

windows-cpp

The engine as a DLL, with the header and both bitnesses.

C and C++ developers targeting Windows on Intel.

NuGet package

nuget

One package, native engines for every runtime identifier.

.NET developers who want dotnet add package and nothing else.

Linux on Intel

linux-x86-x64

Shared objects for 64-bit and 32-bit Intel Linux.

Server-side PDF generation on mainstream Linux.

PHP

php

A pure-PHP binding over FFI: no compiled extension to match.

PHP 7.4 and later, generating PDFs server-side.

Python

python

A ctypes binding: no compiled module, no build step.

Python 3.8 and later, on Windows, Linux and macOS.

Flutter

flutter

A dart:ffi package with natives for five platforms.

Flutter teams shipping one codebase to mobile and desktop.

Why one engine

The same code produces the same PDF, whatever you call it from

Every binding is a thin translation over one native engine. There is no second implementation to drift, so a document generated by the Python service and one generated by the .NET desktop client are produced by the same code.

Your code

The binding for your language

An idiomatic surface: a package, a unit, a module or a header. It carries no PDF logic of its own — it translates calls.

One engine

The native library

Every documented API, compiled for your platform. This is where layout, fonts, rasterising, encryption and conformance happen.

Output

The document

A file, a stream or a bitmap — identical across bindings, because there is only one implementation underneath them.

Getting started

From download to a first PDF

Three steps, and the second one is a program that already exists.

Open the quick start →
  1. Take the package for your stack

    Public download, no account. Each package installs the way that language expects — a package manager, an archive or a header and a library.

  2. Run the example that ships with it

    Every package carries worked examples. The first one writes a PDF and is the same file this site shows you before you download.

  3. Add a key when you are ready

    Unlicensed output is watermarked; nothing else is restricted. Register for a trial key to remove it, and buy when the evaluation is done rather than before it starts.

Deployment

Runs where you already run

Windows, Linux, macOS, iOS and Android across the architectures below. It is a library in your process — no daemon, no print server, no sidecar container, and nothing to keep alive.

The full matrix →
Targets win-x86 win-x64 win-arm64 linux-x86 linux-x64 linux-arm32 linux-arm64 macos ios android

Air-gapped and on-premises

Licence verification is local. Nothing in the engine opens a socket to us, so a network with no outbound route is an ordinary deployment rather than an exception.

Containers and serverless

No activation state to persist and no licence server to reach, so an image that scales to zero and back works the same as a long-lived host.

Desktop and mobile

The same engine links into a desktop application or a mobile app, so a document produced on a laptop and one produced on a phone are produced by the same code.

Licensing

A licence that does not become an operations problem

The three things procurement asks, answered before they have to ask.

How licensing works →
Offline
No activation
Your build verifies the key in its own process and never contacts us. There is no activation protocol, so there is no activation server to be down.
Perpetual
Nothing expires
A key licenses any build released on or before your coverage date, forever, including in production. The engine compares against a build date, never against the clock.
Royalty-free
Ship it anywhere
Redistribute the engine inside your product to as many end users as you like, with no per-copy fee and nothing for them to accept.

Procurement

Everything your purchasing process is going to ask for

The paperwork is not an afterthought here. If your process needs a quote before a purchase order and an invoice after it, that is the supported path rather than an exception someone has to arrange.

  • A written quote that survives a price change — the configuration is captured, not re-derived later.
  • Purchase order and net terms, with keys delivered on approval rather than on payment.
  • A VAT invoice showing the tax treatment for your country, computed before you commit.
  • Organisation ownership so licences belong to the company, not to whoever created the account.
  • Multiple seats and several packages on one agreement.
  • A security and data-flow statement for the review your team will run.
Before you ask

Two thirds of the questionnaire is already answered

The engine makes no network request, collects no telemetry and has no activation step. For most reviews that is the answer to most of the form, and it is a property of the product rather than a promise about our infrastructure.

Read the data-flow statement →

Lifecycle

What happens after you buy

A report becomes a public issue, an issue becomes a release, and the release names the build your key covers. All three are visible without an account.

Latest stable
4.2.3
built 2026-09-10 · every release
Open, published defects
0
The public list, including the unflattering entries. Known issues
What is next
Public roadmap
Customers file requests and vote on them. Roadmap

How support works and what it covers →

Before you ask

Questions that decide the answer

Does the SDK contact your servers?

No. The engine makes no network calls at all. A licence key is verified locally against a public key compiled into the binary, so it works air-gapped, behind a proxy, and while our site is down. Nothing about your usage is visible to us because nothing is sent.

Is there an activation step?

No. There is no account to register with the engine and no protocol to implement. You pass the key to the engine and it verifies the signature in your own process.

What happens to my software when maintenance ends?

Nothing. Maintenance is a window over build dates: the engine compares your key against the date the binary was built, never against the clock. Builds inside your window stay usable permanently, including in software you have already shipped. Ending maintenance stops new downloads and support, and reaches nothing you have already built.

Can a licence key be recalled or switched off remotely?

No, and we say so rather than implying otherwise. There is no licence server and no revocation list. A refund ends download entitlements and maintenance, which are real and enforceable; the key itself keeps verifying, and continuing to ship the engine after a refund is a breach of the terms rather than something the software prevents.

Are seat counts enforced?

No. The number is recorded in the key and nothing counts installations. The portal gives you a seat register for your own compliance records; it is not an enforcement mechanism.

How do I evaluate the SDK?

Download a package and run it. Unlicensed, every function works and the output carries a demonstration mark. There is no time limit, no registration and no feature gate, so you can answer "does this do what I need" completely before spending anything.

Which of the seventeen packages do I need?

The one whose platform list covers where your software RUNS, not the one named after the language you write in. The package is recorded in your key and the engine refuses it on a platform that package does not ship binaries for. Each package page lists its platforms, generated from the same source the engine is built from.

Can I add the optional capabilities to any edition?

No. The two paid extras are available only on the upper two editions. The engine computes the effective feature set from the edition first, so a key naming an extra its edition cannot carry would grant nothing. The configurator will not let you order that combination.

The full FAQ →

Write your first PDF this afternoon

The download is public and unrestricted, and it runs without a key. Register only when you want the watermark gone.

No card. No activation. No sales call unless you ask for one.