Release notes
Changelog
Version 1.2.1
Progress is announced properly. September 15, 2026
Fixed
- Progress bars are named. Conversion and sending both drew unnamed progress bars, so VoiceOver could say only that something was in progress, not what.
- The spinners beside them are no longer announced separately. They repeat what the named bar already reports.
Version 1.2.0
Catch a reader up in one press, and find out what Shelfr knows about a book. September 8, 2026
Shelfr always knew which books were already on your reader and only used it to draw a small green tick. This release puts that knowledge to work, and gives the shelf the window every book library needs: one that says where a file actually is.
Added
- Send a reader everything it has not got, in one press. Plug in a Kobo that is thirty books behind and the only way to catch it up was to select those thirty by hand, on a shelf where the ones already on the device look exactly like the ones that are not. The Send menu now offers “Send 30 New Books to KOBOeReader”, with the count in the label so you know there is something to do before you press it, and the reader’s own card offers the same button whenever nothing is selected. It sends from the shelf you are looking at, so a search or a format shelf narrows it, and it leaves out anything that reader cannot read, anything DRM-protected, and anything whose file is missing rather than queueing work that can only fail. Shortcut: ⇧⌘S.
- Book Info (⌘I) shows everything Shelfr knows about a book. Publisher and language are read out of every EPUB you add and were never shown anywhere, and the app could reveal a book in Finder without being able to tell you where it was, so “which of these two copies is this?” had no answer inside Shelfr. Title, author, format, size, publisher, language, when you added it, the file name and the folder, all selectable, with Copy Path and Reveal in Finder, and a badge when a book is DRM-protected, missing, or already on your reader.
- Quick Look (⌘Y) opens a book without leaving the shelf. The same preview Finder gives you on Space, on the book you have selected, from the menu or from the right-click menu on the cover.
- The shelf sorts both ways. Sort offered Date Added, Title and Author with one direction each, so newest-first was possible and oldest-first was not, and Z to A could not be asked for at all. There is now a Reverse Order switch in the Sort menu, the toolbar glyph shows when it is on, and both halves of the choice are remembered the next time you open Shelfr.
- A first launch explains what Shelfr is for. One screen: plug in a reader, flick a book at it, or drop a folder anywhere in the window. Skippable, shown once, and never over a shelf that already has books on it.
Changed
- Settings can pin Shelfr to Light or Dark. A shelf gets looked at for long stretches and the person reading at night is not always the one who set the Mac to light. System, Light and Dark, applied immediately with no relaunch, for Shelfr alone.
- The window opens where you left it. Shelfr reopened at the same size in the middle of the screen every single launch, discarding whatever you had arranged. It now remembers its size and position.
- The whole window takes dropped books. The shelf accepted a drop and the readers panel accepted a drop, and the rail between them silently swallowed one. It also says so now: an accent border lights up while files are over the shelf.
- The bottom strip spells its buttons out. License, Updates, Help, Review, Tip and Shortcuts were six grey glyphs you had to hover over to identify, in a row that reads as words in every other app in the fleet. The Help menu also carries the entries every other twoplus11 app has: Leave a Review and What’s New were missing, and “Report an Issue” is now “Report a Problem”, the wording the rest of the fleet uses.
- About names the build and links the pages it summarizes. The version line now carries the build number a bug report needs, and there are links to the Shelfr page, the privacy policy and the terms, whose promises the window quotes two lines above.
- Every corner in Shelfr is drawn from one scale. Cards, covers, chips, panels, buttons and keycaps used ten different hand-written radii; they now come from the shared twoplus11 set, so Shelfr’s corners match the rest of the fleet.
Fixed
- The license check can no longer be redirected by an environment variable. A developer variable that points the app at a local server was honored as-is in the shipped app too, and it reaches any app launched from your login session, so an unprivileged process on your Mac could have had the next activation send your paid key, the machine fingerprint, the app version and the seat name to a host of its choosing. It is now honored only when it names localhost, in every build.
- Check for Updates was missing from the Shelfr menu. It was written, and the menu it was attached to was replaced by the one below it, so it never appeared: the only way to check by hand was the small circular-arrow glyph in the bottom strip.
- The Sort menu read “Date Added”, “Title” and “Author” in every language. The three names never reached the translation tables, inside a menu whose own title was translated.
- Every tooltip in the bottom strip was English. “Check for updates”, “Leave a review”, “Support twoplus11” and the rest were passed to macOS in a form that cannot be translated, so the one row of chrome meant to read the same in thirteen languages read the same in one.
- The twoplus11 mark in the bottom strip was hard to read. Its blue is the website’s, which measures 3.65:1 on a pale panel: below the accessibility floor for text that size. It now uses the value that was picked for app chrome, and the About window puts the mark on the same panel the main window does.
Accessibility
- The status badges in Book Info are readable, not just colorful. Their labels are set in the primary text color on a tinted plate rather than in the tint itself, which measures 3.3:1 in daylight and fails the contrast floor.
- The Sort control says which way it is sorting, and copying a path is announced. VoiceOver reads the field and whether the order is reversed, instead of leaving both to a glyph, and writing to the clipboard changes nothing on screen, so without the announcement a VoiceOver user was told nothing at all.
- Escape closes the two new sheets, and focus behaves. Book Info and the first-run screen both close on Escape, through the key monitor the License sheet already proved works for sheets that keep focus on their own container.
- Every new string ships in all thirteen languages. Fifty-two of them, reusing the fleet’s existing wording wherever the fleet already had it.
Site update
One name for the $5 license. August 31, 2026
Website only; no change to the app.
- The $5 license is called a Business License everywhere now. Eleven app pages called it a “Commercial License” and fourteen called it a “Business License”, for the identical thing at the identical price. Shelfr’s pricing section, its checkout window, and its terms and privacy pages now all say Business License.
- Nothing about the license itself changed. Same $5, same one-time payment, same cover for one computer. A key you already hold still works, and there is nothing you need to do.
Site update
Buy several apps in one order. August 30, 2026
Website only; no change to the app.
- One payment, as many apps as you need. The commercial license window on this page could sell exactly one thing: Shelfr. A team that also wanted two other twoplus11 apps paid three separate times, on three separate pages, and filed three separate receipts. That window now carries an Add another app control: search the catalog, set how many computers each app goes on, and pay once. Every app still gets its own license key, and they all arrive in the same email.
- Nothing changes if Shelfr is all you want. The window opens exactly as it did, at the same price, with the same count of computers, and an order for a single app takes the route through checkout it always has. The extra controls appear only once the app list has loaded, so a slow or unreachable connection leaves the page as it was.
1.1.0
Feature
September 2, 2026
Books that go missing say so, and there's somewhere to type a license key.
- The license seat is named only if you name it. The “Name this computer” box was pre-filled with this Mac’s own name, and on a Mac set up with the defaults that string carries your real name. That was the name sent on activation and on every daily re-check. The box starts empty now, clearing it actually clears the name, and nothing is substituted for a name you did not give. Shelfr’s privacy page is corrected in the same release.
- A Missing shelf, and one command to clear it out. When Shelfr can't find a book's file, the left rail grows a Missing shelf holding exactly those books, and it disappears again on its own once there are none. Edit ▸ Remove Missing Books… selects them, shows them, and asks before removing anything. Because those files really are gone, the confirmation no longer promises that the files stay where they are.
- A book whose drive came back stayed greyed out until you relaunched. The dimmed cover says “reconnect its drive”, and reconnecting it changed nothing: Shelfr asked the disk where your books were only once, at launch. Unplugging a drive mid-session was worse: every book on it stayed bright and sendable, so a send started a batch that could only fail. Shelfr now re-checks when a drive mounts, unmounts or is renamed, and when you come back to the app.
- Sends and conversions say what's missing before they start. Books whose files are gone used to go into the batch anyway and fail one at a time with a read error that never mentioned the drive. They're left out now, the rest of the batch still runs, and the summary counts what couldn't be found.
- Every progress line read English, in all thirteen languages. “Sending 3 of 12”, “Converting 4/9…”, “Job 2 of 3”, the send panel's headline and all of their VoiceOver announcements were translated, and none of the translations was ever used: a number written into a sentence makes the app look it up under a different name than a word does, so every one of those lookups missed and fell back to English while the coverage count still read 100%. Shelfr's most-read text now speaks your language.
- ⌘F puts the cursor in the search field. The Keyboard Shortcuts sheet has listed it since 1.0.0 and nothing implemented it, so search was mouse-only. The sheet now also documents ⌘A, which has selected the whole shelf all along.
- Somewhere to type your business license key. The footer's key button opened the shop and nothing else, even for people who had already bought. It now opens a License panel: paste the key, name this Mac, Activate. Removing a license hands the seat straight back so another Mac can take it. Nothing is locked behind a key; personal use is free, forever.
- Conversions queue instead of being refused. Starting a second conversion while one was running was turned away. Pick another format, or another set of books, and it lines up behind whatever is running. The panel says which job it's on, the bottom bar shows the queue depth, and Cancel splits into Cancel Job and Cancel All.
- Escape closes the Keyboard Shortcuts sheet, and Reduce Motion quiets the send and conversion panels.
1.0.3
Fix
August 19, 2026
Opens instantly, even with books on an external drive.
- Fixed a hang on launch when your library lives on an external drive. Building the book list checked the disk for every stored path on the main thread, so if the drive was spun down or slow, launch could stall for minutes with no window. Shelfr now builds those paths without touching the disk, so the window opens right away no matter where the books live.
1.0.2
Fix
August 19, 2026
A smoother first launch.
- A loading state instead of a blank shelf. While a large library reads in on launch, Shelfr now shows a “Loading your library…” spinner rather than the empty-shelf prompt, so a full library never looks empty for a moment.
- Fresh downloads open right away. The app now carries its own notarization ticket inside the download, so the very first launch after downloading no longer pauses on an online security check.
1.0.1
Fix
August 19, 2026
A launch-speed fix for large libraries.
- Fixed a freeze on launch with a large library. On a shelf of several hundred books, opening Shelfr could hang the window for a few seconds. The grid was re-filtering and re-sorting the whole library on every redraw (many times per frame), which tied up the app. That work now happens once, only when something actually changes it (a new book, a different shelf, a search, a new sort order), so Shelfr opens immediately no matter how large your library is.
1.0.0
First release
August 17, 2026
Your ebook library, flicked onto any e-reader, entirely on your Mac.
- Your shelf knows what your readers want. Plug in a Kindle, Kobo, Nook, or PocketBook and Shelfr recognizes it by name over USB, shows real free space, and sends each book in exactly the format that device reads. No conversion dialogs, ever.
- Per-device format routing. EPUB copies straight to a Kobo or Nook; for Kobo it's converted to KEPUB, which gives the Kobo its own column pagination. A loose EPUB copied to a Kindle over USB never appears (Amazon's EPUB support is Send to Kindle, which converts server-side), so Shelfr says so and points you there, or you send a MOBI, AZW3, or PDF, which Kindles do read over USB. Unreadable pairings are flagged, never silently failed. (Kobo reading statistics need per-word span markers, which Shelfr does not yet write.)
- Format conversion, built in. MOBI → EPUB, TXT → EPUB, and EPUB → KEPUB run natively with no dependencies. Writing Amazon's MOBI or AZW3 uses a separate copy of the free, open-source Calibre if you have it installed, and links you to it if you don't. DRM-protected, KF8, and HUFF-compressed inputs are refused with a clear reason rather than a corrupt output.
- DRM-protected books are refused, not half-sent. A store-locked EPUB shelves normally but can't be opened by the reader, so Shelfr says so up front instead of copying it and reporting success. Shelfr does not strip DRM; it moves the books you're free to move.
- Reads your books on-device. Imports EPUB, PDF, MOBI, AZW3, FB2, CBZ and more; pulls the real cover and author out of each EPUB. Books without a cover get a generated typographic one, so the shelf always looks like books.
- A real bookshelf. Smart shelves by recency and format, search by title or author, drag a book onto a reader to send it, or select many and send at once. Books already on the connected reader are marked, and the library survives an external drive remounting under a different path. A book whose drive is unplugged is dimmed, never dropped.
- Batch, with feedback. Sending or converting many books shows a dismissible progress panel with the exact book on the bar (title and author, book N of M) that you can hide and keep browsing while it runs.
- Safe eject. Right-click a connected reader and choose Eject; Shelfr unmounts it cleanly so you can pull the cable without a warning.
- Sends are safe. Atomic writes (an unplug mid-copy never leaves a truncated book), a space check before writing, filenames auto-numbered rather than overwritten, and tidy
Title - Authornames sanitized for the reader's FAT volume. Disconnecting the reader you were sending to clears the target instead of quietly redirecting to another device. - Accessibility. WCAG 2.1 AA throughout. The shelf is fully keyboard-operable: arrow keys move between books and rows, ⇧-arrow extends the selection, Space selects, ⌘S sends, and a visible focus ring says where you are. Readers connecting and disconnecting, sends starting and finishing, and every error are announced to VoiceOver. Reduce Motion and Increase Contrast both take effect immediately, and every color pairing the app can draw is unit-tested against its WCAG bar.
- Private by design. No accounts, no tracking, no subscriptions. Your books never leave your Mac. The only network request is the check for app updates, which you can switch off.