Releases: internetarchive/openlibrary
Release list
deploy-2026-08-18-at-16-12
TL;DR
Open Library — Aug 18, 2026
Browsing is faster. Subject pages load results immediately while filters catch up in the background.
Book carousels are smoother, with better mobile scrolling and improved accessibility.
Search is healthier. Monitoring graphs that were broken since our Solr upgrade are restored, giving the team visibility into search performance again.
Views are now shareable. Users can bookmark or share URLs that preserve their list vs. grid preference.
What's Changed
- Update astral-sh/setup-uv action to v8.3.2 by @renovate[bot] in #13304
- Document local-dev API and copydocs gotchas by @RayBB in #13307
- feat(vendors): make Amazon affiliate metadata fetch async by @RayBB in #13305
- Explain why undoing an author merge fails instead of returning a 500 (#5664) by @RayBB in #13306
- feat(a11y): wire @axe-core/playwright into the e2e suite by @lokesh in #13251
- fix: parse Solr 10 request logs (restores Solr Graphite metrics) by @mekarpeles in #13212
purge_s3_keys.pyscript updates by @jimchamp in #13302- feat(amazon): require Creators API, remove PA-API fallback from affiliate server by @openlibrary-bot in #13315
- Update Spanish translation by @dcapillae in #13320
- Only auto-run npm ci on LOCAL_DEV to speed up testing deploys by @cdrini in #13321
- fix(manifest): add explicit share_target enctype by @RayBB in #13323
- fix: popovers render underneath header by @lokesh in #13324
- feat(css): migrate CSS build from webpack to Vite by @RayBB in #13326
- Rebuild ol-carousel on native scroll snapping by @lokesh in #13220
- Mount ol-vendor volume in fast_web like other containers to avoid initialization errors by @cdrini in #13340
- Format solr haproxy config to use spaces consistently by @cdrini in #13348
- Accept Notated music monographs on import by @hornc in #13345
- ol-button: href links, ghost variant, icon/circle shapes, floating elevation by @lokesh in #13347
- Remove web.py endpoints served by FastAPI on production by @Sanket17052006 in #13317
- Remove dead bookadded flash message code by @RayBB in #13336
- Make expensive facet requests on subject page partials and async by @cdrini in #13334
- Sync layout URL param when toggling list/grid view by @Varadraj75 in #13337
- Switch from big OR clauses to solr terms queries for better performance by @cdrini in #12874
- fix: don't rewrite local-params fq (e.g. {!terms}) into editions query by @cdrini in #13353
- Regression: Fix lists/series edition-awareness by copying contextvars through async bridge by @cdrini in #12966
- Make local dev environment use ~650MB less memory by @cdrini in #13341
- chore: add removed endpoints to deprecated paths by @Sanket17052006 in #13363
- Remove stats and stats-header feature flags by @Sanket17052006 in #13364
- Make debug feature flag optional with LOCAL_DEV by @Sanket17052006 in #13293
New Contributors
- @Varadraj75 made their first contribution in #13337
Full Changelog: deploy-2026-08-11-at-17-16...deploy-2026-08-18-at-16-12
deploy-2026-08-11-at-17-16
What's Changed
- fix: keep catalog export links in a row below floated columns (author page) by @lokesh in #13219
- Fix #13202: render markdown links whose URL contains parentheses by @nancypatel12 in #13236
- Adding primitive support for likes #12768 by @shreya8040 in #12932
- fix(agentic): pin claude-code-action to last working SHA (enrichment + autoresponder silently no-op since 07-18) by @openlibrary-bot in #13229
- fix typos in test case name by @hornc in #13243
- Move the search results toolbar onto web components by @lokesh in #13228
- fix: track Book Preview and Search Inside events in Matomo by @Sadashii in #13254
- refactor: replace raw z-index values with semantic tokens by @Armansiddiqui9 in #13247
- Add SubjectSearch macro so the /subjects search field has an accessible label by @lokesh in #13250
- Fix login issues for recent registrants who have requested print disability access by @jimchamp in #13260
- Replace dev feature flag with LOCAL_DEV by @Sanket17052006 in #13123
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #13249
- Update vendor/infogami digest to 7cb5b9e by @RayBB in #13266
- feat(a11y): add jest-axe CI gate for Lit component ARIA patterns by @mekarpeles in #13006
- Fix newly-enabled Ruff lint errors and sqlfluff PG01 by @RayBB in #13267
- fix(env): resolve get_ol_env() name collision causing 500 by @RayBB in #13268
- fix(js): resolve console errors on book, work, author, and search pages by @lokesh in #13257
- feat: add Bookdash import scraper by @rattnak in #13237
- Disable price fetching in AffiliateLinksPartial by @cdrini in #13271
- feat(pagination): add size property with small and medium variants by @lokesh in #13238
- Replace undo feature flag with explicit is_super_librarian() check by @Sanket17052006 in #13269
- Color tokens: warm neutral ramps, semantic layer, deprecated aliases by @lokesh in #13102
- Signal-ranked Notable Authors for subject pages by @Armansiddiqui9 in #13142
- Don't save empty identifiers by @hornc in #13149
- chore: remove lokesh from weekly status report leads by @lokesh in #13294
- fix(pre-commit): stop stylelint failing when every staged file is ignored by @lokesh in #13253
- Manually send data-ol-link-track to matomo by @cdrini in #13300
- feat(search): add GET /search/facets.json — context-aware facet values API by @mekarpeles in #12980
New Contributors
- @nancypatel12 made their first contribution in #13236
Full Changelog: deploy-2026-07-30-at-18-39...deploy-2026-08-11-at-17-16
deploy-2026-07-30-at-18-39
What's Changed
- fix(docker): guard PIP_INDEX_URL test against set -u nounset by @mekarpeles in #13200
- Web component segmented control by @lokesh in #12931
- Add genre reference property to /type/tag schema by @Chisomnwa in #13201
- i18n: keep messages.pot location comments on one line to prevent merge conflicts by @lokesh in #12903
- Persist comments when books are deleted by @jimchamp in #13223
- chore(ci): remove dead issue_refinement workflow (disabled, superseded by issue_enrichment) by @openlibrary-bot in #13216
- fix(ci): stop the daily digest labeling bot comments 'Needs: Response' by @openlibrary-bot in #13217
- fix(ci): make new_pr_labeler's canonical-repo guard actually guard by @openlibrary-bot in #13215
- fix: dropper AttributeError when redirect stub has no title by @TechGenius-Karan in #13188
- fix(templates): don't build edition_key="/books/None" when no edition is set by @openlibrary-bot in #13231
- feat: add statsd and matomo tracking for signup and activation funnel by @Sadashii in #13190
Full Changelog: deploy-2026-07-23-at-21-45...deploy-2026-07-30-at-18-39
deploy-2026-07-23-at-21-45
What's Changed
- Remove redundant recentchanges_v2 feature flag by @Sanket17052006 in #13094
- fix(search-modal): count NoResults per settled query, not per keystroke by @lokesh in #13114
- fix(a11y): add title attributes to iframes (WCAG 2.4.1 H64) by @mekarpeles in #13012
- fix(a11y): mark decorative star rating symbols aria-hidden (WCAG 1.4.3) by @mekarpeles in #13028
- fix(a11y): fix color contrast in OlToggle sublabel and nav-bar work-menu (WCAG 1.4.3) by @mekarpeles in #13027
- fix(a11y): add role=group to OlSelectPopover host (aria-prohibited-attr WCAG 4.1.2) by @mekarpeles in #13037
- fix(a11y): add aria-label to generic-dropper arrow button (link-name WCAG 2.4.4) by @mekarpeles in #13029
- fix(a11y): use --link-blue for secondary login button (contrast WCAG 1.4.3) by @mekarpeles in #13030
- feat: add progress bar to OlToast and improve alignment of OlToast and OlBanner by @Sadashii in #13082
- feat(agentic): Richy issue enrichment via claude-code-action by @mekarpeles in #13075
- feat(agentic): add workflow_dispatch for manually testing Richy by @openlibrary-bot in #13117
- feat(search-modal): add ResultsShown analytics event by @lokesh in #13115
- fix(a11y): add aria-label to ReadButton dropdown summary (WCAG 4.1.2) by @lokesh in #13116
- fix(agentic): correct stale label names, add checklist-resolution discipline by @openlibrary-bot in #13118
- Update environment of cron service by @jimchamp in #13111
- Remove redundant superfast feature flag by @Sanket17052006 in #13100
- Remove redundant lists feature flag by @Sanket17052006 in #13087
- Replace history_v2 feature flag with is_librarian_or_higher() check by @Sanket17052006 in #13121
- Remove leftover recentchanges_v2 feature flag from openlibrary.yml by @gaurav0107 in #13122
- Migrate hide banner to FastAPI by @Shikhar-395 in #13096
- feat: preview tracking before data for #12881 by @Sadashii in #13099
- fix(add_book): use _data.pop to strip infobase metadata from matched author by @TechGenius-Karan in #13032
- Copy cover_i key from Solr. Fixes #11563 by @tfmorris in #11696
- Warm nexus cache before parallel docker pull in deploy by @cdrini in #12976
- Fix null ASINs being saved during promise item import by @cdrini in #12834
- Fix 3,063 lists with subjects failing to index into solr by @cdrini in #12873
- Fix ratings microdata appearing thrice on book page, causing SEO errors by @cdrini in #12975
- Move expiry date info inside ReturnForm and update My Loans table layout by @Sadashii in #12912
- Add issue labeling exclusion for GitHub bot accounts by @jimchamp in #13139
- Update S3 key removal script by @jimchamp in #13127
- Fix: Added want to read button on trending page by @dvvrtmshra in #13120
- chore(search): remove dead search-mode localStorage plumbing by @lokesh in #13124
- Fix SIM103 lint error in issue_comment_bot.py by @lokesh in #13143
- Fix author date precision matching by @MakenRosa in #13128
- Add environment favicons and logo badges for localhost & testing by @lokesh in #13125
- Fix issue labeling logic by @jimchamp in #13145
- Remove unnecessary feature and test by @hornc in #13147
- fix(agentic): allow non-write actors to trigger issue enrichment by @mekarpeles in #13154
- fix(agentic): exclude openlibrary-bot from issue enrichment by @mekarpeles in #13166
- feat(agentic): PR auto-responder via claude-code-action by @mekarpeles in #13164
- feat(ci): add weekly on-call Slack notification workflow by @jimchamp in #13168
- feat(agentic): scaffold Code Review Action trigger (NOP) by @mekarpeles in #13167
- feat(dev): add mockservices — mocks IA/third-party services for local dev (replaces /internal/fake/* stubs) by @mekarpeles in #13045
- switch bookworm to use amz creators API by @mekarpeles in #13173
- Add usefulness score to solr + UI by @cdrini in #11724
- feat: show alternatives banner on unavailable book pages by @Sadashii in #12910
- fix(ci): pass Slack channel as a secret, not a with: input by @mekarpeles in #13175
- fix: resolve download record bar overflowing containers globally by @RsbhThakur in #13091
- Migrate qrcode endpoint to FastAPI by @Shikhar-395 in #13140
- Fix: Add FastAPI validation bounds and test suites for patron check-ins and yearly goals endpoints (#13150) by @RsbhThakur in #13156
- Migrate api/link endpoint to FastAPI by @Sanket17052006 in #13144
- fix(docker): route staging's runtime pip fallback through internal PyPI mirror by @mekarpeles in #13178
- feat: Make Preview / Search Inside more visible on books page by @Sadashii in #13112
- fix(docker): source build_env.sh from /olsystem + wire PIP_INDEX_URL as a build arg by @mekarpeles in #13180
- Update monitoring UA list by @cdrini in #13181
- Comment out broken Unique Visitors chart (#12823) by @Sadashii in #12831
- Add genres and subgenres fields to work type definition and schema by @Chisomnwa in #13151
- fix: resolve volumes multiget endpoint failing with .json extension by @RsbhThakur in #13093
- fix(add_book): fix walrus operator precedence bug in author dedup (#13015) by @addy790 in #13021
- feat(api): allow /api/unlink caller to specify op type (dark vs mismatch) by @mekarpeles in #13183
- chore(docker): parameterize hardcoded dev ports for parallel worktrees by @mekarpeles in #13185
- refactor: convert Follow.html macro to template with safe attribute interpolation by @TechGenius-Karan in #12985
- feat(identifiers): add ITAN Book ID identifier (itan_technologies) by @mekarpeles in #12947
- Fix: crash on /books/add check page that prevents selecting matches o… by @dvvrtmshra in #13085
- fix: safe attribute construction for data-ol-link-track in 4 templates by @mekarpeles in #13187
- Redirect DAISY pages to Archive item pages by @nathanpixodeo in #13049
- Use docker compose extra_hosts to work around ol-home0 issues by @cdrini in #13198
New Contributors
- @gaurav0107 made their first contribution in #13122
- @TechGenius-Karan made their first contribution in #13032
- @dvvrtmshra made their first contribution in #13120
- @MakenRosa made their first contribution in #13128
- @addy790 made their first contribution in #13021
- @nathanpixodeo made their first contribution in #13049
Full Changelog: https://github.c...
deploy-2026-07-02-at-19-32
What's Changed
- chore(tests): replace deprecated BeautifulSoup findAll with find_all by @RayBB in #13046
- Fix json encode potential XSS when in script tags by @cdrini in #13050
- fix(search-modal): drop "all" from See-all button when every hit is shown by @lokesh in #13048
- feat(proxy): route outbound requests through single authenticated http_proxy by @mekarpeles in #12724
- fix(proxy): restore 5 items dropped by bad rebase in #12724 by @openlibrary-bot in #13063
- fix: account for button height in read-more truncation threshold by @RsbhThakur in #13059
- feat(i18n): dispatch to openlibrary-i18n when messages.pot changes by @mekarpeles in #13069
- Migrate account anonymize endpoint to FastAPI by @Sanket17052006 in #13000
- chore(deps): update actions/checkout action to v7 by @renovate[bot] in #13054
- Migrate work editions and author works by @Shikhar-395 in #12965
- Migrate monthly logins to FastAPI by @Shikhar-395 in #13041
- fix: remove redundant merge-authors feature flag by @Sanket17052006 in #13040
- Standardize support to MediaWiki Grade A and drop older browser polyfills/etc by @lokesh in #12685
- Browse menu: redesign as a popover with featured destinations by @lokesh in #12917
- Migrate stats feature flags to pydantic-settings by @Sanket17052006 in #12984
- Fix
KeyErrorinpromise_batch_imports.pyscript by @jimchamp in #12835 - Remove redundant publishers feature flag by @Sanket17052006 in #13084
- Auto-run npm ci when JS dependencies change by @RayBB in #13080
- Add Lit web component by @lokesh in #13077
- test(e2e): add minimal Playwright smoke suite for core OL pages by @lokesh in #13072
- Write select participation scores to statsd by @jimchamp in #13073
- feat(search): author suggestion row above /search results by @lokesh in #13047
- fix(solr): replace hanging temp-Solr migration with fast-fail error message by @mekarpeles in #13002
- feat(api): add /type/tag to /api/new allowed types by @mekarpeles in #13088
- immediately 429 attacks, preempt ModSecurity by @mekarpeles in #13098
- Update xauthn
issue_keykey name by @jimchamp in #13086 - Remove redirect from account verification (to: preserve intent) by @mekarpeles in #13095
- fix(markdown): stop WYSIWYG hard breaks rendering as literal "
" by @lokesh in #13076
New Contributors
- @openlibrary-bot made their first contribution in #13063
- @RsbhThakur made their first contribution in #13059
Full Changelog: deploy-2026-06-25-at-19-06...deploy-2026-07-02-at-19-32
deploy-2026-06-25-at-19-06
Highlights
- First Korean translation (#12830) — clearly stated, plus the other language updates.
- Redesigned history comparison page (#12775) — clearly stated.
- Security work (#12860 encrypted S3 keys in session cookie, #12841 requiring valid keys on OTP endpoints) — accurate, though "user credentials" is my gloss on "S3 keys."
What's Changed
- Try to fix amazon API squid proxy access by @cdrini in #12977
- i18n affiliate links commission string with inline anchor by @cdrini in #12972
- Add ol-tooltip web component by @lokesh in #12131
- Redesigned history page comparison by @Saad259 in #12775
- Add acquisitions table and interface for Trusted Book Providers by @ronibhakta1 in #12851
- i18n(bn): AI translation update — sync with messages.pot by @mekarpeles in #12964
- i18n(tr/cs): fix format-string errors — clear mismatched fuzzy msgstrs by @mekarpeles in #12988
- i18n(ja): AI translation update — fill remaining 14 strings + fix pre-existing errors (2026-06-18) by @mekarpeles in #12982
- i18n(te): AI translation update — sync with messages.pot (2026-06-18) by @mekarpeles in #12981
- Fix importbot + make runnable locally by @cdrini in #12999
- Tweaks to affiliate server + switch to legacy API, which still works for now by @cdrini in #12993
- Add CLAUDE.local.md to gitignore by @cdrini in #13001
- Expand obfi scripts + monitoring by @cdrini in #12973
- Adding initial Korean translation by @systil3 in #12830
- docs(ai/tag-system): add Tags system domain knowledge base by @mekarpeles in #13003
- docs(ai/imports): import pipeline architecture reference by @mekarpeles in #13004
- Include cover width/height in solr by @cdrini in #12916
- Update astral-sh/setup-uv action to v8.2.0 by @renovate[bot] in #12928
- feat(accounts): redirect to My Books after email verification by @mekarpeles in #12970
- docs(ai/imports): add MARC encoding pipeline and add_book internals docs by @mekarpeles in #13018
- docs(ai/solr): add Solr domain knowledge base for PAM agents by @mekarpeles in #13013
- Make community_edits_queue require login ; causing db strain by @cdrini in #12992
- Update messages.po for i18n-bn by @prantikbanerjee2006 in #12991
- fix: unescape HTML numeric entities in import pipeline (normalize_import_record) by @mekarpeles in #12953
- docs(ai/imports): update for PR #12999 — importbot now runnable locally by @mekarpeles in #13035
- docs(ai): add OPDS system architecture reference by @mekarpeles in #13026
- Sync schema files (aka new fields) to solr replica by @cdrini in #13019
- Fix search-funnel analytics: report to Matomo via _paq + sendBeacon by @lokesh in #13038
- fix(processors): remove booklending_utils startup dependency; use config-driven author_exclusions by @mekarpeles in #13024
- Add sentry frontend performance tracking to see user-time performance by @cdrini in #13033
- feat(security): store S3 keys as encrypted session cookie by @mekarpeles in #12860
- feat(accounts): require valid IA S3 keys on OTP service endpoints by @mekarpeles in #12841
New Contributors
Full Changelog: deploy-2026-06-18-at-17-13...deploy-2026-06-25-at-19-06
deploy-2026-06-18-at-17-13
What's Changed
- fix(home): prevent text clipping in onboarding cards by @Armansiddiqui9 in #12864
- Replace debug feature flag with query_param in work_search template by @Sanket17052006 in #12883
- make debug message only for admins by @RayBB in #12884
- 12789/feat/AB Testing by @Sadashii in #12788
- Migrate bestbook endpoints to FastAPI by @Shikhar-395 in #12875
- Remove unused feature flags from openlibrary.yml by @Sanket17052006 in #12888
- Migrate patrons_follows_json endpoint to FastAPI by @Sanket17052006 in #12869
- fix(carousel): source i18n from data-config so partial carousels show localized loading (follow-up to #12714) by @Abhishek764 in #12853
- build(deps-dev): bump shell-quote from 1.8.1 to 1.8.4 by @dependabot[bot] in #12895
- Small solrbuilder tweaks/improvements by @cdrini in #12862
- Add tracking for Preserve Intent banner actions (#9409) by @Sadashii in #12849
- feat(components): add ol-toast and ol-banner web components by @lokesh in #12868
- Add process pool initializer to manage-imports script by @jimchamp in #12900
- Add
Content-Typeheader to import requests by @jimchamp in #12902 - i18n(es): AI translation update — sync with messages.pot (2026-06-10) by @mekarpeles in #12892
- i18n(de): AI translation update — sync with messages.pot (2026-06-10) by @mekarpeles in #12894
- i18n(fr): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12897
- i18n(ru): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12899
- i18n(pt): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12901
- i18n(hr): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12904
- Auto-generate API reference tables for web components by @lokesh in #12891
- i18n(tl): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12905
- i18n(sc): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12906
- i18n(ar): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12907
- i18n(it): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12908
- i18n(ro): AI translation update — sync with messages.pot (2026-06-11) by @mekarpeles in #12909
- i18n(zh): AI translation update — sync with messages.pot (2026-06-13) by @mekarpeles in #12919
- i18n(id): AI translation update — sync with messages.pot (2026-06-14) by @mekarpeles in #12924
- i18n(as): AI translation update — sync with messages.pot (2026-06-14) by @mekarpeles in #12923
- chore(deps): consolidate Python dependency upgrades (non-major) by @mekarpeles in #12921
- chore(deps): consolidate JS/Actions dependency upgrades by @mekarpeles in #12922
- i18n(ja): AI translation update — sync with messages.pot (2026-06-14) by @mekarpeles in #12925
- Remove Storybook in favor of /developers/design by @lokesh in #12934
- Pin slick-carousel to 1.6.0 to fix broken carousel layout by @lokesh in #12936
- feat: Search modal UX improvements by @Armansiddiqui9 in #12797
- Update actions/checkout action to v6.0.3 by @renovate[bot] in #12927
- i18n(tr): AI translation update — sync with messages.pot (2026-06-15) by @mekarpeles in #12937
- i18n(cs): AI translation update — sync with messages.pot (2026-06-16) by @mekarpeles in #12938
- i18n(pl): AI translation update — sync with messages.pot (2026-06-16) by @mekarpeles in #12939
- i18n(uk): AI translation update — sync with messages.pot (2026-06-16) by @mekarpeles in #12940
- Handle acquisition parse errors by @cdrini in #12933
- refactor: Jinja experiment for AffiliateLinks template by @Sanket17052006 in #12776
- Migrate account loans to FastAPI by @Shikhar-395 in #12889
- Migrate merge_authors_json to FastAPI by @Sanket17052006 in #12918
- i18n(id): AI translation update — sync with messages.pot (2026-06-16) by @mekarpeles in #12944
- i18n(te/hi/bn): AI translation bundle — sync with messages.pot (2026-06-14) by @mekarpeles in #12926
- Delete some solr updater dead code + small local solr-updater perf improvements by @cdrini in #12915
- Asyncify public mybooks fastapi endpoint by @cdrini in #12686
- Fix check in POST content type by @Shikhar-395 in #12958
- Add Matomo analytics to search filters and the header search modal by @lokesh in #12948
- fix: Delete freshly created recent Check-ins by @joannajiang711 in #12879
- Migrate work bookshelves to FastAPI by @Shikhar-395 in #12956
- remove unused carousel i18n input by @rakshith1928 in #12951
- i18n(hi): AI translation update — sync with messages.pot by @mekarpeles in #12962
- i18n(ru): AI translation update — sync with messages.pot (2026-06-17) by @mekarpeles in #12963
- i18n(es): AI translation update — sync with messages.pot (2026-06-17) by @mekarpeles in #12959
- Fix #7388: use ungettext() for rating pluralization in star rating macros by @Entropy-rgb in #12971
New Contributors
- @joannajiang711 made their first contribution in #12879
- @rakshith1928 made their first contribution in #12951
- @Entropy-rgb made their first contribution in #12971
Full Changelog: deploy-2026-06-08-at-21-47...deploy-2026-06-18-at-17-13
deploy-2026-06-08-at-21-47
Executive Summary
- Passwordless sign-in launched: Patrons can now log in using a one-time email code, reducing account-access friction and making it easier for returning users to participate.
- Fixed Login Regression: Fixed a deployment regression that could prevent users from being properly signed in.
- FastAPI Modernization continues: Migrated additional APIs to FastAPI, reducing technical debt and improving the platform's long-term maintainability.
What's Changed
- feat(accounts): add OTP (passwordless) login support via xauthn by @mekarpeles in #12681
- refactor(css): systematize z-index with semantic tokens by @Armansiddiqui9 in #12751
- migrate import_preview_json to FastAPI by @Sanket17052006 in #12745
- feat: migrate list and series seeds json endpoints to FastAPI by @harshgupta2125 in #12753
- i18n: add translator notes to stopped reading shelf strings by @Sadashii in #12850
- Update browserslist db (caniuse-lite) by @lokesh in #12866
- fix(accounts): always set session cookie on login regardless of OL account lookup by @mekarpeles in #12876
Full Changelog: deploy-2026-06-04-at-18-24...deploy-2026-06-08-at-21-47
deploy-2026-06-04-at-18-24
Open Library | June 4 Deploy Highlights
- Registration intent preservation: Patrons who hit a login wall mid-action (e.g. borrowing, shelving) are now returned to their intended destination after sign-up — reducing drop-off and friction in the new user funnel
- New "Stopped Reading" shelf and "Works by Decade" reading stats chart added for patrons
- Bug fixes: mobile star ratings, frozen carousels, Solr facet crashes, librarian title sorting
- i18n: Bengali translations updated; translator notes added for reading log strings
- Dev/infra: 7x faster tests, Docker-free pytest, request timeouts, Python/tooling updates
What's Changed
- Update Python by @renovate[bot] in #12643
- Fix librarian work title sorting not ignoring articles by @tfmorris in #11463
- fix: star ratings hidden on Already Read page at mobile/narrow viewports by @Armansiddiqui9 in #12798
- add ability to run pytest outside of docker using uv by @RayBB in #12816
- Speed up FastAPI tests 7x by session-scoping the test client fixture by @RayBB in #12820
- 12714/bug/frozen carousels by @LUC4SWM in #12812
- fix(subjects): guard facet_counts before processing when Solr returns None by @mekarpeles in #12779
- scaffolding for #10262 ol registration by @mekarpeles in #11052
- Use PYTHONPATH instead of pip install for booklending_utils by @cdrini in #12819
- Add timeout to requests in showmarc.py by @mekarpeles in #12817
- 9409/feat/preserve patron intent by @Sadashii in #12764
- Update messages.po for i18n-bn by @prantikbanerjee2006 in #12710
- feat: add 'Stopped Reading' bookshelf and related functionality by @Sadashii in #12400
- i18n: add translator notes to reading log and mybooks shelf strings by @mekarpeles in #12725
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #12836
- Add image download retrying + link to merged PRs to deploy script by @cdrini in #12838
- Fix solr builder for python 3.14 by @cdrini in #12842
- Added 'Works by Decade Published' chart to reading log stats by @Saad259 in #12822
Full Changelog: deploy-2026-05-27-at-19-40...deploy-2026-06-04-at-18-24
deploy-2026-05-27-at-19-40
What's Changed
- refactor: polish OlPopover and OlSelectPopover behavior by @lokesh in #12680
- Fix make i18n warnings by @cdrini in #12771
- Update #11578 -- Fix: Classification dropdown overflow on mobile view by @jimchamp in #12773
- Use amazon search when ISBN isn't suitable by @shoaib-inamdar in #12654
- Fix genre-prefixed subject tag lookup; add genre/subgenre/mood/content_format/literary_form tag types by @Copilot in #12490
- Build modsecurity to avoid it being outdated by @cdrini in #12769
- Migrate lists_json GET/POST endpoints to FastAPI by @Shikhar-395 in #12633
- feat: Add ol-button by @lokesh in #12390
- chore(deps): consolidate Python dependency upgrades (May 2026) by @mekarpeles in #12712
- chore(deps): consolidate JavaScript dependency upgrades (May 2026) by @mekarpeles in #12713
- build: remove black, expand ruff-format to all Python files by @shoaib-inamdar in #12778
- docs: replace Black references with ruff-format by @Shikhar-395 in #12780
- chore(deps): bump vite to ^8.0.5 (latest 8.0.x); unpin Python base image by @mekarpeles in #12711
- fix mybooks routing bug by @RayBB in #12781
- Log ocaid on record disassociation by @jimchamp in #12787
- refactor: remove ACS4 dead code from lending, models, borrow by @mekarpeles in #12525
- Update to solr 10 by @cdrini in #12786
- build: finalize eslint formatting for remaining legacy files by @harshgupta2125 in #12783
- Avoid
AttributeErroron add book action by @jimchamp in #12733 - chore(docker): upgrade base image from bookworm to trixie (python 3.12.13) by @mekarpeles in #12719
- i18n: localize hardcoded JS strings in check-in and reading log components by @AhmedxSaid in #12533
- Preserve selected edition when moving books between reading shelves by @Copilot in #11849
- Add range validation to is_valid_date for month and day (#12754) by @tranmin001 in #12782
- Increase fastapi workers by @cdrini in #12784
- Remove solr_restarter service no longer needed by @cdrini in #12791
- Update vendor/infogami digest to 1fd8b76 by @renovate[bot] in #12806
- Fix author search name sort by @tfmorris in #12809
- Rollback slick to v1.6.0 to resolve UI bug by @cdrini in #12814
- feat: add daily incremental importer for Better World Books via OPDS 2.0 feed by @ronibhakta1 in #12793
- Set PYTHONPATH in olbase image to avoid manually specifying it for scripts by @cdrini in #12811
Full Changelog: deploy-2026-05-19-at-19-10...deploy-2026-05-27-at-19-40
