Open. Fix. Save. Done.
A free, open-source, lightweight PDF editor for Windows, Mac, Linux, iPhone/iPad and Android — built for people who find Acrobat too bloated and complex.
MegaPDF does the one job most people actually have with a PDF: someone sent you a form, and you need to send it back filled in, checked off, and signed. No account. No cloud. No subscription. Everything happens on your device.
MegaPDF does eight things exceptionally well and deliberately nothing else:
- Read — a reading mode that takes the toolbars off the screen and leaves the page, in Normal, Sepia or Night colours, on every platform.
- Edit text — click any text in the document and type, like editing a Word file.
- Add text — click a blank line and type on it, in the size and face that matches the form you're filling in.
- Redact — mark what has to come out and MegaPDF takes it out of the file rather than covering it over.
- Check boxes — click an empty square and it becomes a checked box.
- Apply signatures — keep a small personal library of signature images; drag one onto the page.
- Save — Save overwrites, Save As creates a copy. No export wizards, no "flatten" dialogs. Save As can also write the document's text as a Markdown file — a one-way export that leaves the PDF untouched.
- Pages — rotate, delete, reorder, insert and extract pages — each a single undo step.
Also included, because long documents need it: Find (the toolbar button, or
Ctrl+F) searches the whole document — type and every match lights up, Enter
walks through them. Documents open as tabs in one window on Windows, the Mac
and Linux, and a PDF opened from the file manager joins the window you already have.
Also on the command line: megapdf-cli extract file.pdf writes the text;
--format md writes Markdown. It ships in every Linux package (on PATH), and
for Windows and macOS as a zip on the releases page (windows-cli-v*,
macos-cli-v*) — not inside any store package.
No account. No cloud. No subscription. All processing is local.
electricrv.ca/megapdf has the store badges
for every platform plus the Linux install page. Store status as of 2.3.0:
Linux (APT repository, .deb, tarball, or sudo snap install megapdf),
Google Play, Windows (Microsoft Store) and iOS are live; Mac is
submitted and awaiting App Store review.
The full Software Design Document lives in SDD.md — product principles, feature specifications, architecture, and deployment strategy. Read it before contributing; the non-goals list is enforced.
Five native apps over one engine. What MegaPDF does to a PDF (opening, rendering, text editing, redaction, forms, page tools, search, extraction) is decided once, in a shared C++ core, so a fix there reaches every platform. Each app is written in its own platform's language and UI toolkit on top of it.
- Engine:
core/. C++17 behind a C ABI (core/megapdf_core.h), over our own build of PDFium, not upstream's. We carry a patch series (tools/pdfium/patches/, each patch explained intools/pdfium/README.md) that fixes how PDFium rewrites a page when it is edited, writes AES-256 with new passwords, and more.libs/pdfium/RELEASEpins the build every platform links. The number of patches in that build is compiled into the core asMEGAPDF_PDFIUM_PATCHES, and behaviour that needs a patch is gated on it. Do not assume upstream PDFium behaviour. - Windows: C# / .NET 8, WinUI 3 (Windows App SDK), CommunityToolkit.Mvvm. x64 and ARM64, shipped as an MSIX through the Microsoft Store only.
- Mac and Linux: one app,
src/MegaPDF.Avalonia. C# / .NET 8 and Avalonia, one binary for both platforms, with what differs between them under itsPlatform/folder. A change there lands on two platforms. The Mac build is for Apple silicon and goes through the Mac App Store. The Linux build (x64) ships as a.debwith a signed APT repository, a Snap, and a tarball. - Both desktop apps reach the core through
src/MegaPDF.Core: P/Invoke bindings, plus the services and edit operations the two apps share. There the core is a native library:megapdf_core.dll,libmegapdf_core.dyliborlibmegapdf_core.so. - iPhone and iPad: Swift and SwiftUI, iOS 16 and later. The core's sources compile
into the app, and Swift calls the C ABI through a bridging header. The Xcode project
is generated from
ios/project.ymlby XcodeGen. - Android: Kotlin and Jetpack Compose (Material 3), Android 8.0 (API 26) and
later. The core compiles into a JNI library in
android/engine. - Command line:
megapdf-cli(core/cli/) extracts a PDF's text or Markdown with the same core. - Tests: xUnit for
MegaPDF.Core, a native test binary for the core (core/tests/), XCTest on iOS, JUnit and instrumented tests on Android, and each desktop app's own self-test (--self-teston Mac and Linux,--screenshot-stateon Windows). Corpus batteries intools/stress/run the core over thousands of real PDFs.tests/matrix/coverage.tomlmaps every feature to its proof on every platform, and CI fails a test file that no feature cites.
core/ The shared engine: C++17 over our patched PDFium (ADR-003)
megapdf_core.h Its C ABI, the one surface every platform calls
cli/ megapdf-cli, text and Markdown extraction
tests/ The core's native tests and their expected outputs
src/MegaPDF.Core/ .NET bindings to the core and services shared by both desktop apps
src/MegaPDF.App/ Windows app (WinUI 3)
src/MegaPDF.Avalonia/ Mac and Linux app (Avalonia), one binary for both (ADR-002)
ios/ iPhone and iPad app (SwiftUI); project.yml generates the Xcode project
android/ Android app (Compose): app/ is the UI, engine/ wraps the core over JNI
tests/MegaPDF.Core.Tests/ xUnit tests for MegaPDF.Core, against the real engine
tests/matrix/coverage.toml Which test proves each feature on each platform; enforced in CI
libs/pdfium/ The pinned PDFium build (RELEASE) and its Windows and Android binaries
libs/licenses/ Third-party licence texts the apps ship
tools/ Build, packaging, store submission, test fixtures and QA
pdfium/ The PDFium patch series and the script that builds it
linux/ .deb, APT repository, Snap and Flatpak packaging
stress/ Corpus batteries over real-world PDFs
gen_strings.py Localisation: fr-CA is written by hand, fr-FR is derived from it
docs/ ADRs, the release runbook (RELEASING.md), the localisation glossary
website/ electricrv.ca/megapdf: the site's source and its deploy script
assets/branding/ Logo, icon and splash artwork
.github/workflows/ CI for every platform, and the release pipelines
SDD.md Software Design Document (start here)
TESTING.md How to test MegaPDF, and the record of corpus battery runs
Requires the .NET 8 SDK on Windows 11 (or Windows 10 1809+). No Visual Studio needed.
dotnet build MegaPDF.sln
dotnet test MegaPDF.sln
The cross-platform app in src/MegaPDF.Avalonia builds and runs on Linux x64.
Tested on Ubuntu 24.04 LTS; Fedora current is the other target
distribution. linux-arm64 is not buildable yet — the patched PDFium series has
no arm64 build.
Needs the .NET 8 SDK, CMake and a C++ toolchain. Ninja is used when present:
sudo apt install -y dotnet-sdk-8.0 cmake ninja-build g++ python3
tools/fetch-pdfium-linux.sh # the pinned PDFium prebuilt
tools/build-linux-app.sh # -> artifacts/linux/MegaPDF
artifacts/linux/MegaPDF/install.sh # into ~/.local, no root
install.sh puts MegaPDF in the applications menu, offers it in a PDF's Open
With menu, installs the hicolor icons, and adds a megapdf command.
uninstall.sh takes it all back out and keeps your signatures and settings.
Two packages are worth having beside it, and neither is required:
cups-client for printing (lp), and fonts-urw-base35 for a script face to
type signatures in — without it they are drawn in the body font.
The .deb and its signed APT repository are how Linux ships (see "Installing"
below); AppImage was decided against in favor of the .deb (tools/Linux-Packaging.md
says why). Flathub is on hold pending a Flathub account (#254 did the prep; no
open issue tracks the submission itself yet) — the manifest, its CI checks and
the tooling are ready and wait in tools/linux/flatpak/. The Snap Store is live on
its stable channel — sudo snap install megapdf needs no channel flag — since
2026-10-02 (#314).
Windows builds ship through the Microsoft Store only:
https://apps.microsoft.com/detail/9PF4TRRH4M76 (x64 and ARM64; the Store signs the
package and handles updates). The Store package is built headlessly by the recipe in
tools/Store-Submission.md. There is no sideload installer and no in-app updater any
more — both were retired in September 2026 once the Store listing went live; the older
.msix assets on the GitHub releases page are historical and will not update.
A release goes to every channel at once, in a fixed order with a gate at each step.
docs/RELEASING.md is the runbook — the version rule, the gates
and the command that proves each, the submission commands per store, and the traps —
and .github/ISSUE_TEMPLATE/release-checklist.md is the issue to open and work down.