Image Shutter is a fast and reliable SVG viewer designed to display and interact with SVG files. Built as part of a shared Rust core, it provides efficient performance while maintaining simplicity for users who need precise image viewing.
Key Features:
Image Shutter includes lightning-fast rendering for smooth and responsive SVG viewing.
It benefits from a monorepo structure that shares resources across six file-viewer applications.
The application has a pure Rust foundation, ensuring stability without unnecessary dependencies.
Image Shutter is available via winget, allowing easy installation with commands like "winget install image-shutter."
Target Audience and Benefits:
Ideal for designers, developers, and professionals working with SVG files, Image Shutter offers reliable performance in a lightweight package. Its efficient design ensures it runs smoothly across systems, making it a practical tool for anyone needing precise image management.
Image Shutter is available via winget, simplifying deployment for users who prefer automated solutions.
README
window
A monorepo for six small desktop file-viewer applications that share a framework-free Rust core and (for the Tauri apps) shared frontend packages.
One repo, one lockfile, one toolchain, six independently-built binaries.
App
Format
Stack
data-framer
CSV / Parquet
Tauri v2 + Vue 3 (Polars)
map-windower
GeoJSON
Tauri v2 + Vue 3 (MapLibre)
doc-viewer
PDF
Tauri v2 + Vue 3 (PDF.js)
image-shutter
SVG
egui / eframe + resvg (cargo-packager)
drawing-paner
DXF
egui / eframe + dxf (cargo-packager)
model-glazer
STL/OBJ/3MF
egui / eframe + glow 3D (cargo-packager)
Layout
crates/ window-core (pure Rust), window-tauri
packages/ @window/ui, @window/bridge, @window/config (consumed by the three Tauri apps)
apps/ data-framer, map-windower, doc-viewer, image-shutter, drawing-paner, model-glazer
The egui apps (image-shutter, drawing-paner, model-glazer) are crates under apps/, not
crates/ — they share window-core but none of the frontend packages.
Toolchain
Rust pinned via rust-toolchain.toml.
JS managed with npm workspaces (one root package-lock.json).
Frontend formatting via Vite+ (vp), a global binary — install with
irm https://vite.plus/ps1 | iex (Windows) or curl -fsSL https://vite.plus | bash
(macOS/Linux). Used by just fmt.
Getting started
just init # npm install (JS workspaces)
just dev data-framer # run a Tauri app in dev
just run image-shutter # run the egui app
just build # cargo build --workspace
just fmt # cargo fmt + vp fmt
just lint # clippy -D warnings