einspect is a small desktop app for viewing EXIF metadata embedded in local image files. Select a file and the app displays each metadata entry's IFD, tag, and value in a readable table.
Files are parsed locally by the Rust backend; einspect does not upload the selected file.
- Native, single-file picker
- EXIF output grouped into IFD, tag, and value columns
- Entry count and selected filename in the app header
- Support for common image containers and several camera RAW formats
- Cross-platform desktop shell powered by Tauri
The image picker accepts:
- JPEG (
.jpg,.jpeg) - PNG (
.png) - HEIC/HEIF (
.heic,.heif) - AVIF (
.avif) - TIFF (
.tif,.tiff) - Phase One IIQ (
.iiq) - Fujifilm RAF (
.raf) - Canon CR3 (
.cr3)
The picker also exposes MP4, MOV, 3GP, MKV, WebM, and MKA files. Track metadata for those video and audio formats is not currently displayed because the backend uses nom-exif's image EXIF reader. A file with no readable EXIF entries is shown as no exif data.
- Node.js 20.19+ or 22.12+
- pnpm
- A Rust toolchain
- The Tauri 2 prerequisites for your operating system
Install the dependencies:
pnpm installLaunch the desktop app in development mode:
pnpm tauri devTauri starts the Vite development server automatically on port 1420 and opens the native application window. Running pnpm dev by itself only serves the frontend; file selection and metadata extraction require the Tauri runtime.
Create a release build and platform-specific installer:
pnpm tauri buildGenerated bundles are written beneath src-tauri/target/release/bundle/.
Run the Svelte and TypeScript checks:
pnpm checkBuild the static frontend:
pnpm buildCheck the Rust backend:
cargo check --manifest-path src-tauri/Cargo.tomlsrc/routes/+page.svelteopens Tauri's native file dialog.src/lib/core/exif.tssends the selected path to theextract_exif_dataTauri command.src-tauri/src/exif.rsreads the file withnom-exifand serializes each EXIF entry into anifd,tag, andvaluestring.- The Svelte frontend renders the returned entries in a table.
Parsing failures and files without readable EXIF metadata currently produce the same empty result.
src/
├── lib/core/exif.ts # Typed frontend wrapper for the Tauri command
└── routes/
├── +page.svelte # File picker and metadata table
└── layout.css # Tailwind CSS and daisyUI theme setup
src-tauri/
├── capabilities/ # Tauri window permissions
├── src/exif.rs # Rust EXIF extraction command
├── src/lib.rs # Tauri application and plugin setup
└── tauri.conf.json # Window, build, and bundle configuration
- Tauri 2
- Svelte 5 and SvelteKit
- TypeScript
- Rust and nom-exif
- Tailwind CSS 4 and daisyUI 5