Skip to content

Commit d67c5f9

Browse files
committed
🔥 docs: strip legacy opds-sync rebrand notes; add F-Droid install link
The OPDS_SYNC_* env-compat shim and the legacy opds-sync image tag were dropped in #40, so the surrounding narrative ("renamed from opds-sync", "dual-published for one release cycle", volume-rename UPGRADING guide) is now stale and only confuses new readers. Stripped from public docs: - README.md: "formerly named opds-sync" intro/why/repo-layout mentions - docs/release.md: "Post-release cluster operator checklist" section - docs/development.md: example DATABASE_URL switched off opds_sync - server/README.md: "Migration from opds-sync" section - server/UPGRADING.md: deleted (only contained the rename narrative) Stale/contradictory inline comments cleaned in compose files, .env.example, and config.py — the actual POSTGRES_USER/POSTGRES_DB value and default database_url stay opds_sync (intentional persistent identifier). CI rename-guard allowlists updated to match. Also adds the F-Droid listing (link + badge) to the Install section, now that io.theficos.quire is published.
1 parent ce20cbf commit d67c5f9

11 files changed

Lines changed: 18 additions & 233 deletions

File tree

.github/workflows/android-ci.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,12 @@ jobs:
144144
if rg -n -P '\bopds[-_]sync\b|(?<![A-Z0-9_])OPDS_SYNC_[A-Z0-9_]*' \
145145
-g '!.claude/**' \
146146
-g '!CHANGELOG.md' \
147-
-g '!docs/release.md' \
148-
-g '!docs/development.md' \
149147
-g '!server/migrations/versions/*.py' \
150-
-g '!README.md' \
151148
-g '!server/quire_server/config.py' \
152149
-g '!server/docker-compose.yml' \
153150
-g '!server/docker-compose.full.yml' \
154-
-g '!server/UPGRADING.md' \
155151
-g '!server/alembic.ini' \
156152
-g '!server/migrations/env.py' \
157-
-g '!server/.env.example' \
158153
-g '!server/tests/conftest.py' \
159154
-g '!server/tests/unit/test_no_stale_opds_sync_imports.py' \
160155
. ; then

.github/workflows/server-ci.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,12 @@ jobs:
8383
if rg -n -P '\bopds[-_]sync\b|(?<![A-Z0-9_])OPDS_SYNC_[A-Z0-9_]*' \
8484
-g '!.claude/**' \
8585
-g '!CHANGELOG.md' \
86-
-g '!docs/release.md' \
87-
-g '!docs/development.md' \
8886
-g '!server/migrations/versions/*.py' \
89-
-g '!README.md' \
9087
-g '!server/quire_server/config.py' \
9188
-g '!server/docker-compose.yml' \
9289
-g '!server/docker-compose.full.yml' \
93-
-g '!server/UPGRADING.md' \
9490
-g '!server/alembic.ini' \
9591
-g '!server/migrations/env.py' \
96-
-g '!server/.env.example' \
9792
-g '!server/tests/conftest.py' \
9893
-g '!server/tests/unit/test_no_stale_opds_sync_imports.py' \
9994
. ; then

README.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ A self-hosted reading stack for people who already run [calibre-web]:
2828

2929
- **Quire** — native Android EPUB reader (Kotlin / Compose / Readium).
3030
- **Quire Server** — small FastAPI service that stores reading progress
31-
(and later bookmarks) in Postgres. Formerly named `opds-sync`; the
32-
Python package is now `quire_server` and the container image is
33-
`ghcr.io/vitofico/quire-server` (the legacy `ghcr.io/vitofico/opds-sync`
34-
tag is dual-published for one release cycle).
31+
(and later bookmarks) in Postgres. The Python package is `quire_server`
32+
and the container image is `ghcr.io/vitofico/quire-server`.
3533

3634
calibre-web stays the source of truth for books. Quire Server is the
3735
source of truth for reading state. Quire reconciles both on the device.
@@ -61,12 +59,11 @@ That's harder than it sounds in the self-hosted world:
6159
- **Stock OPDS readers** on Android either don't sync reading position
6260
to a server you control, or sync it through a vendor cloud.
6361

64-
So Quire Server (originally shipped as `opds-sync`) is the piece that
65-
was missing: a small, reader-agnostic progress server that speaks
66-
OPDS-style document identity and uses your **calibre-web account as
67-
the only credential** — no second IdP, no separate sync account. Quire
68-
is the Android client built against it; nothing in the server design
69-
is Quire-specific.
62+
So Quire Server is the piece that was missing: a small, reader-agnostic
63+
progress server that speaks OPDS-style document identity and uses your
64+
**calibre-web account as the only credential** — no second IdP, no
65+
separate sync account. Quire is the Android client built against it;
66+
nothing in the server design is Quire-specific.
7067

7168
## Privacy
7269

@@ -120,8 +117,14 @@ For configuration details see [`server/README.md`](server/README.md).
120117

121118
## Install
122119

123-
Grab the latest APK from [Releases], install it, and point it at your
124-
calibre-web URL on first launch. F-Droid listing is planned.
120+
Install Quire from [F-Droid] or grab the latest APK from [Releases],
121+
then point it at your calibre-web URL on first launch.
122+
123+
<a href="https://f-droid.org/packages/io.theficos.quire/">
124+
<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
125+
alt="Get it on F-Droid"
126+
height="80">
127+
</a>
125128

126129
For the sync server, see [`server/README.md`](server/README.md) — it
127130
ships two reference docker-compose files (`docker-compose.yml` for
@@ -179,7 +182,7 @@ data/opds/ calibre-web OPDS client
179182
data/sync/ quire-server REST client + WorkManager job
180183
data/library/ quire-server /library/v1 HTTP client (stats today)
181184
reader/ Readium navigator integration
182-
server/ quire-server (Python / FastAPI; formerly opds-sync)
185+
server/ quire-server (Python / FastAPI)
183186
docs/ Architecture, development, sync API reference
184187
scripts/dgradle Gradle wrapper that runs inside the project's Docker image
185188
Dockerfile Reproducible Android build environment (linux/amd64)
@@ -218,3 +221,4 @@ If Quire is useful to you and you'd like to chip in, you can buy me a coffee:
218221

219222
[calibre-web]: https://github.com/janeczku/calibre-web
220223
[Releases]: https://github.com/vitofico/quire/releases
224+
[F-Droid]: https://f-droid.org/packages/io.theficos.quire/

docs/development.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ Listens on `http://localhost:8000`. Configuration is via environment variables;
114114
see `quire_server/config.py` for the full list. At minimum:
115115

116116
```
117-
QUIRE_SERVER_DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/opds_sync
117+
QUIRE_SERVER_DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/quire
118118
QUIRE_SERVER_CWA_BASE_URL=https://library.example.com
119119
# Optional, defaults shown:
120120
QUIRE_SERVER_CWA_PROBE_PATH=/opds

docs/release.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,6 @@ the unlabeled `0001..0004` backbone and then `alembic upgrade
4141
and `QUIRE_SERVER_AI_ENABLED`. Sync-only and AI-only deployments skip the
4242
other branch's migrations silently. See `server/migrations/README.md`.
4343

44-
### Post-release cluster operator checklist (server rename)
45-
46-
The rename release publishes both `ghcr.io/vitofico/quire-server:<sha>`
47-
and `ghcr.io/vitofico/quire-server:latest` AND keeps the legacy
48-
`ghcr.io/vitofico/opds-sync:<sha>` / `:latest` tags pointing at the same
49-
digest for one cycle. The Quire repo does **not** modify any cluster
50-
manifests; that work is an operational ticket against
51-
`theficos-cluster` covering, in order: (1) additive apply of the new
52-
Secret / ConfigMap / Deployment / Service for `quire-server`, (2)
53-
`/readyz` green on the new pod, (3) flip the calibre-web ingress
54-
backend, (4) remove the old `opds-sync` resources after the next
55-
release cycle confirms the new name is healthy.
56-
5744
## One-time keystore setup
5845

5946
```sh

server/.env.example

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@
44
# + quire-server) and `docker-compose.full.yml` (full stack: postgres +
55
# calibre-web + quire-server + Caddy). Vars marked "full-only" are only
66
# read by the full-stack compose.
7-
#
8-
# NOTE: For one release cycle the server ALSO reads OPDS_SYNC_* names
9-
# FROM REAL ENVIRONMENT VARIABLES ONLY (per Lock #21). Legacy names in
10-
# this .env file are NOT honored. Migrate any OPDS_SYNC_* keys you may
11-
# have used previously to QUIRE_SERVER_* before the next release.
127

138
# --- Shared (minimal + full) ---
149
POSTGRES_PASSWORD=change-me

server/README.md

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -224,30 +224,6 @@ Update the health-probe path: it moved from `/sync/v1/healthz` (pre-PR-A) to
224224
`/health` in PR-A. The k8s manifests in `theficos-cluster` need a one-line
225225
bump alongside this release.
226226

227-
### Migration from opds-sync
228-
229-
The server was renamed from `opds-sync` to `quire-server` in 2026-05.
230-
For one release cycle:
231-
232-
- **Env vars**`QUIRE_SERVER_*` is the preferred prefix. The legacy
233-
prefix is still honored when set on **real environment variables**.
234-
**Known limitation (Lock #21):** legacy values placed in a `.env`
235-
file are NOT honored. To migrate a legacy `.env` file, rename the
236-
keys; alternatively, export the legacy names as real env vars at
237-
process start.
238-
- **Image**`ghcr.io/vitofico/quire-server:<sha>` and
239-
`ghcr.io/vitofico/quire-server:latest` are the new tags. The legacy
240-
`ghcr.io/vitofico/opds-sync:<sha>` / `:latest` tags are dual-published
241-
from the same digest for one release cycle to give operators a window
242-
to repin.
243-
- **DB role / DB name** — these are explicitly **not renamed**. The
244-
postgres role and database stay named `opds_sync` (matches the value
245-
in `alembic.ini` and the `database_url` default). Renaming a
246-
production DB is high-risk and out of scope for this PR.
247-
248-
A future release will drop the legacy prefix, the legacy image tag, and
249-
the env-compat helper. The DB-name non-rename is permanent.
250-
251227
### Environment variables
252228

253229
`QUIRE_SERVER_` prefix; full list in `quire_server/config.py`. Most-load-bearing:

server/UPGRADING.md

Lines changed: 0 additions & 137 deletions
This file was deleted.

server/docker-compose.full.yml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,16 @@
1414
#
1515
# See server/README.md "Full-stack reference compose" for smoke commands
1616
# and the TLS swap for production.
17-
#
18-
# Env-var compatibility: this compose uses the post-rename
19-
# QUIRE_SERVER_* prefix. The server also accepts legacy OPDS_SYNC_*
20-
# from REAL environment variables only (the back-compat shim does NOT
21-
# read .env files - see server/README.md "Migration from opds-sync").
22-
# Pick one prefix per deployment; do not mix.
2317

2418
services:
2519
postgres:
2620
image: postgres:16-alpine
2721
restart: unless-stopped
2822
environment:
29-
# DB role / DB name remain 'opds_sync' as a deliberate non-rename
30-
# (Lock #20). The Python package and image are 'quire_server' /
31-
# 'quire-server' respectively.
3223
POSTGRES_USER: opds_sync
3324
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
3425
POSTGRES_DB: opds_sync
3526
volumes:
36-
# Volume name kept as `pg_data` for the back-compat window so
37-
# existing deployments from v2026.05.17.95 onwards do not
38-
# silently get an empty new volume. A future PR may rename it
39-
# with an explicit upgrade banner; see README "Migration from
40-
# opds-sync". Note: the minimal compose uses `opds_sync_pg` for
41-
# the same reason - it shipped earlier with that name.
4227
- pg_data:/var/lib/postgresql/data
4328
healthcheck:
4429
test: ["CMD-SHELL", "pg_isready -U opds_sync"]

server/docker-compose.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,12 @@
1-
# NOTE FOR SELF-HOSTERS UPGRADING FROM A PREVIOUS RELEASE:
2-
# The Postgres named volume was renamed from `opds_sync_pg` to `pg_data` on
3-
# 2026-05-21. If you have an existing deployment, DO NOT simply `docker
4-
# compose up -d` — you must copy the old volume to the new name first or
5-
# Postgres will start with an empty data directory. See ./UPGRADING.md for
6-
# step-by-step instructions.
7-
81
services:
92
postgres:
103
image: postgres:16-alpine
114
restart: unless-stopped
125
environment:
13-
# DB role / DB name remain 'opds_sync' as a deliberate non-rename
14-
# (Lock #20). The Python package and image are 'quire_server' /
15-
# 'quire-server' respectively.
166
POSTGRES_USER: opds_sync
177
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
188
POSTGRES_DB: opds_sync
199
volumes:
20-
# Renamed from `opds_sync_pg` on 2026-05-21 to match
21-
# docker-compose.full.yml. Existing deployments: see ./UPGRADING.md.
2210
- pg_data:/var/lib/postgresql/data
2311
healthcheck:
2412
test: ["CMD-SHELL", "pg_isready -U opds_sync"]

0 commit comments

Comments
 (0)