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
1 change: 1 addition & 0 deletions docs/.vitepress/config.base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ export default defineConfig({
{ text: 'Embed API', link: '/api/integrations/embed-api' },
{ text: 'Dashy', link: '/api/integrations/dashy' },
{ text: 'Glance', link: '/api/integrations/glance' },
{ text: 'Heimdall', link: '/api/integrations/heimdall' },
{ text: 'Home Assistant', link: '/api/integrations/homeassistant' },
{ text: 'Homarr', link: '/api/integrations/homarr' },
{ text: 'Homepage', link: '/api/integrations/homepage' },
Expand Down
46 changes: 46 additions & 0 deletions docs/api/integrations/heimdall.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Heimdall

LibrisLog can be integrated into [Heimdall](https://github.com/linuxserver/Heimdall),
an application dashboard and launcher for your self-hosted services, as a
[LibrisLog enhanced app](https://github.com/linuxserver/Heimdall-Apps).

The enhanced app displays your reading statistics (books read, currently
reading, want-to-read, and total counts) directly on your Heimdall tile.

## Prerequisites

- A running LibrisLog instance reachable **from the Heimdall server**
(Heimdall fetches the statistics server-side, so no
[CORS](/guide/configuration#core-settings) configuration is needed)
- An [API key](/api/integrations/#api-keys) with access to the
statistics endpoint

## Configuration

1. In Heimdall, add a new item and pick **LibrisLog** as the application type
(it is listed as an *enhanced app*).
2. In the config section of the app, enter the address of your LibrisLog
instance in the **URL** field. The URL **must end with a trailing slash**:

```
http://<LIBRISLOG-URL>/
```

3. Enter your API key into the **Password (API key)** field.
4. Select which values the tile should display under **Stats to show**:
**Read**, **Reading**, **Want to read**, and/or **Total**. Hold
<kbd>Ctrl</kbd> (or <kbd>Cmd</kbd>) to select multiple entries.
5. Click **Test** to verify the connection. If everything is configured
correctly, Heimdall reports *"Successfully communicated with the API"*.

::: tip The URL field needs a trailing slash
The config section of a Heimdall enhanced app can be confusing: the **URL**
field needs the address of your LibrisLog instance **followed by a slash**,
e.g. `http://192.168.1.100:8000/`. Without the trailing slash the app cannot
fetch your statistics: the tile stays empty and the **Test** button fails.

:::

## Result

![Heimdall Widget](/screenshots/integrations-heimdall.png)
3 changes: 3 additions & 0 deletions docs/api/integrations/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ headers. For these integrations you need an **embed token**, used with the
- [Glance](/api/integrations/glance) — Display your LibrisLog statistics on a
[Glance](https://github.com/glanceapp/glance) dashboard using the custom API
widget.
- [Heimdall](/api/integrations/heimdall): Display your LibrisLog statistics
on a [Heimdall](https://github.com/linuxserver/Heimdall) dashboard using the
LibrisLog enhanced app.
- [Home Assistant](/api/integrations/homeassistant) — Expose your LibrisLog
reading statistics as sensors in
[Home Assistant](https://www.home-assistant.io/) using the RESTful
Expand Down
12 changes: 6 additions & 6 deletions docs/guide/using-librislog/library.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,26 +63,26 @@ Search external sources for book metadata:
- **Google Books** — Requires API key (set in `.env`)
- **Hardcover.app** — Requires API token (set in `.env`)

Open Library and Hardcover (if an API token is configured) are queried **in parallel** for both title and ISBN searches. Google Books is only used as a **fallback** when the other sources return no results or on demand via the **Search Google Books too** button, which adds Google Books results to the current results.
Open Library and Hardcover (if an API token is configured) are queried **in parallel** for both title and ISBN searches. Google Books is only used as a **fallback** when the other sources return no results, or on demand via the **Search Google Books too** button, which adds Google Books results to the current results.

While a search is running, the **Search** button changes to **Cancel**, so you can stop the request at any time and refine your query.

#### How results are grouped

Different providers often describe the same book slightly differently (title language, page count, publisher, cover). Instead of dropping these variants, LibrisLog keeps every result and groups the ones that represent the same book. Each group shows a **"N results"** badge with a **Show editions** toggle expand it to review the individual records and pick the one you want to import.
Different providers often describe the same book slightly differently (title language, page count, publisher, cover). Instead of dropping these variants, LibrisLog keeps every result and groups the ones that represent the same book. Each group shows a **"N results"** badge with a **Show editions** toggle: expand it to review the individual records and pick the one you want to import.

Results are grouped by this rule:

- **Same ISBN** if two results carry the same ISBN, they are grouped together. ISBN-10 and ISBN-13 forms of the same ISBN count as equal (e.g. `0441013597` and `9780441013593`).
- **No ISBNsame title + same authors** results without an ISBN are grouped by a normalized title (case- and whitespace-insensitive) together with the same sorted author names.
- **Same ISBN**: if two results carry the same ISBN, they are grouped together. ISBN-10 and ISBN-13 forms of the same ISBN count as equal (e.g. `0441013597` and `9780441013593`).
- **No ISBN, same title + same authors**: results without an ISBN are grouped by a normalized title (case- and whitespace-insensitive) together with the same sorted author names.

Consequences you may notice:

- Two results with the *same title* but **different ISBNs** are **not** grouped they are different editions (different language, publisher, or page count) and appear as separate entries.
- Two results with the *same title* but **different ISBNs** are **not** grouped: they are different editions (different language, publisher, or page count) and appear as separate entries.
- A result with an ISBN and a result without one are never grouped, even if the title and authors match.
- Results that differ only in metadata (cover, publisher, page count, description) but share an ISBN or title+author are grouped so you can compare them side by side.

Because an ISBN can only be owned once per user, a group with a shared ISBN always represents a single book importing one variant is enough.
Because an ISBN can only be owned once per user, a group with a shared ISBN always represents a single book, so importing one variant is enough.

### ISBN Barcode Scan

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 56 additions & 30 deletions docs/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,51 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

| Version | Date | Type |
|---|---|---|
| [v1.8.0](#v1-8-0-—-camera-zoom-control-optional-telemetry) | 2026-09-02 | Feature release |
| [v1.7.0](#v1-7-0-—-reading-streaks-goals) | 2026-08-26 | Feature release |
| [v1.6.0](#v1-6-0-—-reading-progress-possession-tracking) | 2026-08-23 | Feature release |
| [v1.5.2](#v1-5-2-—-maintenance) | 2026-06-22 | Maintenance |
| [v1.5.1](#v1-5-1-—-maintenance) | 2026-06-22 | Maintenance |
| [v1.5.0](#v1-5-0-—-password-reset-usability) | 2026-06-22 | Feature release |
| [v1.4.0](#v1-4-0-—-embeddable-views-arm64) | 2026-06-14 | Feature release |
| [v1.3.1](#v1-3-1-—-maintenance) | 2026-06-09 | Maintenance |
| [v1.3.0](#v1-3-0-—-more-languages) | 2026-06-09 | Feature release |
| [v1.2.2](#v1-2-2-—-maintenance) | 2026-06-08 | Maintenance |
| [v1.2.1](#v1-2-1-—-import-reliability-multi-user-consistency) | 2026-06-08 | Feature release |
| [v1.2.0](#v1-2-0-—-startup-screen-update-checks) | 2026-06-01 | Feature release |
| [v1.1.1](#v1-1-1-—-maintenance) | 2026-06-01 | Maintenance |
| [v1.1.0](#v1-1-0-—-polish-missing-covers) | 2026-05-31 | Feature release |
| [v1.0.0](#v1-0-0-—-initial-release) | 2026-05-28 | Initial release |
| [v1.9.0](#v1-9-0-smarter-import-search-input-ux) | Unreleased | Feature release |
| [v1.8.0](#v1-8-0-camera-zoom-control-optional-telemetry) | 2026-09-02 | Feature release |
| [v1.7.0](#v1-7-0-reading-streaks-goals) | 2026-08-26 | Feature release |
| [v1.6.0](#v1-6-0-reading-progress-possession-tracking) | 2026-08-23 | Feature release |
| [v1.5.2](#v1-5-2-maintenance) | 2026-06-22 | Maintenance |
| [v1.5.1](#v1-5-1-maintenance) | 2026-06-22 | Maintenance |
| [v1.5.0](#v1-5-0-password-reset-usability) | 2026-06-22 | Feature release |
| [v1.4.0](#v1-4-0-embeddable-views-arm64) | 2026-06-14 | Feature release |
| [v1.3.1](#v1-3-1-maintenance) | 2026-06-09 | Maintenance |
| [v1.3.0](#v1-3-0-more-languages) | 2026-06-09 | Feature release |
| [v1.2.2](#v1-2-2-maintenance) | 2026-06-08 | Maintenance |
| [v1.2.1](#v1-2-1-import-reliability-multi-user-consistency) | 2026-06-08 | Feature release |
| [v1.2.0](#v1-2-0-startup-screen-update-checks) | 2026-06-01 | Feature release |
| [v1.1.1](#v1-1-1-maintenance) | 2026-06-01 | Maintenance |
| [v1.1.0](#v1-1-0-polish-missing-covers) | 2026-05-31 | Feature release |
| [v1.0.0](#v1-0-0-initial-release) | 2026-05-28 | Initial release |

---

## v1.8.0 — Camera & Zoom Control, Optional Telemetry
## v1.9.0: Smarter Import Search & Input UX

<Badge type="warning" text="Unreleased" /> <Badge type="tip" text="Feature release" />

**Summary:** Groups duplicate import-search results into expandable edition groups, makes running searches cancelable, introduces an adaptive date input with a native picker, detects insecure camera contexts, and fixes timezone handling in the daily page statistics.

**Features**
- 📚 **Edition groups in the import search**: results from different providers that describe the same book (same ISBN, or same title and authors) are now grouped into expandable entries with an "N results" badge. Compare the variants side by side and import the one you want; no result is dropped anymore. See the [Library guide](/guide/using-librislog/library#how-results-are-grouped) for the exact grouping rules
- 🛑 **Cancelable book search**: while an import search is running, the Search button becomes a Cancel button, so you can stop the request and refine your query
- ⌨️ **Escape closes dialogs and drawers**: overlays such as the sidebar, the book drawer, and the import modal can now be closed with the Escape key
- 📅 **Adaptive date input**: date fields in the book form now use a segmented year/month/day input that no longer assumes the month or day after the first keystroke, validates values as you type, and accepts pasting a complete date. A calendar button next to the field opens the native date picker
- 🌐 **Searchable timezone picker**: the timezone setting on the profile page is now a searchable dropdown covering all IANA timezones
- 📷 **Secure context detection in the barcode scanner**: if LibrisLog is served outside a secure context (plain HTTP on a remote host), the scan button is hidden and the scanner explains why the camera cannot start, instead of showing a black box. See the [Library guide](/guide/using-librislog/library#isbn-barcode-scan) for details
- 🔗 **Heimdall dashboard integration**: new documentation for the LibrisLog enhanced app, which shows your reading statistics directly on [Heimdall](https://github.com/linuxserver/Heimdall) tiles

**Bug fixes**
- 🗓️ **Timezone-correct daily page statistics**: pages read between two progress updates are now attributed to calendar days in the user's timezone instead of fixed 24h slots, so the pages-per-day view matches your local days. Your heatmap may shift slightly after the upgrade
- 🏷️ **Better contrast for selected suggestion items**: the selected entry in tag and author suggestion dropdowns now has stronger contrast and a visible border in all themes

**Breaking changes:** None.

[Compare with v1.8.0](https://github.com/codebude/librislog/compare/v1.8.0...main)

---

## v1.8.0: Camera & Zoom Control, Optional Telemetry

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-09-02" />

Expand All @@ -57,7 +83,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.7.0 Reading Streaks & Goals
## v1.7.0: Reading Streaks & Goals

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-08-26" />

Expand Down Expand Up @@ -90,7 +116,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.6.0 Reading Progress & Possession Tracking
## v1.6.0: Reading Progress & Possession Tracking

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-08-23" />

Expand All @@ -112,7 +138,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.5.2 Maintenance
## v1.5.2: Maintenance

<Badge type="info" text="Maintenance" /> <Badge type="info" text="2026-06-22" />

Expand All @@ -128,7 +154,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.5.1 Maintenance
## v1.5.1: Maintenance

<Badge type="info" text="Maintenance" /> <Badge type="info" text="2026-06-22" />

Expand All @@ -143,7 +169,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.5.0 Password Reset & Usability
## v1.5.0: Password Reset & Usability

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-06-22" />

Expand All @@ -165,7 +191,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.4.0 Embeddable Views & ARM64
## v1.4.0: Embeddable Views & ARM64

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-06-14" />

Expand All @@ -187,7 +213,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.3.1 Maintenance
## v1.3.1: Maintenance

<Badge type="info" text="Maintenance" /> <Badge type="info" text="2026-06-09" />

Expand All @@ -202,7 +228,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.3.0 More Languages
## v1.3.0: More Languages

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-06-09" />

Expand All @@ -219,7 +245,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.2.2 Maintenance
## v1.2.2: Maintenance

<Badge type="info" text="Maintenance" /> <Badge type="info" text="2026-06-08" />

Expand All @@ -234,7 +260,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.2.1 Import Reliability & Multi-User Consistency
## v1.2.1: Import Reliability & Multi-User Consistency

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-06-08" />

Expand All @@ -256,7 +282,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.2.0 Startup Screen & Update Checks
## v1.2.0: Startup Screen & Update Checks

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-06-01" />

Expand All @@ -272,7 +298,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.1.1 Maintenance
## v1.1.1: Maintenance

<Badge type="info" text="Maintenance" /> <Badge type="info" text="2026-06-01" />

Expand All @@ -289,7 +315,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.1.0 Polish & Missing Covers
## v1.1.0: Polish & Missing Covers

<Badge type="tip" text="Feature release" /> <Badge type="info" text="2026-05-31" />

Expand All @@ -307,7 +333,7 @@ LibrisLog v1.8.0 brings camera selection and zoom control to the barcode scanner

---

## v1.0.0 Initial Release
## v1.0.0: Initial Release

<Badge type="tip" text="Initial release" /> <Badge type="info" text="2026-05-28" />

Expand Down