A desktop image resizer that never touches the network. Pick a PNG, JPEG or GIF, type a width and a height, and the resized copy lands in ~/imageresizer — no upload, no account, no service quietly retaining a copy of your files.
The structure is the textbook Electron split. The renderer is plain HTML and CSS; the resize itself runs in the main process, where resize-img writes the output and the app opens the destination folder when it finishes; and the two talk over IPC — the renderer emits image:resize with a path and dimensions, and ipcMain handles it. Keeping filesystem work on one side of that boundary is the entire point of the architecture.
The window configuration is also a good example of how easy that boundary is to undermine by accident: it sets contextIsolation: true and a preload script, which is right, but leaves nodeIntegration: true alongside it, which contradicts the intent. Context isolation is doing the real work here, and the correct configuration turns nodeIntegration off and exposes exactly the functions the renderer needs through contextBridge in the preload — nothing more.
Electron 21 with resize-img, toastify-js for in-app notifications, and a native application menu. Cross-platform across macOS, Windows and Linux.
Resize images locally on your desktop — a small cross-platform Electron app.
A lightweight desktop app for resizing PNG, JPEG, and GIF images to any width × height. Pick a file, type the dimensions, and the resized copy lands in your home folder — no upload, no cloud, all local.
✨ Features#
- Native desktop window (macOS / Windows / Linux) via Electron
- File picker for PNG, JPEG, and GIF inputs
- Auto-fills the form with the source image's current width & height
- Resize to any custom width × height in pixels
- Writes the output to
~/imageresizer/and opens that folder when done - Toast notifications for success and validation errors (via
toastify-js) - Native app menu with quit shortcut and an About window
🛠️ Tech Stack#
- Runtime — Electron 21 (main + preload + renderer with
contextIsolation) - Image processing —
resize-img - Renderer — plain HTML/CSS/JS, Poppins via Google Fonts
- UX —
toastify-jsfor in-app notifications - Dev —
nodemonfor reloading during development
🙌 Credits#
Built by Mohamed Gado.
