Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ All notable changes to Tome are documented here. Format loosely follows

## [Unreleased]

## [2.8.0] - 2026-10-24 - "Folio"

### Added
- **Supporters on the About page.** Settings > About lists the people who
sponsor Tome on GitHub Sponsors. The repo also shows a Sponsor button.
Expand Down
99 changes: 99 additions & 0 deletions docs/release-notes-2.8.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# v2.8.0 "Folio"

A folio is a sheet folded once, and the shelf size libraries sort books by.
This release lets each book type choose its folder and layout on disk.

## Highlights

**Folder and layout per book type.** Each type (Admin > Types) can get its
own folder under the library root, such as `Manga/` or `Comics/`, and its
own layout: series first (the default so far), author then series, author
only, or a template like `{author}/{title}[ ({year})]{ext}` with a live
preview. Nothing moves on upgrade or on save. Changed books show as
misplaced in Library Health, and Reorganize moves them when you say so. A
scan takes a matching top-level folder as a type hint. (#270, #276)

**Secrets from files.** `TOME_SECRET_KEY`, `TOME_HARDCOVER_TOKEN`,
`TOME_GOOGLE_BOOKS_KEY`, `TOME_SMTP_USER`, `TOME_SMTP_PASSWORD` and
`TOME_OIDC_CLIENT_SECRET` accept a `_FILE` variant for Docker and
Kubernetes secrets. (#267)

**French.** The web UI is available in French, contributed by llaumgui.
(#272)

## Also

- The update check runs once a day in the background against
`upgrades.bndct.dev`, sending only the version number.
`TOME_UPDATE_CHECK=false` still turns it off.
- Send to Device works with SMTP servers without authentication. (#271)
- Unknown `/api` and `/opds` paths return a plain 404 instead of the web
page.
- Settings > About lists GitHub Sponsors supporters.

## Upgrade

```
docker pull ghcr.io/bndct-devops/tome:latest && docker compose up -d
```

No configuration changes. Three new book-type columns are added on first
start; no files move until you set a folder or layout and run Reorganize.
KOReader: a sign-in made with a code now survives a crash with TomeSync
build 52 - your plugin self-updates (Settings > Check for updates, or enable
auto-check on launch). (#259)

---

## Full changelog

### Added
- **Supporters on the About page.** Settings > About lists the people who
sponsor Tome on GitHub Sponsors. The repo also shows a Sponsor button.
Sponsoring is a thank-you; nothing in Tome is locked behind it.
- **Secrets can be read from files.** `TOME_SECRET_KEY`, `TOME_HARDCOVER_TOKEN`,
`TOME_GOOGLE_BOOKS_KEY`, `TOME_SMTP_USER`, `TOME_SMTP_PASSWORD` and
`TOME_OIDC_CLIENT_SECRET` each accept a `_FILE` variant naming a file that
holds the value, e.g. `TOME_SECRET_KEY_FILE=/run/secrets/tome_secret_key`,
for Docker and Kubernetes secrets. Setting both the variable and its `_FILE`
variant is an error. (#267)
- **French translation.** The web UI is available in French (Settings →
Appearance → Language). Machine-translated first pass, corrected in the
running UI by the contributor; wording fixes are welcome as pull requests.
Contributed by llaumgui. (#272)
- **A folder per book type.** Each book type can have a folder (Admin → Types),
so books of that type are stored under it, e.g. `Manga/Berserk/…` or
`Comics/Saga/…`. Empty by default, so nothing moves on upgrade. Existing
books move only when you run Reorganize in Library Health; a library scan
takes a matching top-level folder as a hint for the book type, so a plain
CBZ under your own `Manga/` stays manga. (#270)
- **A layout per book type.** Each book type picks how its books are laid
out (Admin → Types): Series first (the layout so far, still the default),
Author, then series (`Harlan Coben/Myron Bolitar/Deal Breaker v01.epub`), or
Author only, each with an example from your own books. Advanced takes a
template such as `{author}/{title}[ ({year})]{ext}`, with a live preview.
Saving never moves files: changed books show as misplaced in Library Health,
and Dry Run All / Reorganize All moves them. (#276)

### Changed
- **The update check asks Tome's own endpoint.** Tome now checks
`upgrades.bndct.dev` once a day for a newer version, in the background
instead of only when an admin opens Settings. The request carries the
version number and nothing else. `TOME_UPDATE_CHECK=false` turns it off,
as before.

### Fixed
- **A KOReader crash no longer undoes a fresh sign-in.** The plugin kept a
new pairing (Sign in with code), a changed server URL and a connection
reset in memory until KOReader next closed normally, so a crash before
that lost them and the device asked to sign in again. They are now
written to disk right away. Plugin build 52. (#259)
- **Unknown API addresses answer "not found".** A request to an address
under `/api` or `/opds` that does not exist used to get the web app's page
back (or "method not allowed" for anything but a read). It now gets a
plain 404, so the KOReader plugin and other clients can tell that a server
does not have a feature yet instead of choking on a web page.
- **Send to Device works with SMTP servers that need no authentication.**
`TOME_SMTP_USER` and `TOME_SMTP_PASSWORD` may both be left empty; Tome
then skips the login step. `TOME_SMTP_FROM` is required in that case, so
the sender address is never blank. (#271)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "tome"
version = "2.7.1"
version = "2.8.0"
description = "Self-hosted ebook library"
requires-python = ">=3.12"
dependencies = [
Expand Down
Loading