Projects

Desktop Image Resizer App

2022·2 min read

Electron
Tailwind CSS
TypeScript
GitHub (opens in a new tab)

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.

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.

App screenshot

✨ 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-js for in-app notifications
  • Dev — nodemon for reloading during development

🙌 Credits#

Built by Mohamed Gado.

More projects

  • Old Portfolio2022 · React
  • Quiz App2022 · React
  • Puzzle Game2022 · React
All projects