SafePDF - Privacy-First PDF Toolkit
SafePDF is a free, open-source desktop app for Windows, macOS and Linux. It merges, splits, compresses, converts, rotates and repairs PDFs entirely on your own device — your sensitive documents never leave your computer.
Why SafePDF?
100% Offline - No cloud uploads, no internet required
Fast & Lightweight - Operations run directly on your device
Privacy First - Ideal for sensitive documents (legal, healthcare, financial)
Multi-language - English, German, Turkish support
Read more: The Security Concerns of Online PDF Tools
Features
- Compress - Reduce PDF file size with quality control
- Split - Separate PDFs by pages or custom ranges
- Merge - Combine multiple PDF files into one
- Convert to Images - Export PDF pages as JPG/JPEG
- Rotate - Rotate pages (90°, 180°, 270°)
- Repair - Fix corrupted PDF files
- Convert to Word - Export PDF as DOCX documents
- Extract Text - Extract plain text from PDFs
- Extract Info - View PDF metadata and properties
Interface Features:
- Drag & drop file selection
- Real-time progress tracking
- Multi-language UI (English, German, Turkish)
- Light and dark themes
- Native window frame with a compact, modern layout
Quick Start
Option 1: Download Executable (Recommended)
- Download the latest release from Releases
- Run
SafePdf_v<version>_iwin64.exeto install, orSafePdf_v<version>_portable_win64.exefor the portable build - Start SafePDF from the Start menu or the portable executable
Linux and macOS users can install the package from PyPI or run the app from source (see below).
Option 2: Install from PyPI
Requirements:
- Python 3.8+
- pip
Installation:
# Install from PyPI
pip install SafePDF
# Optional extras
# OCR support: pip install "SafePDF[ocr]"
# All optional extras: pip install "SafePDF[full]"
# Run the app
safepdf
Option 3: Run from Source
Requirements:
- Python 3.8+ with
venv - pip
- On Linux, Tk is also required (for Debian/Ubuntu:
sudo apt install python3-tk)
# Clone the repository
git clone https://github.com/mcagriaksoy/SafePDF.git
cd SafePDF
# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install core dependencies
python -m pip install --upgrade pip
pip install -r requirements.txt
# Optional extras
# OCR support: pip install ".[ocr]"
# All optional extras: pip install ".[full]"
# Run the application
python run_safe_pdf.py
Troubleshooting: If you get
ModuleNotFoundError(for exampleNo module named 'pypdfium2'), the system Python is being used instead of the project virtual environment. Activate the venv first (source .venv/bin/activate) or run.venv/bin/python run_safe_pdf.py. Thesafepdfcommand installed bypip/pipxmay point to a separate installation, so run the source checkout explicitly when testing local changes.
OCR note: OCR uses Tesseract. Install the Python extra with SafePDF[ocr] and make sure the Tesseract OCR application is installed on your system as well.
How to Use
- Select Operation - Choose what you want to do (compress, split, merge, etc.)
- Select File - Drag & drop your PDF or click to browse
- Adjust Settings - Configure operation-specific options
- Execute - Click to process your file
- View Results - See output and open the processed file
Development
Project Structure
SafePDF/
├── SafePDF/
│ ├── assets/ # Icons and operation graphics
│ ├── ctrl/ # Controllers
│ ├── installer/ # Inno Setup / InstallForge scripts (Windows)
│ ├── logger/ # Logging
│ ├── ops/ # PDF operations
│ ├── test/ # Test suite
│ ├── text/ # Localized UI content
│ └── ui/ # User interface
├── docs/ # Marketing website (safepdf.de)
├── img/ # README screenshots
├── scripts/ # CI/release build helpers
├── run_safe_pdf.py # Main launcher
└── requirements.txt # Dependencies
Website
The marketing site lives in docs/ and is published at safepdf.de. It is plain HTML, CSS and JavaScript with no build step:
cd docs
python3 -m http.server 8000
# open http://localhost:8000
The homepage and the converter pages are also available in German (docs/de/) and Turkish (docs/tr/). Language switching uses real, static URLs so search engines index each language separately — no client-side machine translation.
Releasing
Releases are driven by version tags. The version in SafePDF/__init__.py (__version__) is the single source of truth and must match the tag.
# 1. Bump __version__ in SafePDF/__init__.py (and SafePDF/version.txt)
# 2. Commit, then create and push a matching tag
git tag v1.2.0
git push origin v1.2.0
Pushing a v* tag triggers two GitHub Actions workflows:
release.yml— verifies the tag matches__version__, builds the Windows portable executable with PyInstaller, packages the per-user installer with Inno Setup (SafePDF/installer/safepdf.iss), and publishes a GitHub Release withSafePdf_v<version>_iwin64.exeandSafePdf_v<version>_portable_win64.exe.publish-pypi.yml— publishes the sdist and wheel to PyPI (Trusted Publishing), which is how Linux and macOS users get SafePDF viapip install SafePDF.
Each released executable is also given a signed build-provenance attestation (via actions/attest-build-provenance). Anyone can verify that a downloaded file was produced by this repository's release workflow:
gh attestation verify SafePdf_v1.2.0_iwin64.exe --repo mcagriaksoy/SafePDF
Build the Windows artifacts locally with:
pip install -r requirements.txt pyinstaller
python scripts/build_windows.py # -> SafePDF/dist/SafePdf_v<version>_portable_win64.exe
# then compile the installer with Inno Setup's ISCC.exe and SafePDF/installer/safepdf.iss
The legacy InstallForge flow (python SafePDF/build_installer.py) still works for local Windows builds that use InstallForge.
Contributing
Contributions are welcome! Please:
- Report bugs via Issues
- Submit pull requests for improvements
- Follow existing code style
Support
- Website: safepdf.de · Deutsch · Türkçe
- Guides: Offline PDF tools · Secure PDF processing
- Email: info@safepdf.de
- Bug reports & feature requests: GitHub Issues
License
Released under GPL-3.0 by @mcagriaksoy.
Support the Project
Made for privacy-conscious users
Metadata
Release files for SafePDF 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| safepdf-1.1.1.tar.gz | 1.9 MB | With provenance | Details for safepdf-1.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| safepdf-1.1.1-py3-none-any.whl | Python 3 | none | any | Details for safepdf-1.1.1-py3-none-any.whl |
Total release size: 3.9 MB
Release files / safepdf-1.1.1.tar.gz
| Download URL | safepdf-1.1.1.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ebe0175cf386a3772aa879796035fa68d46201450d8beef94d50cc78ae1934fa
|
|
BLAKE2b-256 checksum How to use checksums |
d00a5608e7483c003d1ec432317ecb41ea1a66969f5ebc88c59661e8fd1e86c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / safepdf-1.1.1-py3-none-any.whl
| Download URL | safepdf-1.1.1-py3-none-any.whl |
|---|---|
| Size | 2.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09b6d6e344318fbb43735cf9901a6fda69be2a89923d9eef75847d0c3ec56f30
|
|
BLAKE2b-256 checksum How to use checksums |
896790e1a20319107804b266c856f5aad89471bceb12d2f7af8f002a517f9a5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logSecurity for SafePDF 1.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for safepdf-1.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.