Repository navigation
Releases: TonyMontania/Omnio
Release list
v0.5.7
Fixed
- AppImage opens on every launcher. The AppImage shipped with folders and launch scripts that only the build user could read or run, so firejail-based launchers and the AppImage catalog stopped with
Permission denied. Every file and folder inside it is now readable, the launchers are executable, and each release is checked for this before it's published. - Installed builds keep your library in the right place. The Windows installer, MSI, macOS app, AppImage,
.deband.rpmused to storedata/andassets/next to the program itself — a folder that is read-only on several platforms or replaced on every update. They now use the system's app-data folder (%APPDATA%\com.omnio.appon Windows,~/Library/Application Support/com.omnio.appon macOS,~/.local/share/com.omnio.appon Linux). An existing library is moved there automatically the first time you open 0.5.7. The portable ZIP still keeps everything next toomnio.exe. - MusicBrainz now fills in producers. Most albums credit producers per track rather than on the album itself, so the field almost always came back empty. Album-wide producers are listed first, followed by per-track producers ordered by how many tracks they produced.
- Scrollbars use the app's style everywhere. Most views were falling back to the plain system scrollbar.
- Anime and Donghua match the other libraries. The "This season" button made the top bar taller, pushing the whole page down a few pixels.
- Visual Novels moved to Enabled libraries in Settings, next to the other libraries, instead of sitting under Extras.
Changed
- "Airs on" fills itself from "Aired from". Setting the first air date of an anime or donghua picks the matching weekday, so the show lands in the right column of This season without choosing the day by hand. Shows already in your library that have an air date but no weekday now appear there too. You can still change the day manually.
- Library toolbar reorganized. Search, view controls (smart list, grouping, sort, filters) and actions (delete, export) now sit in clear groups, and every control has the same height.
- Top-bar buttons share one size across all libraries.
- Home widgets fill their whole row. Card widgets — Continue where you left off, Currently, Recently rated, Currently airing, Finished this week, Top of the year — show only complete rows, sized to the space they have at medium or full width, so there are no half-empty rows.
- VGMdb removed from the list of metadata sources. Its public API has been offline, so it is no longer advertised as available.
v0.5.6
Added
- Home board rebuilt with new widgets. The dashboard is now cover-forward and dense:
- Currently — hero mode. The top in-progress item shows as a big card with the cover, a blurred-cover backdrop, status pill, and progress meta ("Episode 5 of 12", "12.4h played"). Everything else in progress follows below as regular cards.
- Continue where you left off. One card per in-progress series / anime / manga / book, showing the concrete next unit — Episode 6, Chapter 42, Page 187. Skips items already at the total.
- This week (airing). 7-column grid of anime, donghua and series airing each weekday, with today highlighted. Replaces the old flat "Currently airing" list in the default layout.
- Pick from your backlog. Random shuffle of 2–5 items sitting in a backlog / plan-to status, with a ↻ reshuffle button. Breaks decision paralysis without shaming.
- Random from favorites. Same shuffle mechanic but scoped to ★5 items — rediscovery of stuff you loved.
- Rating spread. Horizontal bar chart of how many items you rated at each star level.
- Finished this week. Items you marked completed in the last 7 days, with a "Today / Yesterday / 3d ago" badge on the cover.
- Top of the year (so far). ★4+ items you finished in the current calendar year. Hides itself when the list is empty.
- Genre spotlight. Your top 5 genres by count, each with a mini cover strip of representative items.
- Quick add popover. Moved out of the Home widgets and into a permanent button in the sidebar footer — pick a library, type a title, hit Enter. Works from any view.
- EXIF stripped from uploaded covers. JPEG, PNG and WebP covers you drop into the editor now have EXIF, XMP and ICC metadata removed before landing on disk. Pixel quality is preserved (no re-encoding). If you later export or share a cover, no GPS coordinates, camera make or serial number travel with it.
Changed
- Home widget frames redesigned. Cards now use a subtle top-down gradient, a stronger shadow, and an accent bar next to each title. Hover tints the border. Big numbers tiles got a bolder look — 40px value, accent gradient background, hover lift.
- Fixed Big numbers "stretch" bug. When the widget was set to medium next to another medium, its four tiles used to stretch into ugly wide bars. It now wraps into a 2×2 grid at medium and stays as 4 across at large.
- "Libraries (rich portals)" widget removed from the default layout. The sidebar already lists your libraries with counts, and the widget was mostly duplicated real estate.
- Global scrollbar redesigned. Thumb picks up an accent tint on hover; track is transparent with a hairline separator. Consistent across library, sidebar, modals and Home.
- README install docs updated. macOS Sequoia 15 doesn't accept the classic right-click Open bypass for unsigned apps anymore — the guide now points at
xattr -cr /Applications/Omnio.app. AppImage FUSE requirement is spelled out ("sudo apt install libfuse2on Ubuntu 22.04+", plus the--appimage-extract-and-runfallback). Portable ZIP warning about WebView2 is now unmissable.
Fixed
- AppImage:
Permission deniedon first launch. The v0.5.5 AppImage shipped without the executable bit onAppRun.wrapped, so firejail-based launchers (Ubuntu's default) couldn't even open the window. The release workflow now repacks the AppImage after Tauri's bundler runs, chmod-ing every launcher script and the main binary. Downstream catalogs (probonopd/AppImages) accept it.
Security
- DevTools blocked in release builds. F12, Ctrl+Shift+I / J / C / K, Ctrl+U, Ctrl+P and right-click on non-input elements no longer open developer tooling or the save-as-page menu in the packaged app. Dev builds are unaffected.
- API keys and tokens no longer appear in error logs. Query-string params matching
api_key,client_secret,token,authorization,password,secretand friends are redacted to***before any failing-URL diagnostic hits stderr. Applies to every metadata fetcher and to plugin HTTP calls.
v0.5.5
Added
- Franchise graph diagrams. New free-canvas view mode per franchise — draw the branches of a series (Zelda-style forks, prequels/sequels/side-stories, alternate timelines) as nodes and edges on an interactive canvas. Six node shapes (rect, rounded, pill, circle, diamond, plain text) and four edge routings (bezier, straight, step, smoothstep), plus arrow markers. Sits alongside the existing "by year" and "by sections" franchise modes; each franchise remembers its own preferred mode. A read-only preview also renders inside the detail modal's franchise strip.
- MusicBrainz edition picker. The music fetcher now runs in two steps: first pick the release group (the album as an abstract work), then pick the specific edition — a given pressing, region, format or reissue. Previously it silently grabbed the first release in the group. Edition-specific label, catalog number, release date and Cover Art Archive cover come through now.
- Steam Deck compatibility on the card. Games with a Deck compat set (Verified / Playable / Unsupported) get a chip on the card. Toggleable in Settings → Cards → Games → Steam Deck Compatibility.
Changed
- Game editor: every tab now reflects what it holds. Fields that had piled up in one or two tabs are now grouped by intent:
- Overview — rating, completion date, notes
- Identity — devs, publishers, platforms, release date, copy type, alt titles, genres, source + age rating, original work, franchise, plus a new Ownership block (store links, purchase log, Steam Deck + ProtonDB compat)
- Progress — status, time played, HowLongToBeat, achievements (unlocked/total + list), PCGW save paths, save files, playthroughs
- Media — cover, banner, logo, screenshots gallery
- Related — DLC, addons, bundle contents, related games, recommendations
- Notes — review + spoiler toggle
- Library view selector is now a compact dropdown. The row of six buttons (List / Grid / Compact / Kanban / Timeline / Diary) was taking up too much of the topbar. Replaced by a single trigger showing the current view; the menu lists all options with a one-line hint each.
- Ownership block: cleaner empty state. Store links, purchase log, and platform compat sit under one section with less redundant help text. Steam Deck compat switched from pills to a select so it lines up with ProtonDB.
v0.5.4
Added
- Home widget: On this day. Anniversary flashback — surfaces items you finished on today's month + day in past years, grouped by "N year(s) ago". Reads
finishedAt(ISO yyyy-mm-dd) and skips anything without one. Respects the no-guilt rule: hides itself completely on days with nothing to show, never nags with an empty state. - Drag & drop widget reordering. Home layout editor now lets you grab any widget card and drop it into a new slot. The dropped-onto card shows an accent bar on the edge that faces the source; the source card fades to 40% and gets a dashed outline. The ↑ / ↓ buttons stay for keyboard users.
- Statistics: cross-library genre heatmap. Matrix of the top-N genres across every library, with cell intensity scaled log-normalised to the item count. One-off genres (< 2 items total) are filtered out. Row totals sit in a separate column at the right; hover a cell for the exact count.
- Statistics: added vs finished chart. Two bars per month over the last 6/12/24/36 months — items you added (from
createdAt), items you finished (fromfinishedAton the strict-completion path, plusconsumed=truefor Movies and Music). Optional library scope picker. Not a scoreboard: no growing-backlog alerts, no comparisons. - HowLongToBeat fetcher for Games. New source in the Games "Fetch metadata" panel. Reads main story / main + extras / completionist estimates directly from howlongtobeat.com and fills
hltbHours— feeds the "Shortest to beat" backlog sort. Discovers the API endpoint from the site's_app-*.jsbundle every 6 hours so token rotations self-heal. - Last.fm sync via API (Music). Second Last.fm importer alongside the existing CSV path — no export tool needed. Set your API key + username in Settings → Integrations, then pull your top-scrobbled albums for any period (overall / 7 days / 1 month / 3 / 6 / 12) directly. Each accepted match marks the album as listened and appends a Note entry to its history log with the playcount and today's date.
- ICS export includes per-episode events. Toggle in the Release calendar header — when on, every upcoming episode of a currently-airing anime / donghua / series gets its own whole-day VEVENT in the exported
.ics. Anchored toairedFrom + (episodesWatched × 7d)so episode numbers stay in sync with the calendar; falls back to next-airing-day-from-today when there's noairedFrom. Capped at 60 events per item and 1 year in the future whentotalEpisodesis unknown, so long-runners don't dump hundreds of years of weekly events into your calendar. - Book ISBN quick-lookup. New Lookup button next to the ISBN field in the Book editor (Enter also triggers it). Cleans the pasted string, hits OpenLibrary with
isbn:<value>, fetches the/worksdescription, and pipes the whole thing through the sameapplyFetchedPatchthe full OpenLibrary fetcher uses. Fills title, authors, publisher, page count, release date, description, cover. Reading status, rating, notes, log and everything else personal is left alone. - Local music folder scanner. New importer under Settings → Data → Import — point at your music root and Omnio walks the tree in Rust, returning one row per detected album folder. Recognizes both nested (
Artist/Album/track.mp3) and flat (Artist - Album/track.mp3) layouts with every year format in the wild —Album (2015),[2015] Album,2015 - Album,Album - 2015, bracketed, parenthesized, braced. Multi-disc albums (CD1/Disc 2/Vol. 3subfolders) are rolled up into one entry. Grouping folders (Discography/Studio Albums/Live/EPs/Singles/Compilations/Bootlegs/Demos/Rarities/Remixes/Soundtracks/OST) descend without stealing the artist hint. Side folders (Artwork/Scans/Booklet/Logs/ …) are skipped entirely. 18 audio extensions covered (mp3, flac, m4a, m4b, alac, ogg, opus, wav, wma, aiff, aif, ape, wv, dsf, dff…). Cover art picks anycover/folder/front/artworkfile; falls back to any image in the folder. Nothing hits the library until you click Import. - Auto-tag suggestions from metadata fetchers. Fetchers now surface source-specific themes as clickable chips right below the tag editor. Jikan (MAL) contributes
themes+explicit_genres; AniList sends its top-12 non-spoiler community-ranked tags; IGDB addsplayer_perspectives+game_modes+ top 8keywords; TMDb sends itskeywordslist. One click accepts a chip (moves it into your tags), ✕ dismisses just that one, "Accept all" / "Dismiss all" for the batch case. Your tags array is only touched when you click. - History log: kind picker + Nth-time counter. The
Historytab in every editor (Reread / Rewatch / Play / Listen history) now records what kind of entry each row is — Rewatched (the legacy default, no data migration needed), Started, Finished, Dropped, or Note. Each entry that counts as a completion (rewatch or finished) gets an auto-computed "Nth time" chip so you can see at a glance whether a row is your third read-through or a first-time finish. Verbs adapt per category: Anime says "Started watching", Books says "Started reading", Music says "First heard", etc.
Changed
Remember sort per libraryrespects your choice at startup. The setting only kicked in on subsequent category switches — the first-visited category still opened at "Most recent" regardless of what you had picked last session. Boot path now readscategorySortModes[lastCategory]when the toggle is on and restores the correct sort before anything renders.- Unchecking a plugin in Settings no longer removes the toggle itself. Split "unlocked" (you discovered the unlock code) from "hidden from sidebar" (a per-session sidebar preference). Un-checking now toggles a new
hiddenPluginslist — the plugin drops out of the sidebar and routing, but the row stays in Settings so you can bring it back with one click. Using the unlock code again fully re-locks (removes from Settings as before). - Watched episodes stay readable. Dropped the line-through strike on watched episode titles — combined with the dim color it made them illegible. The ✓ column already signals watched state loud and clear; the row now just softens with a gentle opacity dip.
- Detail views: no more "Genres" pills tinted with the accent. All 7 detail modals (Anime / Books / Games / Manga / Movies / Music / Series) render genres as the same neutral
card-tagchip family Visual Novels already used. - Music tracklist: favourite column trimmed. Removed the empty leftmost
col-fav— tracks now sit flush against the left border of the table. The ★ still marks favourites, inline before the track name. - Books description textarea taller. Bumped from 3 rows to 8 so long synopses stay visible without a tiny scroll box.
- Books "Progress" tab no longer crashes into the tab bar. The
.field-gridcontainer had no CSS at all, so it collided horizontally with the section header instead of stacking below it. Now forces its own row viaflex: 1 1 100%.
Fixed
- Artist member editor: status select was stealing the name input's space.
.form select { width: 100% }outranked the local.band-member-status { min-width: 140 }on specificity (0,1,1 vs 0,1,0). Chained the local rules through.band-member-topso they land at 0,2,0 and win, giving the member-name input the leftover space back. - Home widgets that self-hide no longer leave an empty card. HomeBoard now checks whether a widget's render returned
nulland, outside edit mode, skips the whole card. In edit mode the frame still renders so it can be moved / resized / removed. - The IPC map now knows about
hltb:*,lastfm:*,music:*. New fetcher channels were arriving with{}payloads at the Rust side because the shim couldn't translate positional args into named ones. Registered every entry; HowLongToBeat / Last.fm / music-folder scan now actually reach the backend.
Removed
- SQLite FTS5 PoC. Experimented with an in-memory FTS5 modal (Ctrl+Shift+F) as a proof of whether migrating the JSON store to SQLite was worth it. Verdict: the current Ctrl+K palette covers the real use cases, so the extra dependency and modal don't stay. Full revert — no on-disk shape change, no leftover code.
- Wikipedia artist scraper. Started as an autofill for the Artist editor (Infobox musical artist + Band members section parsing). Wikipedia's editorial variance across articles kept surfacing subtly wrong roles no matter how much the parser was tuned. Removed entirely — HowLongToBeat, Last.fm sync and the local music scanner from the same sprint stayed.
Under the hood
- Rust:
music_scan_folder. New Tauri command insystem.rs. Walks up to 5 levels deep, dedupes multi-disc rollups, reads folder names through a normalisation pipeline (_→, whitespace collapse, ranked separator list), and returns oneMusicAlbumOutper detected album with artist / album / year / track_count / folder_path / cover_path. - Rust:
hltb_search. Hits howlongtobeat.com to extract the current API endpoint from its_app-*.jsbundle, caches it for 6h, POSTs the search payload with the right Origin / Referer headers so the site doesn't reject the request. On 401 / 403 / 404 the cache invalidates and retries once. - Rust:
lastfm_top_albums+lastfm_album_info. Cached via the existing 24h search cache; the album-info command is registered but not yet consumed by the renderer (kept as a hook for future per-album lookups).
v0.5.3
Added
- Kanban view — universal across every library. New layout mode in the view toggle row. Columns are the categories status enum (
backlog / playing / completed / …for games,plan_to_watch / watching / completed / …for anime, etc.), cards are draggable between columns and dropping a card applies the matching status patch. Music and Movies also work — theconsumedboolean is normalized to a two-column pseudo-enum (Listened / Not listenedandWatched / Not watched). - Timeline view. Horizontal scroll of items grouped by release year — covers pinned under each year label with a hairline axis and dot marker. Items missing a
releaseYear/releaseDate/airedFrom/startYearare excluded and counted in a footer hint so you can find + fill them. - Diary view. Chronological log of entries dated by
finishedAt(first) orcreatedAt(fallback), grouped by month. Each entry shows the day + weekday, cover, title, "Finished" vs "Added" badge, rating, and a snippet of the item's review / notes if it has one. Kept read-only; edits still go through the regular editor. - Group by (dropdown on the toolbar). Group the classic Grid / List / Compact renders into collapsible sections by year, decade, status, or half-star rating. Items missing the grouping key land in an "Unknown" bucket at the end. Disabled when the layout is Kanban / Timeline / Diary (those already carry their own grouping axis).
- Home widget: Big numbers. A row of scrapbook-style tiles at the top of the dashboard — total items in the library, finished this year, hours logged (sums game playtime + movie runtime + episodes × episode duration + VN estimated hours), and count of items rated ★4 or higher. No comparisons, no deltas, no "less than last month" framing — the widget is a portrait of what you have, not a report card.
- Home widget: Currently airing. Filters anime, donghua and series with
airingStatus === 'airing'— the shows actually on air this season, distinct from "upcoming" (future releases). Newest-first. - Home widget: Upcoming this week. Companion to the existing 30-day upcoming widget; tighter 7-day horizon for users who only want the imminent stuff.
- Home widget: Quick add. Inline single-row form (category select + title input + Add button) that skips the full Add panel and drops a stub item straight into the chosen library. Faster path when you just want to remember something exists — flesh-fill the rest later.
- Home widget: Cover carousel. Auto-scrolling marquee of covers from your library; pauses on hover, respects
prefers-reduced-motion, click a cover to open the item. Purely decorative. - Currently widget covers Visual Novels too. The existing "in progress" widget now surfaces VNs with
visualNovelStatus === 'playing', matching how it already covered every other category. - Default Home layout ships with the new widgets enabled — big-numbers → currently → carousel → upcoming-week → currently-airing → quick-add → recently-rated. Existing users who saved their own layout keep theirs; anyone who never touched Edit mode gets the new default on next boot.
- Smart lists — saved filter presets, per library or across every library. New "Manage" button next to a dropdown in the toolbar opens a full CRUD modal: create as many lists as you like, name them, pick a scope (a specific library or "all"), and stack rules from a fixed vocabulary — favorite yes/no, rating floor and ceiling, has-tag, status is one of, year floor and ceiling, has review, has cover, finished / consumed. An item passes when it belongs to the scope AND satisfies every rule. Applying a list layers on top of the current search / tag / status filters, so you can bottle "4-star games I never finished" once and use it from the toolbar instead of re-toggling five chips every time. Persisted alongside the rest of your library data.
- Cross-library playlists. New Playlists entry in the sidebar opens a hub for ordered lists that can mix items from every library — a rewatch queue, a study reading list, a soundtrack in the order you like it. Each playlist has a name, an optional description, and any number of entries; the detail view lets you reorder with up/down buttons and remove individual entries. Adding items uses a full-library picker with search + a per-library filter, and greys out anything already in the list so you can't add the same title twice.
- Card menu grew "Move to library…" and "Add to playlist…" entries. Right-click any item to move it to a different library (a single click through a picker listing every enabled library — no more truncation to four options like the old flattened submenu) or drop it into an existing playlist. The playlist picker also has an inline "Create and add" affordance so you can bottle a new list around the item without leaving the current view. Moving an item to a different library keeps the source-library-specific fields on the record, so moving back later restores them.
- Auto-status transitions (Settings → Behavior). Giving an item a rating (or setting a finished date) now bumps its status to "completed" if it was still in a backlog / in-progress state, and stamps today as the finished date when one wasn't already set. Both nudges are gated by their own toggles — flip them off if you prefer to log status by hand.
- Custom keyboard shortcuts (Settings → Keyboard shortcuts). Every hotkey in the app now flows through a table you can rebind: focus library search, open global search, undo, redo (two bindings), refresh from disk, show the cheat sheet, jump to Home. Click Record on a row and press a keystroke; press Esc to cancel. Blank binding disables the action entirely. Reset returns a single row to its default; Reset all clears every override at once. Overrides win over defaults on identical combos, so a custom binding always takes precedence.
- Library-level custom fields (Settings → Custom fields). Add your own typed fields to any library — text, number, date, yes/no, or a select-from-a-list. Every item in that library grows the same extras at the bottom of its editor. Kinds map to native inputs so numbers stay numbers on disk. Fields are keyed by id, so renaming keeps existing values, and removing a field just hides them until the field is added back. This is on top of the existing free-form per-item key/value block, which stays untouched.
- Games — playthroughs / runs log. The game editor grew a dedicated section for structured runs — one entry per campaign, NG+ replay, or co-op session with a friend. Every run captures start / finish dates, hours, character or class, difficulty, platform, co-op tag, milestones, and a longer note. The section header sums total hours across runs so a soulslike with three playthroughs reads at a glance. Different from the flat "Play time" field: use runs when a game deserves more than one bullet.
- Series / Anime — "Airs" chip on the item card. When a show is
airing, its card grows a small accent-tinted chip showing the weekday its new episodes drop ("Airs Tue"). The dot pulses so the airing state reads even faster than the status label below it. - Visual Novels — routes / endings tracker. VN editor grew a checklist of endings grouped by optional Route (per-heroine paths, common route, etc). Each ending has a name, kind (good / bad / true / normal), a "seen" checkbox that stamps today when ticked, and a note. Header shows
X / Y seenso a completionist run reads at a glance. - Games — store links, purchase log, and platform compatibility flags. New editor section for anything that describes where a game lives and how it runs. Store links are a repeatable list (Steam / GOG / Epic / itch / Humble / EA / Ubi / Battle.net / Rockstar / Nintendo / PlayStation / Xbox / Official / Other), each with its own URL and note. Purchase log is a repeatable row of date, price, currency, storefront label, discount, and note — capture every time you rebought a game on a new platform or during a sale. Steam Deck compatibility is Valve's four-value scale (Verified / Playable / Unsupported / Unknown) and shows as a coloured chip on the card when set. ProtonDB rating covers the Linux angle (Platinum / Gold / Silver / Bronze / Borked). All of them are stripped from the on-disk JSON when empty.
- Movies — viewings log. Editor section for structured watch history — one row per viewing with date, format (theater / streaming / bluray / dvd / download), location, companions and a note. Card grows a "× N watched" chip once the derived total is > 1.
- Books — highlights & quotes list. Kindle-style capture: page ref, quoted text, personal note, captured-at date. Each entry gets a left-border accent so the list reads like a stack of pull-quotes.
- Manga family — bookmark block. Chapter cursor + short note ("last panel of the arc before the timeskip"). Card grows a subtle chip when set so you know where you left off without opening the item.
- Music — Listening note. Freeform textarea for the anecdote attached to an album ("first time I heard this was at Sam's beach house 2022"). Kept separate from Review — this one is for the memory, not the take.
- Export what's shown. New toolbar dropdown next to Delete: exports only the items currently visible after search + tags + smart-list filtering, as a single CSV or a single JSON file. A saved smart list becomes a shareable spreadsheet in two clicks — no need for the Data pane's whole-library flow.
- CSV column set catches up with the newer fields. Games CSV now includes
deckCompatandprotonRating; Movies CSV includestimesWatchedandwatchedWhere; every manga-family CSV includesbookmarkChapter/bookmarkNote; Music CSV includeslisteningNote; Visual Novels now have their own CSV column set (visualNovelStatus,vnLength,vnLengthHours,vnEngine,devs,vndbId).
Fixed
- **Track artist column in the Music detail view split...
v0.5.2
Small patch release. Two things: three new Linux / Windows delivery channels come online (.rpm, AUR omnio-bin, winget TonyMontania.Omnio), and the in-app updater finally hands every install variant the matching release asset.
Nothing on disk changes. Upgrade is a normal installer swap; your library stays where it is.
Downloads
Grab the build for your platform from the assets below.
| OS | File | Notes |
|---|---|---|
| Windows | Omnio_0.5.2_x64-setup.exe |
NSIS installer, per-user, no admin required |
| Windows | Omnio_0.5.2_x64_en-US.msi |
MSI for group-policy / SCCM rollouts |
| Windows | Omnio_0.5.2_windows-portable.zip |
portable EXE — needs WebView2 (installed by default on Windows 10 21H2+ and every Windows 11) |
| macOS (Apple Silicon) | Omnio_0.5.2_aarch64.dmg |
drag to Applications |
| macOS (Intel) | Omnio_0.5.2_x64.dmg |
drag to Applications |
| Linux | omnio_0.5.2_amd64.AppImage |
chmod +x and run (may need libfuse2) |
| Linux | omnio_0.5.2_amd64.deb |
sudo dpkg -i omnio_0.5.2_amd64.deb |
| Linux | omnio-0.5.2-1.x86_64.rpm |
sudo dnf install ./omnio-0.5.2-1.x86_64.rpm |
| Arch AUR | — | yay -S omnio-bin (or your AUR helper) |
| winget | — | winget install TonyMontania.Omnio |
All builds are unsigned — Windows SmartScreen and macOS Gatekeeper warn on first launch, one confirmation clears them.
What's new
New delivery channels
Three channels come back after being retired in the Tauri migration. All three are stamped by CI from templates in packaging/, uploaded to the release as extra assets, and ready for one-command downstream submission.
- Fedora / RHEL
.rpmbuild. Tauri v2 has a nativerpmbundle target; adding"rpm"tobundle.targets+rpmto the Linux CI prereqs is all it took. The release publishesomnio-0.5.2-1.x86_64.rpmalongside the AppImage +.deb. Distros covered: Fedora, RHEL, CentOS Stream, Rocky, AlmaLinux, openSUSE (via zypper), Amazon Linux 2023. - AUR package
omnio-bin.packaging/aur/PKGBUILDrepackages the upstream.debfor Arch and derivatives — no rebuild, just download-verify-install. The release workflow stamps the version + SHA256 into the PKGBUILD and uploads the stamped file asomnio-bin.PKGBUILD.txt; submitting to AUR is onegit pushfrom a maintainer machine with SSH access tossh://aur@aur.archlinux.org/omnio-bin.git. - winget package
TonyMontania.Omnio.packaging/winget/*.yamldescribes the NSIS + MSI + portable-ZIP installers, each with its own SHA256 and installer switches (silent + interactive). The stamped YAMLs land on the release, ready forwingetcreate submitagainstmicrosoft/winget-pkgs.
Under the hood: scripts/stamp-packaging.mjs reads the release-assets directory, computes SHA256 per artifact and replaces @VERSION@ / @SHA256_*@ / @RELEASE_DATE@ tokens in each template. No templating engine — literal @TOKEN@ strings, so unfilled slots are trivially greppable. packaging/README.md documents the submission flow per channel plus a recipe for adding Homebrew / Flathub / Snap later.
Fixed
In-app updater picked the wrong asset for MSI / portable / .deb / .rpm
The install-kind detector was hard-coded to check an env var (PORTABLE_EXECUTABLE_DIR) that our windows-portable.zip never sets, and had no branch at all for MSI or .deb. Portable users saw a hint (-portable.exe) that didn't match any published asset; MSI users got pointed at the NSIS .exe; .deb users got the AppImage.
Detection now reads current_exe() and matches against Tauri v2's default install directories:
- Windows:
%ProgramFiles%(orProgram Files (x86)) → MSI.%LOCALAPPDATA%\Programs\→ NSIS. Anywhere else → portable zip. - Linux:
$APPIMAGEset → AppImage. Exe under/usr/binor/usr/local/bin→.debor.rpm(picked by readingID/ID_LIKEfrom/etc/os-release— Fedora, RHEL, CentOS, Rocky, Alma, openSUSE, SUSE, Amazon Linux, Mandriva and Mageia go to.rpm). - macOS unchanged (single
.appbundle format; arch alone picks the DMG).
Only the frontend match string changes; the download + install-launch pipeline is untouched.
Docs
- Install section rewritten — the three cramped bullets became per-OS tables (Windows / macOS / Linux) with a Package / File / Command / Notes column each. Every channel we publish (NSIS, MSI, portable ZIP, winget, arm64 DMG, x64 DMG, AppImage,
.deb,.rpm, AUR) shows its exact filename, the command to run and any prerequisites. CHANGELOG.mdis now the source of truth for release notes. The release workflow extracts the## v<tag>section fromCHANGELOG.mdand hands it totauri-actionas the release body, so future patch notes live in git alongside the code they describe.
Full changelog
v0.5.1...v0.5.2 on GitHub — v0.5.1...v0.5.2
v0.5.1
v0.5.1 — Item templates, quick-add via URL, settings rework, mobile cleanup
Second Tauri release. Three new user-facing features — item templates, quick-add via URL and half-star ratings across the board — a big visual rework of Settings, and the experimental mobile companion / encrypted backup / git-backed data folder all get retired to keep the desktop app lean.
No data-on-disk changes. Upgrading is a normal installer replacement; your library stays where it is.
Downloads
Grab the build for your platform from the assets below.
| OS | File | Notes |
|---|---|---|
| Windows | Omnio_0.5.1_x64-setup.exe |
NSIS installer, per-user, no admin required |
| Windows | Omnio_0.5.1_x64_en-US.msi |
MSI for group-policy / SCCM rollouts |
| Windows | Omnio_0.5.1_windows-portable.zip |
portable EXE — needs WebView2 (installed by default on Windows 10 21H2+ and every Windows 11) |
| macOS (Apple Silicon) | Omnio_0.5.1_aarch64.dmg |
drag to Applications |
| macOS (Intel) | Omnio_0.5.1_x64.dmg |
drag to Applications |
| Linux | omnio_0.5.1_amd64.AppImage |
chmod +x and run (may need libfuse2) |
| Linux | omnio_0.5.1_amd64.deb |
sudo dpkg -i omnio_0.5.1_amd64.deb |
All builds are unsigned — Windows SmartScreen and macOS Gatekeeper warn on first launch, one confirmation clears them.
What's new
Item templates
Save the field values you want prefilled for the next item in a given category. Open Add, set your defaults (status, tags, and for games: platforms + ownership + source), click Save as template in the panel header. Every new item you add in that category will start with those slots populated.
- Templates are stored per-category — a template for Games doesn't affect Books.
- Editing an existing item never applies a template — only fresh items opened from the "+" button.
- Manage saved templates from Settings → Behavior → Item templates. One-click Clear per row.
Quick-add via URL
Paste a supported metadata URL into the Title field of the Add panel and the matching fetcher opens with the slug already humanized and pre-searched. Supported sources:
- IGDB —
igdb.com/games/<slug>→ routes to the IGDB fetcher. - TMDb —
themoviedb.org/movie/<id>-<slug>and/tv/<id>-<slug>→ routes to TMDb. - AniList —
anilist.co/anime/<id>/<slug>and/manga/<id>/<slug>. - MyAnimeList —
myanimelist.net/anime/<id>/<slug>(routed through the AniList fetcher, which handles MAL-shaped queries). - VNDB —
vndb.org/v<id>. - MangaDex —
mangadex.org/title/<uuid>/<slug>. - OpenLibrary —
openlibrary.org/works/OL<id>W/<slug>. - Steam —
store.steampowered.com/app/<id>/<slug>(routed through IGDB, which searches by title).
Detection is scoped to fetchers available for the current category — pasting a TMDb URL while adding a Book does nothing (no false-positive redirect).
Half-star ratings across the board
The RatingPicker in every editor uses a 10-pill row (0.5 → 5.0), the min-rating filter offers 1 · 1.5 · 2 · 2.5 · 3 · 3.5 · 4 · 4.5 · 5, and the ★{n} display on cards and detail views shows halves as ★4.5. Sorting by rating respects halves too.
Settings visual rework
- Floating navigation card — the left column is now a rounded card with a border, sticky on scroll, with breathing room from the app sidebar (before: pegged to the app chrome).
- One card per setting — every top-level
.field-groupis a distinct surface with a bold display-font title (up from tiny mono uppercase). Descriptions sit inside the card, not floating loose next to it. - Card fields tab — the eight per-library toggle grids collapsed into one big card with a 2-column grid. Each category has a subtitle with a hairline border-bottom and its pills below. Wraps to one column at narrow widths.
- Enabled libraries / Extras / Plugins — checkbox rows now render as inline chips that wrap, instead of a full-width vertical stack. Much denser.
- Cover wall export dialog — was rendering unstyled because it referenced classes that didn't exist. Now uses the canonical
.modal-panelshell with a real header, subtitle, labeled rows and a two-column grid for Title on the wall and Background. - Section titles ("Danger zone", "Integrations · API keys", …) got a stronger visual weight (18px bold with an underline).
Docs
- README rewrite — table of contents, features grouped in three columns (Track / Discover / Own your data), metadata sources split into per-category tables, CI badges added (Tests + Lint).
- CONTRIBUTING.md absorbed the "Build from source" block; the README now has a short link to it.
docs/IDEAS.md—#15 Half-star ratingsmarked as shipped; the barcode-via-mobile-app entry was removed with the mobile companion.
Removed
- Mobile app / PWA discontinued. The experimental mobile companion is gone. Removed: the
src/mobile/component tree, thesrc/MobileNav.tsxbottom bar,useIsMobile/useDeviceClasshooks, the PWA manifest + service worker,src/utils/lanSync.ts+src/utils/githubSync.ts, theLanServerSettings/SyncSettingspanels, and the Rusthandlers/lan_server.rsaxum endpoint that served the desktop library over the LAN. Theaxum/tower-http/local-ip-addressCargo dependencies came out with it. Desktop-only from here. - Encrypted 7z backup retired.
BackupSettings.tsx,handlers/backup.rsand thesevenz-rust+walkdircrates were removed. The rolling 5-snapshot backup on every save stays — it lives indata/backups/1..5/and is restorable from Settings → Backup, import & export. - Git-backed data folder retired.
GitBackedSettings.tsxandhandlers/git_data.rs(init / commit / push / pull / history / restore) came out; thechronocrate went with them. If you had this enabled, yourdata/folder still works as a git repo — Omnio just no longer manages the commits. - Old
fontSize"Interface size" toggle — was mobile-only zoom (only activated at≤640pxviewports). Now dead; the setting is gone from Appearance.
Cleanup
- ~600 LoC of Rust and ~250 LoC of TypeScript removed across the mobile / backup / git retirements.
- Three Cargo crates dropped:
sevenz-rust,walkdir,chrono(plusaxum/tower-http/local-ip-addressfrom the mobile removal). - Two npm dependencies dropped:
qrcodeandjsqr(used only for mobile-PC pairing). - Slimmer bundle, faster cold compile, less to maintain.
Full changelog
v0.5.0...v0.5.1 on GitHub — v0.5.0...v0.5.1
v0.5.0
v0.5.0 — Omnio migrates from Electron to Tauri
The biggest change under the hood since 0.1: the desktop shell moved from Electron to Tauri (Rust backend + React renderer). The UI, your data on disk and every keyboard shortcut are unchanged — but the installer is ~90% smaller, idle RAM roughly a third of what it was, and the update / metadata / storage pipeline is a fully typed Rust IPC contract.
If you already had Omnio v0.4.x installed, the new build imports your existing library automatically on first launch. Your old install stays intact until you uninstall it, so rollback is free.
Downloads
Grab the build for your platform from the assets below.
| OS | File | Notes |
|---|---|---|
| Windows | Omnio_0.5.0_x64-setup.exe |
NSIS installer, per-user, no admin required |
| Windows | Omnio_0.5.0_x64_en-US.msi |
MSI for group-policy / SCCM rollouts |
| macOS (Apple Silicon) | Omnio_0.5.0_aarch64.dmg |
drag to Applications |
| macOS (Intel) | Omnio_0.5.0_x64.dmg |
drag to Applications |
| Linux | omnio_0.5.0_amd64.AppImage |
chmod +x and run (may need libfuse2) |
| Linux | omnio_0.5.0_amd64.deb |
sudo dpkg -i omnio_0.5.0_amd64.deb |
All builds are unsigned — Windows SmartScreen and macOS Gatekeeper warn on first launch, one confirmation clears them.
What's new
Backend rewritten in Rust (Tauri v2)
Every one of the 66 IPC channels the renderer uses got a matching #[tauri::command]. Wire shapes are identical to what Electron produced, so no JSON on disk changed and nothing about your library needs migrating manually.
Payoff:
- ~90% smaller installer — 12 MB vs ~180 MB (Tauri uses the OS's system WebView instead of bundling Chromium).
- ~4× less idle RAM — around 40 MB vs 150 MB.
- Faster cold start — WebView2 (Windows) / WKWebView (macOS) / WebKitGTK (Linux) initializes quicker than Electron's bundled Chromium.
- Typed IPC contract — every command's args + response are Rust-checked at build time; renderer catches shape mismatches at compile time via
src/utils/ipc.ts+src/types/ipc-contract.ts.
First-boot library migration
The first time you open v0.5.0, Omnio detects an existing Electron install (%APPDATA%\Omnio on Windows, ~/Library/Application Support/Omnio on macOS, ~/.config/Omnio on Linux) and copies data/ + assets/ into the new storage root (%APPDATA%\com.omnio.app\ etc). Copy semantics — the Electron install stays fully intact, so you can uninstall it whenever you're comfortable.
A .migrated-from-electron marker in the new folder prevents the copy from running again on subsequent boots.
New library: Visual Novels
Sitting under Extras with a dedicated editor + detail view. Full VNDB Kana API integration:
- Description, aliases, engine, length (in hours + votes), original language, languages available, dev status, community rating.
- Content tags with category / spoiler / rating annotations.
- Screenshot gallery with per-image sexual / violence tags.
- Multi-region cover gallery — pulls every release's cover (Japanese, English, translated patches, physical / digital, box art / disc / insert) via the
/releaseendpoint, each labelled with the languages it targets and country flags. - Publishers per language — same source as the cover gallery, so you see who released the game in each region.
- Staff + character list — with images and original-language names when available. Character images pull from a separate
/charactercall so nothing gets truncated at the search-payload cap. - NSFW flag — respected by the card / detail view.
- Related VNs resolved against your own library — VNDB relations (sequel, prequel, side story, alternative version, shares characters, fan translation…) are matched against your existing items by
vndbIdso links go straight to the right entry.
Better error surfacing on network failures
proxy_json in Rust attaches the full source() chain to error toasts and logs the URL + cause to the dev terminal. A generic "fetch failed" now reads as "fetch failed (Connect Timeout Error … api.example.com:443)" — debugging a flaky third-party doesn't require patching code.
Loose schema validation at the disk boundary
Every item / collection / artist / arcade-game loaded from JSON goes through a minimum-required-fields check (id / categoryId / title / createdAt) via serde-driven validators. Rows with a corrupt shape get dropped and logged so a partially broken file still boots the rest of the library — before, one bad row could crash the load.
Small polish
- Sidebar hides its Libraries header when you disable every library (before: orphan header row left behind).
- About panel version stack updated:
Built with Tauri · Rust · React · Vite · TypeScript. - User-Agent on every outbound request now identifies as
Omnio/0.5.0.
Upgrading from v0.4.x
- Download the installer for your platform.
- Install / drop the AppImage — the previous Electron install is not affected.
- Open Omnio — your library is imported automatically on first launch.
- Confirm everything looks right (cards render, covers load, edits save).
- When ready, uninstall the old Electron build. Your data is now in the new folder (
%APPDATA%\com.omnio.app\on Windows,~/Library/Application Support/com.omnio.app/on macOS,~/.config/com.omnio.app/on Linux).
The migration is one-shot — a marker file prevents it from running again. If you ever need to re-run it (e.g. you rewiped the new folder), delete .migrated-from-electron in the Tauri storage root before opening the app.
Removed
- Docker / KasmVNC deployment — the headless Electron-in-container image is no longer maintained. If you were running that mode, the v0.4.1 tag stays available on GitHub Container Registry as
ghcr.io/tonymontania/omnio:0.4.1. - Aspirational package-manager manifests (winget / homebrew / aur / flathub / snap) — the templates under
packaging/were never actually submitted for v0.4.x and used Electron-specific artifact naming. Removed to keep the repo honest. Re-submitting Omnio to those channels with the Tauri artifacts is on the roadmap once feedback on v0.5 settles.
Full changelog
baa48c3...v0.5.0 on GitHub — v0.4.1...v0.5.0