A fast, lightweight desktop application for combining multiple PDF files into one or splitting them apart. Built with Tauri (Rust) and Svelte.
cargo install tauri-cliLinux/WSL additional dependencies:
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
# Install dependencies
npm install
# Run in development mode (hot reload)
npm run tauri dev
First run will compile the Rust backend which takes a few minutes. Subsequent runs are fast.
npm run tauri build
Output binary location: src-tauri/target/release/bundle/
.deb and .AppImage in bundle/deb/ and bundle/appimage/.msi and .exe in bundle/msi/ and bundle/nsis/.dmg and .app in bundle/dmg/ and bundle/macos/pdf-combiner/
├── src/ # Frontend (Svelte)
│ ├── routes/
│ │ └── +page.svelte # Main UI component
│ └── app.css # Tailwind CSS
├── src-tauri/ # Backend (Rust)
│ ├── src/
│ │ └── lib.rs # PDF combining logic
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── package.json
└── vite.config.js
| Layer | Technology |
|---|---|
| Frontend | Svelte 5, TypeScript, Tailwind CSS |
| Backend | Rust, lopdf |
| Framework | Tauri 2 |
| Build | Vite, Cargo |
lopdf to read PDF structure and page counts| Command | Description |
|---|---|
npm run tauri dev |
Start development server with hot reload |
npm run tauri build |
Build production binary |
npm run build |
Build frontend only |
npm run dev |
Run frontend dev server only (no Tauri) |
Edit src-tauri/tauri.conf.json:
{
"app": {
"windows": [{
"title": "PDF Combiner",
"width": 700,
"height": 600,
"minWidth": 500,
"minHeight": 400
}]
}
}
Edit src-tauri/Cargo.toml for Rust package info and src-tauri/tauri.conf.json for app identity.
If running on WSL, you need a display server:
VS Code with extensions:
MIT