Repository navigation
Releases: ChrisThoma/tomesole
Release list
v0.1.8
The project page moved to https://dreamrot.dev/projects/tomesole/.
Crate metadata is fixed at publish time, so the new homepage URL only reaches crates.io by way of a release. That is the whole of this one — there are no code changes, and 0.1.7 remains functionally identical.
v0.1.7
A bug fix release for libraries that have moved.
The library kept each book by the path it was downloaded to, and looked nowhere else. Change where downloads land, move your books to the new place, and every one of them read as missing, with nothing on offer but forgetting the book and fetching it again.
A file that is no longer where it was written is now looked for by name in the directory downloads go to now, and adopted if the size agrees. The entry keeps its timestamp, its MD5 and its verification, since a move is not a new download.
The relative path made this worse than it looks. The default download directory is . when there is no ~/Downloads, which is the ordinary state of a fresh WSL home, and that relative path went into the history as written. A book then only resolved from the directory you were standing in when you fetched it: start tomesole anywhere else and it read as missing with nobody having touched it. Destinations are now recorded absolute.
A book moved somewhere other than your download directory still reads as missing, since there is nowhere bounded to look for it.
v0.1.6
A hardening release. Everything a mirror sends is now treated as attacker-controlled on the way out as well as on the way in, and the Windows paths are fixed.
- Displayed metadata is stripped of control characters, so a mirror cannot put an escape sequence in a title and repaint the terminal with it. Numeric entities naming a control character are refused in the scanner, so every consumer inherits the guard.
- A redirect or interstitial link carrying a URL inside a query parameter —
/out.php?u=https://cdn.example/f— now resolves against its base instead of failing several steps later with an error naming the wrong thing. - Windows: a book opens through
ShellExecuteWrather thancmd /C start, which split a filename at an ampersand; Explorer no longer receives the\\?\path that maderevealopen the wrong folder; and the config, cache, history and downloads follow%USERPROFILE%instead of landing in whatever directory you ran from. If you used an earlier version on Windows, your history is in that directory. - A
readermay carry arguments (mupdf -r 120), and a program whose path contains a space still launches. Quote the path if it also takes options. - Cover art is decoded and scaled on the worker thread, so a hostile image cannot stall the interface past Ctrl-C, and the thumbnail map is capped.
- Downloads install by copy where hard links are unavailable, so a library on exFAT works.
- Mirror discovery matches the registrable domain, so
libgen.attacker.exampleis not treated as a mirror. - Errors say what to do next, and are no longer cut off mid-sentence in the interface.
The redirect loop is now covered end to end against a local server, and CI compiles the crate with the declared MSRV of 1.91.
v0.1.5
A docs-and-branding release; the binary is unchanged from 0.1.4.
- New monogram-T icon (vector source at docs/icon.svg).
- The social preview card is rebuilt from an HTML source (docs/social-card.html), fixing the garbled wordmark.
- The demo video set is re-recorded without compression artifacts.
🤖 Generated with Claude Code
v0.1.4
Documentation release: the README is about half its former length, with a quick start at the top. No code changes.
tomesole 0.1.3
Corrects the minimum supported Rust version: the code uses floor_char_boundary (stable since 1.91) and file locking (stable since 1.89), so the MSRV is 1.91, not the 1.85 the README claimed and 0.1.2 briefly declared. rust-version = "1.91" is now set in Cargo.toml, and clippy's incompatible_msrv lint keeps it honest in CI. No behaviour changes.
Install
cargo install tomesoletomesole 0.1.2
Documentation release. No behaviour changes; the README on crates.io is served from the published version, so these corrections needed a cut to appear there.
Install
cargo install tomesoleChanges
- Corrects README claims that had drifted from the code, found by a line-by-line review: the record and cover sit in a band along the bottom (there is no side panel or poster-size cover),
Tabswitches tabs even while typing but1/2/3work while browsing, the batch and library strips use plain spacing, the ignored cover test's real name, the TUI test size sweep, and the platform-exact test counts (308, one Linux-only). - Notes that the JPEG accuracy comparison against Apple's decoder was a development-time measurement, not an in-tree test, and that the Windows reveal path is the one place a shell (
cmd /C start) appears. - Declares
rust-version = "1.85"in Cargo.toml so Cargo enforces the MSRV the README states.
tomesole 0.1.1
Documentation release. No behaviour changes; the README on crates.io is served from the published version, so these corrections needed a cut to appear there.
Install
cargo install tomesoleChanges
- Documents the Settings tab, which edits the same values as the config file: cover art, history, download verification and size limits, reader, download directory, result limit, collections, preferred mirrors and cleartext HTTP.
- Config and history paths are given as
$XDG_CONFIG_HOME/$XDG_DATA_HOMEwith their defaults, rather than hardcoded~/.configand~/.local/share. - Corrects the cover fallback order: the Library tab reads the cover out of the book file first, then the cache, then asks the mirror.
- Notes
windows-sysfor atomic file replacement on Windows alongsidexattron Unix. - Drops the stale
hkey; the Library tab shows the download list. - Adds the demo recording, and CI, crates.io, release and licence badges.
next_taguses?for the comment and doctype skips, matching what clippy 1.97 asks for.
Full Changelog: v0.1.0...v0.1.1
tomesole 0.1.0
First release. A terminal client for searching and downloading from Library Genesis, with both a full-screen interface and a scriptable CLI.
Install
cargo install tomesoleNeeds Rust 1.85 or newer (2024 edition). No other build dependencies.
What's here
- Full-screen interface. Search and Library tabs, filtering by format, language and author with live counts, sorting by relevance, title, author, year or size, all in place with no re-search. Covers drawn as real pixels in kitty, Ghostty, WezTerm and iTerm2, half-blocks elsewhere.
- Scriptable CLI.
tomesole dune,tomesole get <md5>,tomesole history,--jsonfor piping,--firstto take the top hit unattended. - Mirror discovery. The health check runs a real search and requires parseable results back, so a mirror that serves a healthy front page over a dead search endpoint counts as down. The result is a pool; a mirror that fails partway through falls through to the next.
- Hostile-input handling throughout. MD5 verified as the bytes stream past, filenames built from catalogue metadata rather than
Content-Disposition, allowlisted extensions, redirects re-validated at every hop against private and reserved ranges, responses size-capped twice.
304 tests, no network needed. Four dependencies; everything else is in-tree.
MIT licensed. This is a client for a public search index; what you download with it, and whether you are entitled to, is your call and your responsibility.