Skip to main content

SafePDF - Privacy-First PDF Toolkit

SafePDF Banner

GitHub release License stars - SafePDF

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.

Download SafePDF

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

SafePDF Interface

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

SafePDF interface

How to Use

Quick Start

  1. Download the latest release from Releases
  2. Run SafePdf_v<version>_iwin64.exe to install, or SafePdf_v<version>_portable_win64.exe for the portable build
  3. 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 example No 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. The safepdf command installed by pip/pipx may 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

  1. Select Operation - Choose what you want to do (compress, split, merge, etc.)
  2. Select File - Drag & drop your PDF or click to browse
  3. Adjust Settings - Configure operation-specific options
  4. Execute - Click to process your file
  5. 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 with SafePdf_v<version>_iwin64.exe and SafePdf_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 via pip 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

License

Released under GPL-3.0 by @mcagriaksoy.

Support the Project

Buy Me A Coffee

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)

Source distribution for SafePDF 1.1.1
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)

Table of built distributions (wheels) for SafePDF 1.1.1
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page