Fast Windows image viewer by CyberGems — open, browse a folder, zoom/pan, and light edit (rotate, crop, resize, adjust). Built with Electron and vanilla JS (small app layer; Chromium runtime included).
Version: 1.8.1 · Stack: Electron 35 · Vanilla JS
CyberViewer/
├── main.js Electron main process (IPC, tray, protocol)
├── preload.js contextBridge → window.electronAPI
├── CyberViewer.html Shell markup
├── css/app.css Styles
├── js/
│ ├── app.js Renderer UI logic
│ └── media-helpers.js Pure helpers (mediaUrl, canvasExport, …)
├── lib/ Shared Node helpers (paths, thumb cache, updater, bounds)
├── i18n/
│ ├── menu.json Menu/tray/dialog strings (EN/ES)
│ ├── ui.json Renderer UI strings (source of truth)
│ └── ui.js Generated loader for the renderer (`npm run i18n:sync`)
├── assets/ Icons
├── package.json
└── test/ Node unit tests
- Node.js LTS → https://nodejs.org
- Windows x64 (primary target)
cd C:\path\to\CyberViewer
npm install
npm startnpm test
npm run lintnpm run build # NSIS installer + portable
npm run build:portable # portable onlyOutputs land in dist/:
| Artifact | Description |
|---|---|
CyberViewer-Setup-1.8.1.exe |
NSIS installer |
CyberViewer-Portable-1.8.1.exe |
Portable build |
Place these under assets/ before a production build:
icon.png— PNG for window/tray/UI (dev)icon.ico— multi-size ICO (packaged exe / Windows)
Installed (NSIS) builds use electron-updater against GitHub Releases:
- About → Check for Updates (or menu Help)
- Download update when a newer version is available
- Install & restart to run the NSIS installer
Download/install is always user-requested. With “Check for updates on startup” on (default), the app may notify on startup that an update exists (toast + About banner), but will not download until you ask.
Portable builds cannot self-update in-app — use Open releases page.
Release tags (v*) must publish latest.yml, .blockmap, and the Setup .exe (see .github/workflows/release.yml).
webSecurityis enabled; HTML ships a Content-Security-Policy.- Local images are served through the
cvlocal://protocol (streamed) with a path allowlist. - Allowlist expansion from the renderer only accepts existing image files (
register-paths);validate-pathschecks existence without widening access. - Folder scans only run for neighbors of an existing image file.
- Renderer has
nodeIntegration: falseandcontextIsolation: true. - DevTools IPC is disabled in packaged builds.
JPG · JPEG · PNG · GIF · WEBP · BMP · TIFF
The NSIS setup includes a page with a checkbox (checked by default):
Set CyberViewer as the default image viewer
When enabled, the installer writes per-user (HKCU) associations for common image extensions so double-click opens CyberViewer. Windows 10/11 may still ask you to confirm defaults under Settings → Apps → Default apps.
The portable build does not register system associations; use the in-app Context Menu option or Windows defaults UI.
CyberGems © 2026