Skip to content

Repository files navigation

Jdot Utilities

Local file utilities — conversion, PDF tools, and more.

No cloud. No account. No upload. Your files never leave your computer.

A single Windows app that bundles many file utilities behind one clean, offline interface.


What is it?

Jdot Utilities is an offline desktop app (Windows .exe) for the everyday file chores that usually send you to a sketchy upload-your-file website: converting documents and images, and a full set of PDF tools. Everything runs on your machine — there is no server, no account, and no network call at runtime.

It's built around a tool registry: every utility is one self-describing file, and the interface builds itself from what those files declare. Adding a new converter doesn't touch the UI.

Inspired by the idea of all-in-one converters like ConvertX, but its own independent project — a native offline desktop app rather than a self-hosted web server.


Highlights

  • Fully offline & private. No telemetry, no uploads, no accounts. Verifiable — there are no network calls in the code.
  • Drop-and-go. The Convert tab's Home landing auto-detects a dropped file's type and routes it to the right tool.
  • Real PDF toolkit — merge, split, rotate, delete/extract pages, images↔PDF, PDF→images, PDF→text, OCR, watermark, and two ways to compress.
  • Shrink a PDF with nothing installed — the built-in shrinker needs no Ghostscript; ideal for scans and phone-photo PDFs.
  • Document conversion — Markdown, HTML, Word (.docx), plain text, PDF — any-to-any.
  • Documents & Ebooks — Word, ODT, EPUB, LaTeX (.tex), reStructuredText, Org, AsciiDoc, Markdown, HTML and Jupyter notebooks, powered by a bundled pandoc (no install) that runs sandboxed and fully offline.
  • Video & Audio — MP4, MKV, MOV, WebM, AVI, GIF and MP3/WAV/FLAC/AAC/M4A/OGG/Opus, with audio extraction and video→GIF, via a bundled ffmpeg (no install, offline). Its own top-level tab.
  • Ebooks — EPUB, Kindle (MOBI/AZW3), FB2, comics and more, via Calibre (an optional one-click install).
  • Image conversion — PNG, JPG, WebP, AVIF, TIFF, GIF, BMP, Windows ICO, plus HEIC/HEIF (iPhone photos), with resize presets and quality.
  • Tells you what's missing — if an optional engine isn't installed, the app says so on launch and on the tool, instead of failing after you press Convert. LibreOffice can be installed in one click via Windows Package Manager.
  • Verifiably offline — the PDF renderer runs in a session that refuses every non-local address, and a test asserts remote requests are blocked while local images still load.
  • Data conversion — JSON, YAML, CSV, TSV, XML, any-to-any.
  • Office (via installed LibreOffice) — Word, spreadsheet, and presentation families, each to PDF.
  • All Tools tab — every capability as a simple card: what it does and its formats, one click to open.
  • Visual page picker — Rotate, Delete, and Extract show page thumbnails; click to choose pages instead of typing numbers, and see the rotation before you apply it.
  • Reorder before merging — drag files into order (or use the up/down buttons) when merging PDFs or building a PDF from images.
  • Batch — drop 100+ files, per-file progress, a concurrency limit, cancel, and sorting by name, date, size, or type.
  • Three themes — Light, Grey, Black, with the brand-blue accent.

Tools in the app today

Tool Category Converts
Document Converter Document md · html · docx · txt → html · md · txt · pdf · docx
Image Converter Image png · jpg · webp · avif · tiff · gif · svg · heic · heif · bmp · ico → png · jpg · webp · avif · tiff · gif · bmp · ico
Data Converter Data json · yaml · csv · tsv · xml (any → any)
Word / Spreadsheets / Presentations Office docx·doc·odt·rtf / xlsx·xls·ods·csv / pptx·ppt·odp — each → pdf (needs LibreOffice)
Merge PDFs PDF many PDFs → one
Split PDF PDF one PDF → many (per-page / every-N / ranges)
Rotate / Delete / Extract pages PDF pdf → pdf
Images → PDF PDF images → one PDF
PDF → Images PDF pdf → png / jpg per page
PDF → Text PDF pdf → txt (text layer)
OCR → Text PDF scanned pdf / image → txt (offline OCR)
Shrink PDF (built-in) PDF pdf → smaller pdf, no extra software (pages become images)
Compress / PDF-A PDF pdf → smaller pdf keeping text, or archival PDF/A (needs Ghostscript)
Watermark PDF PDF stamp diagonal text on every page
Edit PDF Info PDF set title / author / subject / keywords

Full capability list — current and planned — is in FORMATS.md. Release notes are in CHANGELOG.md.


Install

Users: grab the latest .exe from the Releases page — either the installer or the single-file portable build. No setup, no dependencies.

Two tools use an external engine (both auto-detected; path configurable in Settings). The app checks for them on launch and tells you if either is missing, rather than failing mid-conversion:

  • Office conversions need LibreOffice.
  • Compress / PDF-A needs Ghostscript (or a bundled copy — see below). For plain compression you don't need it at all — Shrink PDF (built-in) works with nothing installed.

Everything else — including OCR, which ships its own English model — is self-contained and works with no setup.

Note on unsigned builds: releases aren't code-signed yet, so Windows SmartScreen may warn on first run ("More info → Run anyway"). Signing is wired into the build (see Code signing) and just needs a certificate.

The window opens but nothing is clickable

On some machines — outdated or broken GPU drivers, virtual machines, or remote desktop sessions — an accelerated window can open but never become interactive. The app now detects a GPU-process crash or a startup hang and automatically restarts itself with hardware acceleration turned off. If it ever stays frozen, force software rendering yourself, no UI needed:

  • Launch once with --safe-mode (e.g. "Jdot Utilities.exe" --safe-mode), or
  • set the environment variable JDOT_DISABLE_GPU=1 before launching.

Either one starts the app in software-rendering mode and remembers the choice, so later launches stay that way. You can flip it back under Settings → Performance → Hardware acceleration.


Run from source (development)

git clone https://github.com/AxialForge/jdot-utilities.git
cd jdot-utilities
npm install
npm run dev

Node 20+ to run the app; Node 22+ to run npm test (the test script uses a node --test glob that needs Node 21+). npm install fetches the prebuilt native binaries (sharp, @napi-rs/canvas). If a postinstall is blocked on npm 11+, run npm approve-scripts electron once.

Build the Windows .exe

npm run build:win        # NSIS installer + portable .exe -> ./dist
npm run build:portable   # single-file portable .exe only

Build on Windows (or the Windows CI runner) so the correct native binaries are fetched. The app icon comes from build/icon.ico.

Pushing a tag builds and publishes a release automatically — see .github/workflows/build.yml:

git tag v0.5.0 && git push origin v0.5.0   # → CI builds the .exe, attaches it to a Release

Code signing

Signing is wired into the build; it just needs a certificate. Set two environment variables (locally, or as repository secrets for CI) and the .exe is signed:

Variable Value
CSC_LINK your code-signing .pfx as base64, or a path to it
CSC_KEY_PASSWORD the .pfx password

Without them, the build succeeds unsigned (Windows SmartScreen will warn on first run).

Optional: bundle Ghostscript

Compress / PDF-A uses Ghostscript. It auto-detects an installed copy, or you can ship one inside the app: put gswin64c.exe and its DLLs in resources/bin/ and enable the extraResources entry in electron-builder.yml.

Tests

npm test                          # 184 unit/integration tests (plain Node)
npx electron test/electron-pdf.js # PDF-output checks (needs Chromium)
npx electron test/electron-ops.js # collect/explode + OCR tools end-to-end

Ghostscript tests skip themselves when gs isn't installed.


How it works

The heart of the app is a tool registry and three "kinds" that describe how a utility moves files. That's all the UI and the runners need — everything else is the tool's own business.

Kind Flow Examples
convert N in → N out (one output per input) Image, Document, Rotate/Delete/Extract, PDF→Text
collect N in → 1 out Merge PDFs, Images→PDF
explode 1 in → N out Split PDF, PDF→Images

A tool is a single file in src/tools/ that exports a descriptor and its handler. The registry auto-discovers it; the rail, format list, and option fields render themselves from what it declares. No central switchboard to edit.

src/
  config.js              Branding in one place (rename the app here)
  main/                  Electron main process (CommonJS) — IPC + all Node-side work
    registry.js          Auto-discovers tools; validates the three kinds
    convert.js           Batch runner: concurrency, cancel, collision-safe naming
    ops.js               Runners for collect (N→1) and explode (1→N)
    pdfops.js            PDF merge/split/rotate/delete/extract (pdf-lib)
    pdftext.js pdfraster.js   PDF → text / images (pdfjs + @napi-rs/canvas)
    imgpdf.js htmlutil.js pagespec.js pdfrender.js  …supporting engines
    office.js            LibreOffice locator + headless convert
  tools/                 One file per utility (auto-discovered)
  renderer/index.html    The entire UI — self-contained, no build step

For the full developer guide (architecture, gotchas, how PDF metadata is handled, the ESM-pdfjs wrinkle, etc.) see CLAUDE.md.


Adding a tool

  1. Copy src/tools/_template.js to src/tools/your-tool.js.
  2. Fill in the descriptor: id, name, category, kind, inputFormats, outputFormats, optional options and excludePairs.
  3. Implement convert() (for convert) or run() (for collect/explode).
  4. Restart. It appears in the right tab automatically (PDF-category tools go to PDF Tools, everything else to Convert).

A tool can be pure JavaScript, use a prebuilt native module (like sharp), or shell out to a bundled binary (the ffmpeg/pandoc sidecar pattern is documented in _template.js). Either way it stays offline — the binary ships inside the app.


Roadmap

Shipped so far: the PDF toolkit, OCR, data conversion, compression (both with and without Ghostscript), and BMP/ICO. Next up, each a focused block because each adds a large binary or a new engine:

  • Bundle LibreOffice so Office conversions need no install (~400 MB).
  • Audio/video via a bundled ffmpeg (~80 MB).
  • More document formats via a pandoc sidecar (LaTeX, EPUB, AsciiDoc…).

The complete plan, with the engine and bundle cost for each, is in FORMATS.md.


Privacy

Jdot Utilities makes no network requests on its own — no telemetry, no accounts, no automatic checks of any kind. Your files are read and written locally and nothing is ever transmitted. It works with the network cable unplugged, by design.

The one and only time it touches the network is when you press Settings → Check for updates, which asks GitHub whether a newer version exists. Nothing downloads or installs without a further, explicit click, and the app never checks on its own — so if you never press it, it never connects.

Code signing

These builds are not code-signed yet — Windows SmartScreen may warn on first run ("More info" → "Run anyway"). Signing is being set up through the SignPath Foundation open-source program; the policy below describes how it will work once it's live.

Once active: free code signing provided by SignPath.io, certificate by SignPath Foundation.

  • Builds are produced from public source by GitHub Actions on a version tag (see .github/workflows/build.yml), with the product name and version set as signed metadata. Signing is requested only for tagged releases, and each signing request is approved manually before the signed build is published.
  • RolesAxialForge (Joseph Costarella) is the sole maintainer: author, committer and reviewer of all changes, and the approver of each release and signing request.
  • PrivacyThis program will not transfer any information to other networked systems unless specifically requested by the user. The only such action is the optional, manual Check for updates described above. No telemetry, no analytics, no account.

The same policy is published on the download page.

License

MIT — see LICENSE.

About

Offline Windows app bundling many file utilities — document & image conversion plus a full PDF toolkit. Local, private, no uploads. Electron + a one-file-per-tool registry.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages