OpenAEC-Foundation/open-pdf-studio

▲ 91 stars today★ 1,122⑂ 110

An open source PDF viewer/editor with it's own blazing fast rust engine

About OpenAEC-Foundation/open-pdf-studio

OpenAEC-Foundation/open-pdf-studio is an open-source project on GitHub, mainly written in HTML. An open source PDF viewer/editor with it's own blazing fast rust engine It currently holds 1,122 stars and 110 forks with 58 open issues, and was last pushed on 2026-11-11 (repository created 2026-01-22).

Project Overview

Git Homed tracks it on the Today's Trending board, currently at rank #50 with 91 new stars today.

GitHub Repository Details

Repository OpenAEC-Foundation/open-pdf-studio · default branch main · size 483603 KB · watchers 3 · source: GitHub REST API and repository README

README

English · Nederlands

Open PDF Studio

A free, open-source PDF editor for people who work with drawings: markup, measuring to scale, revision compare and CAD import, on Windows, macOS, Linux, Android and in the browser.

Release CI License Languages MCP tools

Try in your browser  ·  Download

A floor plan with a revision cloud, a callout and a measured distance; the Format tab and the properties of the selected callout are open

Open PDF Studio is a PDF editor for architects, engineers, contractors and everyone else who reviews drawings and documents. You mark up, measure with the scale the drawing carries, compare revisions, place symbols, count quantities and organise pages, with no subscription, account or watermark.

It runs as a desktop app on Windows, macOS and Linux, as an Android app, and in your browser with nothing to install. The desktop app adds what needs your computer: printing, OCR, DWG and DXF import and export, digital signatures and a local AI connection (MCP).

Try it

Open the browser version and open a PDF from your computer. You get the same ribbon, markup, measuring, compare, symbol and page tools as in the desktop app. Your document stays in your browser and is not uploaded; a page reload starts empty. Buttons for desktop-only features are switched off and say why.

Download

Every release is on the releases page.

| Platform | Files | |----------|-------| | Windows | …_x64-setup.exe (all users, needs admin), …_x64_user-setup.exe (current user only), …_x64_portable.zip (no install, details) | | macOS | …_universal.dmg (Apple silicon and Intel, macOS 10.15 or later) | | Linux | .deb, .AppImage and .snap for x86_64, also in the Snap Store; Nix flake. See docs/install-linux.md | | Android | open-pdf-studio-release.apk (64-bit ARM) | | Other | open-pdf-studio.mcpb (AI connection for MCP clients), open-pdf-studio-web-.tar.gz (web version to host yourself), winget manifests, the Python library (.whl and .tar.gz) |

Updates. The Windows installers, the macOS app, the .deb and the AppImage check for updates and install them through the built-in updater, which only accepts updates signed with the project's update key. The snap updates through the Snap Store. The portable version and the Android app do not update themselves.

Signing. The Windows installers and the program files they install are Authenticode-signed with Azure Trusted Signing; the release workflow installs the signed installer and checks every signature. The macOS app is signed with a Developer ID and notarized by Apple; the workflow checks it with codesign, spctl and stapler. From the first release after 2026.45.0 (the signing job came later), the .deb, the AppImage and the snap each have a detached OpenPGP signature (.asc) of the OpenAEC Foundation release key, fingerprint 13F6D414ADEE4ED4CD09AC60601D86C93C504D29, and SHA256SUMS with SHA256SUMS.asc covers the Linux files; check them with gpg --verify .asc against docs/keys/openaec-signing-public-key.asc (see docs/install-linux.md). The .sig files are the update signatures that the built-in updater checks. The Android APK is signed, but with a new key for every release (see Current limitations). The portable zip and the web bundle come with a .sha256 file.

Why use it?

Screenshots

| | | |---|---| | Area, perimeter and two distances measured on a floor plan at scale 1:50, Default theme Measuring with the scale of the drawing | Two revisions of a floor plan on top of each other, with the moved wall highlighted and a list of 18 changes Comparing two revisions | | Fire safety symbols from the NEN 1414 library placed on a floor plan, with the symbol palette open Symbols from the palette | The Edit Pages window with six pages: a cover, two floor plans and three pages of text Organising pages | | Search results for "wall" in the text and the annotations, theme Dark Searching text and annotations, theme Dark | The View tab with the window split in two: a floor plan on the left and the specification on the right, theme Blue Split view, theme Blue |

The screenshots come from the browser version with demo PDFs that the script makes itself: open-pdf-studio/scripts/generate-readme-screenshots.mjs.

Markup and measuring

The full list is in docs/features.md.

Documents and pages

Desktop features

Interoperability

| Format | Open / import | Save / export | |--------|---------------|---------------| | PDF | Yes, including forms (AcroForm, XFA) and layers | Yes; PDF/A validation and saving, PDF/X export, raster PDF, flattened copy | | XFDF | Annotations; a tool set from sample markups | Annotations | | BCF 2.1 | Issues as annotations | Annotations as issues | | DWG, DXF | Yes, as a vector PDF (desktop) | A page with its layers and markups (desktop) | | IFCX (IFC5 JSON) | No | Yes, beta (docs/ifcx-export.md) | | PNG, JPEG | As an image on a page | Pages, at 72 to 600 DPI | | DOCX, ODT, XLSX | No | Text and tables | | CSV | Edited tags of a saved quantities schedule (label, IFC category, location, count category) | Quantities schedule, with an ID column per markup |

What does not survive: XFDF and BCF carry annotations only, not the page content. A flattened copy leaves out form field values. DOCX, ODT and XLSX get the text and tables, and complex layouts may need correction. PDF/X keeps standard fonts that are not embedded as they are. What IFCX keeps and loses is listed in docs/ifcx-export.md.

Embedding in a web page

A separate, lightweight build lets another web application show a drawing with measuring and comments in its own page: npm run build:web-unit writes open-pdf-studio/dist-web-unit/. The script a host loads is about 10 KiB gzip; PDF.js arrives with the first document, the PDF writer only when the host asks for the result, and nothing in the unit uses the desktop shell. It uses the same annotation model as the desktop app, so a drawing marked up on the web opens the same way on the desktop.

The same unit works as a ` element and inside an iframe with a postMessage protocol. Options include a read-only mode (readOnly: true), a dark theme and CSS variables, a hidden toolbar for hosts with their own buttons, and storage: 'local' to remember the page and scale per document (off by default). The events are opds:load, opds:change, opds:save and opds:error. A minimal host page is in open-pdf-studio/web-unit/voorbeeld/`. The unit measures distances and places sticky notes and rectangles; area, perimeter, text boxes, editing existing annotations and XFDF are not in it yet (#451).

MCP

The desktop app has a built-in MCP server, so an AI assistant can work with your documents: open and save files, navigate, create and edit annotations, set the measuring scale, take off quantities, import and export CAD and print to a PDF file. It has 94 public tools.

You stay in control. The server is on for a new installation and listens only on your own computer (127.0.0.1, port 9223); switch it off or change the port under Settings > General. The status bar shows when an assistant is connected and which tool it used last. open-pdf-studio.mcpb from the release installs the connection in MCP clients that support .mcpb bundles; mcp-stdio/README.md explains the bridge for other clients. A Python library drives the same tools from a script.

Where your document goes. The MCP connection itself stays on your computer, but the assistant you connect decides where the work is done. If it uses an online AI service, the page text, screenshots and annotations it reads through the tools can be sent to that service. Check that service's data terms before you let it work on confidential drawings, or use an assistant with a model that runs locally.

Testing and reliability

Count sources: unit test files are the non-comment lines of open-pdf-studio/scripts/unit-testlijst.txt; quality tests are the test:quality script in open-pdf-studio/package.json; MCP tools are the entries in mcp-stdio/tools.json; languages are the folders in open-pdf-studio/js/i18n/locales/.

Current limitations

Found something? Open an issue.

Under the hood

The app is a Tauri 2 desktop app with a Rust back end and a SolidJS front end built with Vite. Pages render through a multi-process PDFium worker pool, off the UI thread and isolated from crashes, with progressive tiles for very large drawings; the browser and Android versions render with PDF.js, which also provides the text layer. pdf-lib writes the PDF changes. The browser version is the same front end built without the Tauri shell. The licences of all components are in LICENSING.md.

Contributing

We are looking for someone to maintain the extensions and the content repository: curating incoming symbol libraries and keeping the catalogue organised. If that is you, open an issue to introduce yourself.

Quick start (developers)

git clone https://github.com/OpenAEC-Foundation/open-pdf-studio.git
cd open-pdf-studio/open-pdf-studio
npm ci
npm run tauri:dev

Requires Node.js 22, Rust stable, CMake and a C/C++ toolchain, plus the WebKitGTK development packages on Linux. Details, release builds, the web version and tests are in docs/building.md.

Versions follow the OpenAEC scheme YYYY.W.N: year, ISO week without a leading zero, and a number within the week that starts at 0, such as 2026.44.8.

Open PDF Studio is part of the OpenAEC Foundation family of apps.

License

Open PDF Studio is licensed under the GNU Lesser General Public License v3.0 or later. The LGPL builds on the GNU General Public License v3.0, whose text ships alongside it. LICENSING.md explains what that means in plain language, lists the licence of every component and of the third-party components the app ships with, and answers the AGPL question around the MuPDF dependency.

GitHub Stars & Activity

1,122Stars
110Forks
58Open issues
HTMLLanguage

GitHub Popularity

GitHub stars1,122
Forks110
Open issues58
Primary languageHTML
LicenseLGPL-3.0
Stars gained today91
Created2026-01-22
Last pushed2026-11-11

Trending History

Daily boardrank #50 · ▲ 91 stars

Related GitHub Projects

1

cathrynlavery / diagram-design

HTML★ 66,432⑂ 4,413▲ 242 stars
→
2

Sjj1024 / PakePlus

HTML★ 15,855⑂ 7,880▲ 76 stars
→
3

mattpocock / skills

Shell★ 321,452⑂ 26,944▲ 1,225 stars
→
4

obra / superpowers

Shell★ 315,986⑂ 28,108▲ 656 stars
→
5

anthropics / skills

Python★ 192,782⑂ 22,682▲ 1,679 stars
→
6

ohmyzsh / ohmyzsh

Shell★ 190,508⑂ 27,294▲ 49 stars
→
7

microsoft / PowerToys

C★ 140,861⑂ 8,728▲ 63 stars
→
8

ggml-org / llama.cpp

C++★ 134,057⑂ 25,389▲ 120 stars
→

More Trending Repositories