A lightweight Windows photo viewer built with WinForms and .NET 10. It uses only the Windows Desktop framework and built-in .NET namespaces—no third-party packages.
- Open an image, a folder, a dropped file, or a path passed on the command line
- Browse all supported images in a folder with wraparound navigation
- Fit-to-window and actual-size views
- Mouse-wheel zoom and click-drag panning
- Rotate images left or right without changing the source file
- Full-screen mode and an automatic slideshow
- A dark interface with a custom application icon and high-contrast controls
- An icon-and-text toolbar that keeps common actions easy to recognize
- Persistent settings with live previews for the application font, theme colors, and slideshow interval
- Secure self-updates from GitHub Releases, with an optional automatic startup check
- Status details for filename, dimensions, folder position, and zoom
- Loads images without keeping source files locked
Supported formats: BMP, GIF, ICO, JPEG, PNG, and TIFF.
- Windows 10 or later
- .NET 10 SDK to build from source
dotnet build
dotnet runYou can also open an image or folder at launch:
dotnet run -- "C:\Pictures\photo.jpg"| Action | Shortcut |
|---|---|
| Open image | Ctrl+O |
| Open folder | Ctrl+Shift+O |
| Previous / next image | Left / Right |
| Zoom in / out | + / - |
| Fit to window | F |
| Actual size | 1 |
| Full screen | F11 |
| Leave full screen | Esc |
| Start / stop slideshow | F5 |
| Rotate left / right | Ctrl+L / Ctrl+R |
| Open settings | Ctrl+, |
Mouse controls: use the wheel to zoom, drag to pan, and double-click to switch between fit and actual size.
Each GitHub Actions run produces Windows x64 and ARM64 packages in two forms:
- Framework-dependent: smaller download; requires the .NET 10 Desktop Runtime.
- Self-contained: larger download; includes the .NET runtime and does not require a separate installation.
Both package types use a single-file executable and are available from the workflow run's Artifacts section for 14 days.
Photo Viewer checks GitHub Releases at most once per day by default. Disable the startup check under View → Settings, or run a check at any time with Help → Check for updates. Updates use the self-contained package for the current architecture and are installed only after the archive matches the published SHA256SUMS.txt checksum.
To publish a permanent GitHub Release containing all four packages and a SHA256SUMS.txt file, push a version tag:
git tag v1.0.0
git push origin v1.0.0GitHub automatically generates the release notes from merged pull requests. The repository's .github/release.yml groups entries into breaking changes, features, fixes, documentation, dependencies, maintenance, and other changes. Apply the skip-changelog or ignore-for-release label to omit a pull request from the notes.
- Structured forms label bug reports, feature requests, and questions for triage.
- Pull requests receive a checklist and labels based on the files changed.
- Inactive issues and pull requests receive a warning before automatic closure.
- Dependabot checks GitHub Actions for updates every week.
- Markdown under
wiki/is automatically published when GitHub Wiki support is available; otherwise the workflow preserves the version-controlled pages without failing CI.
Report security vulnerabilities privately by following SECURITY.md. Photo Viewer is available under the MIT License.