Repository navigation
Releases: internetarchive/openlibrary
Releases · internetarchive/openlibrary
Release list
deploy-2026-10-29-at-20-59
What's Changed
- Stop macOS tar adding ._* AppleDouble files to deploy tarballs by @cdrini in #14117
- Update actions/setup-node action to v7 by @renovate[bot] in #14083
- Update dependency cryptography to v50 [SECURITY] by @renovate[bot] in #13043
- Add timeouts to python_tests CI jobs by @RayBB in #14120
- Update actions/setup-python action to v7 by @renovate[bot] in #14084
- Show sync I/O that blocks the FastAPI event loop as
blockingin Server-Timing by @RayBB in #14118 - Make selected states, heights and labels consistent across Lit controls by @lokesh in #14122
- Let the FastAPI fallback proxy serve staging.openlibrary.org too by @cdrini in #14127
- Replace stale commented-out edition author mappings with explanation by @cdrini in #14123
- Open Tasks to every signed-in member and track the experience in Matomo by @lokesh in #14067
- MARC link default descriptions by @hornc in #13821
- Correct National Library of Finland lookup URL to fikka by @hornc in #13741
- fix(agentic): don't show the contributor checklist on assigned or staff-only issues by @openlibrary-bot in #13734
- Add sorting options to Reading Log shelves by @Animesh-Jantwal in #14113
- Add a missing-cover task to Tasks by @lokesh in #14068
- Count catalog editors and Tasks saves on a new /stats/tasks page by @lokesh in #14176
- Draw Tasks from a frozen initiative of the 2,000 most-read books by @lokesh in #14183
- Adding classifications to Editions: fixes #14172 by @hornc in #14184
- Add per-bot HTTP status metrics to nginx log monitoring by @RayBB in #14187
- Handle C1 control non-sorting markers in titles and other MARC fields by @hornc in #13855
- Split per-page request metrics by visitor type: anonymous, logged in, librarian by @RayBB in #14192
- Refactor: Use shared bot user agents list for app and nginx monitoring by @CoDe-ReDz in #14191
- Label logged-out bot requests bot in request metrics by @RayBB in #14213
- Index genres, subgenres, and audience in Solr by @Chisomnwa in #13650
- Migrate author merge requests to async database by @Sanket17052006 in #14155
- Sort languages alphabetically using locale-aware PyICU collator by @SarvanshRaj in #12802
- Fold the remaining async test files into their module's test file by @RayBB in #14214
- Ban legacy sync DB imports in new code with Ruff by @RayBB in #14215
- Type fetch_all/fetch_one results by row factory by @RayBB in #14218
- Migrate account anonymization to async database by @Sanket17052006 in #14156
- Show loading feedback on home page book covers and librarian button by @lokesh in #13991
- chore(deps): bump shell-quote 1.9.0 → 1.11.0 (dev-only, clears #430) by @mekarpeles in #14219
- Remove honorific stripping on save-only, which only causes duplicates by @hornc in #14217
- Look up /api/books bibkeys with an async read of Infobase's tables by @RayBB in #14124
- Skip (not fail) code review on fork PRs: add same-repo guard by @openlibrary-bot in #14212
- Pass the s3 cookie into get_loan_history_data by @cipoklean in #14001
New Contributors
- @CoDe-ReDz made their first contribution in #14191
- @SarvanshRaj made their first contribution in #12802
Full Changelog: deploy-2026-10-27-at-20-59...deploy-2026-10-29-at-20-59
deploy-2026-10-27-at-20-59
What's Changed
- fix(wikidata): upsert cache entries atomically by @dhruvwarriorr in #13942
- Update Python dependencies (non-major) by @renovate[bot] in #13917
- Migrate Booknotes FastAPI endpoints to async database by @Sanket17052006 in #13922
- fix(likes): save likes with an atomic upsert by @dhruvwarriorr in #13953
- Replace jQuery UI tabs with web component by @RayBB in #13910
- 13819 Search Inside: detecting double quotes and showing how query interprets by @Prabh0608 in #13907
- Update default unlink comment for clarity by @mekarpeles in #13975
- Removed the dead div#background rule, removed the admin grey body background by @Ved-sketch in #13987
- Finer per-route latency buckets for FastAPI Prometheus metrics by @RayBB in #13981
- Use request-scoped site in load_author_import_records by @cipoklean in #13972
- Fix print-disabled access in FastAPI carousels by @Sanket17052006 in #13969
- fix(follows): make repeated subscriptions safe by @dhruvwarriorr in #13968
- fixes #13891 so devs can still use OL by @hornc in #13954
- refactor(imports): skip duplicate batch items with atomic bulk inserts by @dhruvwarriorr in #13973
- 13979: Enable multiprocess Prometheus metrics by @Sanket17052006 in #13995
- Fix List and Series site access in FastAPI workers by @24f2003970 in #13996
- fix(marc): Keep the MARC $c title out of the author name by @MohitSAGAR11 in #13888
- Make MARC author date patterns reusable across calls by @sebxt in #14022
- Don't save empty Classifications by @hornc in #13955
- Add per-route timing metrics for web.py by @Arav-Arun in #14014
- fix: distinguish FastAPI and web.py events in Sentry by @dhruvwarriorr in #13992
- Start the olbase build from the deploy wizard with gh by @RayBB in #13947
- Fix web.py metric names for routes with a dot by @RayBB in #14040
- fix(match): match authors regardless of name order by @MohitSAGAR11 in #14024
- feat(agents): add dewey subagent (tags & subject vocabulary) by @openlibrary-bot in #14056
- feat(agents): add odie subagent (OPDS feeds) by @openlibrary-bot in #14059
- feat(agents): add lenny subagent (lending & borrowing) by @openlibrary-bot in #14058
- feat(agents): add impa subagent (import pipeline) by @openlibrary-bot in #14061
- feat(agents): add saul subagent (search & Solr) by @openlibrary-bot in #14057
- feat(agents): add oppenheimer subagent (ops, monitoring & performance) by @openlibrary-bot in #14062
- chore(deps): update dependency pillow to v13 [security] by @renovate[bot] in #14074
- Drop trust in compromised emSign ECC Root CA - G3 from pip and certifi by @cdrini in #14065
- fix(borrow): send "Preview" web links to the provider by @iamtanmaybaranwal in #14072
- fix(gh_scripts): restore PR lead auto-assignment and stop labeling PRs 'Needs: Lead' (#13743) by @openlibrary-bot in #13745
- chore(deps): update dependency vite to v8.1.6 [security] by @renovate[bot] in #14044
- Add space between buttons in featured editions table by @Animesh-Jantwal in #14079
- docs: mention make icons in Docker guide by @Abhishek764 in #14042
- update css.md for shell/head.html.jinja and fix putctx example. (replaces site.html) by @Ved-sketch in #14034
- fix(edition): drop dangling separators from the share description by @iamtanmaybaranwal in #14035
- chore(deps): update actions/stale action to v11 by @renovate[bot] in #14085
- Migrate public reading log queries to async database by @Sanket17052006 in #14076
- Migrate Follows FastAPI paths to async database by @Sanket17052006 in #13957
- Migrate reading state to async database for ReadingState partial by @Sanket17052006 in #13976
- chore(deps): update actions/labeler action to v7 by @renovate[bot] in #14029
- Remove unused Codecov upload steps from CI by @renovate[bot] in #14026
- refactor(reading-goals): save goals with an upsert instead of is_update by @Shikhar-395 in #13977
- fix: adds client-side URL validation to the "Book URL" field on /books/add by @BinduYajman in #14027
- Add cross-component consistency checks to the design playground by @lokesh in #13993
- Use request-scoped site in /search/lists.json by @patrickballard in #14003
- Pass the base URL to dynlinks explicitly instead of setting
web.ctx.homein/api/booksand/api/volumesby @MohitSAGAR11 in #14002 - Replace jQuery Toast.js with by @RayBB in #13898
- Fix render_once deduplication across FastAPI requests by @24f2003970 in #14000
- test(booknotes): add regression tests for the
Booknotes.addupsert by @dhruvwarriorr in #13967 - Migrate FastAPI observations queries to async database by @Sanket17052006 in #14055
- Migrate bookshelves API to async database by @Sanket17052006 in #14069
- Fix races between Prometheus scrapes and dead-worker merges by @RayBB in #14115
- Migrate Bestbook FastAPI queries to async DB by @Sanket17052006 in #14112
New Contributors
- @cipoklean made their first contribution in #13972
- @24f2003970 made their first contribution in #13996
- @sebxt made their first contribution in #14022
- @Arav-Arun made their first contribution in #14014
- @Animesh-Jantwal made their first contribution in #14079
- @BinduYajman made their first contribution in #14027
- @patrickballard made their first contribution in #14003
Full Changelog: deploy-2026-10-15-at-22-14...deploy-2026-10-27-at-20-59
deploy-2026-10-15-at-22-14
What's Changed
- Update actions/github-script action to v9 by @renovate[bot] in #13582
- Update dependency Pillow to v12.3.0 [SECURITY] by @renovate[bot] in #13189
- Update dependency python-multipart to v0.0.31 [SECURITY] by @renovate[bot] in #13172
- Remove jQuery from admin.js by @RayBB in #13895
- Fix 500 error in /authors/merge.json when an error has no JSON body by @RayBB in #13932
- Add Server-Timing header to FastAPI responses by @RayBB in #13920
- Public /tasks landing page with a recent-edits feed by @lokesh in #13931
- Label web.py workers waiting on AsyncBridge calls by @RayBB in #13934
- Migrates the FastAPI ratings endpoints to async psycopg3 pool by @Sanket17052006 in #13904
- Remove unneeded key.lower() in public reading log endpoint by @RayBB in #13933
- feat(lenny): return a Lenny provider loan from Open Library (#13909) by @openlibrary-bot in #13911
- fix(lenny): guard node JSON parsing against malformed responses by @dhruvwarriorr in #13921
- POC: standalone iannotate snippets service on ol-home0 by @mekarpeles in #13943
- Remove flot: homepage and /stats charts as SVG, imports and publishing history with Chart.js by @RayBB in #13901
- iannotate compose: pass PIP_INDEX_URL/proxy build args from env by @mekarpeles in #13945
- nginx snippets: allow PUT, block public DELETE by @mekarpeles in #13946
- Add Browse the stacks to the home page by @lokesh in #13783
- nginx snippets: make GET public, keep writes archive.org-only by @mekarpeles in #13949
- Home page: librarian call-out and a compact stats card replace the five-chart stats block by @lokesh in #13831
New Contributors
- @dhruvwarriorr made their first contribution in #13921
Full Changelog: deploy-2026-10-13-at-20-42...deploy-2026-10-15-at-22-14
deploy-2026-10-13-at-20-42
What's Changed
- Add async psycopg3 pool support by @Sanket17052006 in #13676
- Button label audit by @lokesh in #13721
- Remove dead button rules, page-banner tablet CSS and unused icons by @lokesh in #13806
- Status page: four small UI/UX improvements by @MohitSAGAR11 in #13718
- Update matched authors on new imports by @hornc in #13812
- Fix return book: read action from POST body by @RayBB in #13818
- updated the wrap rule so that it now covers the whole container by @Prabh0608 in #13782
- fix(ile): clear drag state, not just the class, on Clear Selections by @iamtanmaybaranwal in #13707
- Use a terms filter for list carousel Solr queries by @RayBB in #13408
- Support Ubuntu and node-exporter in provision_olserver.sh by @cdrini in #13749
- docs: consolidate the AI knowledge base into docs/ by @mekarpeles in #13820
- chore: typo cleanup and codespell ignore tidy-up by @RayBB in #13834
- Remove dead CSS: ~1,050 lines of unreachable rules and three orphaned stylesheets by @lokesh in #13828
- Restore two rules the CSS cleanup removed that are still live by @lokesh in #13837
- Serve /stats Graphite charts through a cached server-side proxy by @RayBB in #13840
- Use Oxfmt for CSS formatting (first step of migration to Oxfmt) by @RayBB in #13842
- docs: KB rules + fix dev-port facts and stale links (#13835) by @openlibrary-bot in #13839
- docs: fix obsolete OPDS and tooling references by @harshitethic in #13854
- chore(agentic): switch Claude auth to openlibrary-bot subscription token by @openlibrary-bot in #13836
- perf: cache /trending/now and align default limit between page and API by @RsbhThakur in #13862
- Remove jQuery from 5 front-end files by @RayBB in #13845
- feat(search): add /search/editions.json API endpoint by @RsbhThakur in #13863
- Migrate cover dialogs from colorbox to ol-dialog by @RayBB in #13864
- 30x faster i18n tests: 50,280 cases down to 53, ~32 s down to ~1 s by @RayBB in #13867
- Fix the My Books header's squeezed Share link by @lokesh in #13869
- feat: split import/export UI and routes (#13774) by @Sadashii in #13791
- Remove colorbox and migrate the observations modal to ol-dialog by @RayBB in #13868
- Add a skip to main content link for keyboard users by @lokesh in #13822
- Lenny OAuth borrow, composed and unblocked: the grant lives in provider_tokens, and schema.sql has the table (#12844) by @openlibrary-bot in #13865
- Librarian Tasks page by @lokesh in #13710
- refactor: convert site header templates to Jinja by @RsbhThakur in #13703
- Migrate FastAPI check-ins to async database by @Sanket17052006 in #13859
- Lint patron_data.sql and import-partial.sql with sqlfluff 4.4.0 by @gauranshahuja in #13732
- Move JS lint/format to oxlint and oxfmt, keep eslint for Vue only (#1… by @Nehant14 in #13870
- Build the FastAPI test app with LOCAL_DEV off by @MohitSAGAR11 in #13880
- Update actions/deploy-pages action to v5.0.1 by @renovate[bot] in #13623
- Update actions/checkout action to v7 by @renovate[bot] in #13580
- Remove jQuery from add-book.js by @RayBB in #13896
- Update dependency chart.js to v4 by @renovate[bot] in #12761
- Update eslint to v10 by @renovate[bot] in #13607
- Update dependency svgo to v4.1.0 [SECURITY] by @renovate[bot] in #13196
- Migrate FastAPI monthly logins to async database by @Sanket17052006 in #13903
- Update Python dependencies (non-major) by @renovate[bot] in #12929
- docs(frontend): restore missing design guidelines and pointers by @harshitethic in #13882
- remove non-existent file from codespell exceptions by @hornc in #13897
New Contributors
- @Prabh0608 made their first contribution in #13782
- @harshitethic made their first contribution in #13854
Full Changelog: deploy-2026-10-06-at-17-39...deploy-2026-10-13-at-20-42
deploy-2026-10-06-at-17-39
What's Changed
- Fix az i18n test failures without dropping translations; add i18n-lint no-tree-order by @cdrini in #13757
- fix: part 6 #12432 — batch find matching work lookups by @CipherZ3r0 in #13625
- Admin edit history: keep the page after a revert and add a numbered pager by @gauranshahuja in #13731
- Sanitize branch name for olbase docker image tag by @cdrini in #13788
- Stop relying on the legacy ebooks store for checked-out status by @cdrini in #13758
- fix(i18n): make test-i18n count errors on shipped strings; clear 8 crashing msgstrs by @openlibrary-bot in #13780
- docs(i18n): point translators at openlibrary-i18n; warn on .po edits here by @openlibrary-bot in #13779
- Remove the ebooks store loan sync and statsdb loan stats by @cdrini in #13760
- Fix DDC query normalization of <3-digit DDC by @wanjinhao1 in #13759
- fix(i18n): a plural form shown beyond n=1 may carry msgid_plural's placeholders by @openlibrary-bot in #13792
- feat(i18n): pull latest translations from openlibrary-i18n in olbase by @mekarpeles in #13070
- Replace status PR REST fan-out with one GraphQL query by @Shikhar-395 in #13701
- Update team.json by @jimchamp in #13727
- fix(agentic): remove graduated staff from allowlists, add current (#13796) by @openlibrary-bot in #13797
- Update the Team Page for 2026 (role-history schema, year facet, vendored photos) by @openlibrary-bot in #13801
- fix(workflows): run new_pr_labeler when a draft PR is marked ready by @iamtanmaybaranwal in #13785
- Prototype: Add Nearby Books carousel Lit component (#13159) by @Sravan1011 in #13526
- Document the button-order convention by @MohitSAGAR11 in #13750
- Name the records in the author merge confirmation by @MohitSAGAR11 in #13751
- feat(agentic): implement the Code Review Action (#13160) by @mekarpeles in #13620
- Pre-fill fields when switching to advanced search by @Ved-sketch in #13601
New Contributors
- @wanjinhao1 made their first contribution in #13759
- @iamtanmaybaranwal made their first contribution in #13785
- @Sravan1011 made their first contribution in #13526
- @Ved-sketch made their first contribution in #13601
Full Changelog: deploy-2026-09-29-at-18-55...deploy-2026-10-06-at-17-39
deploy-2026-09-29-at-18-55
What's Changed
- Use short form for bnf identifier by @hornc in #13663
- Shelf button across the site: carousels, search results, and the book page by @lokesh in #13588
- Split Already Read into a shelf toggle and a date link by @lokesh in #13716
- Add an Inside books tab to the search modal by @lokesh in #13717
- Track signed-out clicks, quick vs menu saves, and errors in shelf actions by @lokesh in #13740
- Wait for ol-dialog before mounting the search modal, so its autofocus input can't scroll pages on load by @lokesh in #13720
- Fixed headings and associated lists being split across columns by @lbartron in #12843
- Show the shelf's own icon on the shelf button, and a shelf badge over the book page cover by @lokesh in #13657
- Adding initial Azerbaijani translation by @jamalkamaladdin in #13704
- Fix shelf actions date link truncation and flash by @lokesh in #13738
- Retarget z-index primitives to semantic tokens by @lokesh in #13629
- Don't make archive.org loan request for deprecated "ol:*" user id by @CipherZ3r0 in #13505
New Contributors
- @jamalkamaladdin made their first contribution in #13704
Full Changelog: deploy-2026-09-23-at-19-23...deploy-2026-09-29-at-18-55
deploy-2026-09-23-at-19-23
What's Changed
- Lint z-index in Lit component styles, warn on primitive tokens by @lokesh in #13628
- Build affiliate stores as one ordered list by @cdrini in #13641
- Drop ol-web1 from the deploy/restart server lists by @cdrini in #13662
- Round of design polish for web components by @lokesh in #13557
- refactor: replace the My Book Notes modal with ol-dialog by @MohitSAGAR11 in #13671
- fix(models): only save known user preference keys by @jabrailkhalil in #13598
- perf(nginx): reuse connections to haproxy by @mekarpeles in #13680
- refactor: Move the remaining jQuery UI confirmations onto ol-dialog by @lokesh in #13675
- feat(nginx): write the verify_human challenge log for the fail2ban jail by @mekarpeles in #13674
- Acquisitions in search.json: one OPDS2 field via the work-search scheme (#12844) by @openlibrary-bot in #13395
- Replace Wikipedia citation dialog with popover by @iamshravanijadhav in #13678
- refactor: replace the share modal with an ol-popover menu by @sh011 in #13677
- Add two new national library MARC sources by @hornc in #13697
- Bring the book page's controls onto the shared button system by @lokesh in #13640
- Search all three affiliate stores by title and author when there is no ISBN by @cdrini in #13661
- Prevent NPE in observations
DELETEhandler by @jimchamp in #13705 - Stop dropping author/subtitle/description from table_of_contents on read by @cdrini in #13692
- Remove
store_indexbackfill script by @jimchamp in #13700 - Exclude 0:Email, 1:FTP, 2:Telnet, 3:Dial-up as External links, and non- http strings from MARC 856 links by @hornc in #13696
- Surface Search Inside: filterable and in modal by @lokesh in #13429
- Auto-promote high-volume crawlers and API partners out of the
otherbucket by @mekarpeles in #13673 - Serve the coverstore from FastAPI by @cdrini in #13633
- Restrict the coverstore's internal routes to internal IPs by @cdrini in #13715
- fix(deploy): the
nginx -tgate was blind; test in a fresh container by @openlibrary-bot in #13702
New Contributors
- @MohitSAGAR11 made their first contribution in #13671
- @jabrailkhalil made their first contribution in #13598
- @iamshravanijadhav made their first contribution in #13678
- @sh011 made their first contribution in #13677
Full Changelog: deploy-2026-09-17-at-17-57...deploy-2026-09-23-at-19-23
deploy-2026-09-17-at-17-57
What's Changed
- Migrate JS build from webpack to Vite by @RayBB in #13331
- use rolldown options by @RayBB in #13592
- ol-shelf-actions by @lokesh in #13399
- refactor: convert footer templates to Jinja by @RsbhThakur in #13546
- Unify Vite builds behind scripts/vite/build.mjs by @RayBB in #13593
- fix(agentic): restore
id-token: write— pr_autoresponder.yml is an invalid workflow file by @lokesh in #13604 - refactor: convert ReadingGoalProgress partial to Jinja (#13567) by @Nehant14 in #13573
- feat(mockservices): support stateful lending lifecycle and availability variants by @Sadashii in #13548
- Convert CarouselCard partial to Jinja (#13570) by @Nehant14 in #13578
- Convert BookPageLists partial to Jinja by @gauranshahuja in #13576
- Unify header nav by @lokesh in #13508
- docs: Add Principles section to Design System Style Guide by @lokesh in #13599
- Convert LazyCarousel partial to Jinja by @gauranshahuja in #13590
- build(test): migrate JS unit tests from Jest to Vitest by @Nehant14 in #13596
- Migrate /api/unlink endpoint to FastAPI by @Sanket17052006 in #13589
- fix(agentic): drop Bash(gh api:*) from issue enrichment (#13160) by @mekarpeles in #13621
- Generalise DNB national bibliotek control number as identifiers for BnF and BNP by @hornc in #13622
- feat: Consolidate sidebar buy options into unified Buy button dropdown by @Sadashii in #13113
- Search result bookcover image space reservation by @lbartron in #13129
- Rename the Find in a library button to Nearby Libraries by @lokesh in #13639
- Shift 3 prod gunicorn workers from web to fast_web by @cdrini in #13638
- Migrate /status/add endpoint to FastAPI by @Sanket17052006 in #13626
- feat(fastapi): migrate remaining /status endpoints from web.py to FastAPI by @RsbhThakur in #13627
- Convert fulltext search suggestion templates to Jinja by @Srijan229 in #13616
- Show translator on the editions table by @Voyagerroc-Lab in #13649
- Make it possible to copy lists into local environment with copydocs by @cdrini in #13361
- refactor: convert body layout templates to Jinja by @RsbhThakur in #13595
- fix: part 4 #12432 — batch mybooks book lookups by @CipherZ3r0 in #13597
- fix: part 5 #12432 — batch mybooks notes lookups by @CipherZ3r0 in #13609
- refactor: pass request prefs explicitly (#13537) by @ElenaGe216 in #13608
- refactor: pass request params as args to is_spam and Recaptcha (#13538) by @csy20 in #13611
- Show prices and condition details in the Buy popover by @lokesh in #13643
- fix: Closing popover on books page causes the body scrollY to jitter temporarily to 0 by @lokesh in #13632
- Style the Buy button like the other sidebar buttons by @lokesh in #13642
- Set real browser floor (Safari 15.4); drop core-js by @lokesh in #13634
- Replace lodash with native JS by @lokesh in #13635
- Restore affiliate price lookup, disabling only the Amazon price fetch by @cdrini in #13637
New Contributors
- @lbartron made their first contribution in #13129
- @Srijan229 made their first contribution in #13616
- @Voyagerroc-Lab made their first contribution in #13649
- @ElenaGe216 made their first contribution in #13608
- @csy20 made their first contribution in #13611
Full Changelog: deploy-2026-09-09-at-18-43...deploy-2026-09-17-at-17-57
deploy-2026-09-09-at-18-43
What's Changed
- Add docker troubleshooting entry for npm ENOTEMPTY caused by macOS Docker VMM (beta) by @RayBB in #13530
- Fix template scan in worktrees without submodule metadata by @TheJhyeFactor in #13533
- Skip fetching a PR's head if its pinned commit is already available locally by @cdrini in #13532
- refactor: route site layout through Jinja (first step) (#13524) by @RsbhThakur in #13529
- fix(fastapi): set encrypted s3 auth cookie on login by @Sadashii in #13550
- refactor: pass request params as args to Author.get_books (#13539) by @LiamMagnier in #13540
- Add node exporter metrics to our prod cluster by @cdrini in #13551
- BookWorm: stop discarding acquisition/borrow links by @mekarpeles in #13561
- refactor: convert related subjects partial to Jinja by @hariomCodes in #13554
- refactor: convert SubjectPublishingHistory partial to Jinja (#13543) by @BinarySpecter in #13556
- Convert MyBooksDropperLists partial to Jinja by @gauranshahuja in #13563
- perf: batch edition lookups with get_many in openlibrary/plugins/opelibrary/api.py by @CipherZ3r0 in #13574
- chore(deps): update actions/deploy-pages action to v5 by @renovate[bot] in #13581
- chore(deps): update actions/cache action to v6 by @renovate[bot] in #13579
- Convert SearchFacets partial to Jinja by @gauranshahuja in #13577
- Add "Needs: Lead" label to PRs that have no discernible lead by @jimchamp in #13513
- perf: batch work lookups in bulk tagging by @CipherZ3r0 in #13583
- fix(agentic): run PR auto-responder on fork PRs via pull_request_target by @openlibrary-bot in #13262
- perf: batch readinglog work lookups by @CipherZ3r0 in #13584
- BookWorm feed harvest: cron runner + feed registration (#12844) by @mekarpeles in #13565
- deploy.sh: gate on
nginx -tafter olsystem deploy, add partial-deploy option by @mekarpeles in #13535 - Updates to
store_indexbackfill script by @jimchamp in #13521
New Contributors
- @TheJhyeFactor made their first contribution in #13533
- @LiamMagnier made their first contribution in #13540
- @hariomCodes made their first contribution in #13554
- @BinarySpecter made their first contribution in #13556
- @gauranshahuja made their first contribution in #13563
Full Changelog: deploy-2026-09-03-at-22-34...deploy-2026-09-09-at-18-43
deploy-2026-09-03-at-22-34
Highlights
- FastAPI now fronts testing.openlibrary.org — prod next
- Acquisitions harvester live: Gutenberg, BWB, Lenny feeds import with buy/open-access links
- Rating no longer bumps books off your shelf
- New site-wide drawer menu
6 new contributors 🎉
What's Changed
- e2e: cover logged-in state; fix rating-button contrast and login-page JS error by @lokesh in #13366
- Take author name sort out of beta by @cdrini in #13487
- Back up /opt/openlibrary to openlibrary_previous before deploy swap by @cdrini in #13486
- Restore the Preview button for preview-only books outside the book page by @lokesh in #13491
- feat: add audiences field to /type/work schema by @shoaib-inamdar in #13431
- fix: make /account/otp failures visible (real status codes + logging) by @mekarpeles in #13493
- Fix tar-index cache never hitting due to float shard key by @cdrini in #13506
- fix(css): style 'Add to List' button to match reading-log btn on orphaned editions and author pages #13421 by @Archita-kale in #13500
- Percent encode whitespace in
mailtohrefs by @jimchamp in #13197 - fix(ci): auto-assign reviewer on fork PRs via pull_request_target by @openlibrary-bot in #13210
- Update order of on-call personnel by @jimchamp in #13414
- feat: add ITAN Global Publishing catalog import script by @rattnak in #13413
- Update Spanish translation by @dcapillae in #13369
- Remove unused lending/borrow/waitinglist methods by @cdrini in #13396
- Log dev mockservices logins in as the seeded admin account by @RayBB in #13365
- Rating a book no longer moves it off Currently Reading or Stopped Reading by @lokesh in #13490
- Add script for backfilling
store_indexIDs by @jimchamp in #13483 - Only open the search modal on drop, not dragover, when dragging in text by @cdrini in #13496
- Report per-item success/failure when drag-and-drop moving works/editions by @cdrini in #13494
- fix(vue): resolve remaining component lint warnings (#13477) by @shenhui-ui in #13479
- Remove solr aggregate
textfield by @cdrini in #13401 - fix(eslint): promote 5 clean Vue lint rules to error (#13510) by @Nehant14 in #13512
- Remove stray pytest debug output by @josemmiranda04 in #13484
- Move generic_carousel() from templates to Python handlers by @Sanket17052006 in #13466
- ci: add zizmor ignore for auto_assign_reviewer trigger by @RayBB in #13509
- refactor: convert interstitial.html to Jinja2 (closes #13430) by @Priya-kumbhar in #13498
- Fix deployment name detection at startup by @kocaemre in #13515
- Feed Registry & Acquisitions — v1 (acquisitions in OL + bookworm service) (#12844) by @mekarpeles in #13241
- Make FastAPI the primary entry point on the testing deployment by @RayBB in #13516
- Fix HTML entities in search page title by @RayBB in #13446
- Show who started the last testing deploy on the /status page by @RayBB in #13472
- FastAPI: Move book lending preparation into Python by @lucaspmgomess in #13495
- ol-carousel: UX upgrades by @lokesh in #13478
- feat(core): read-only Matomo client + offline mock (groundwork for #11956) by @mekarpeles in #13252
- fix(docker): bump mockservices python base image to 3.14 by @Sadashii in #13527
- fix: validate profile website URLs by @w3lld1 in #13525
- Stop search result titles growing a scrollbar under Literata (font) by @lokesh in #13469
- Add OlDrawer component for hamburger menu by @lokesh in #12326
New Contributors
- @Archita-kale made their first contribution in #13500
- @shenhui-ui made their first contribution in #13479
- @Nehant14 made their first contribution in #13512
- @Priya-kumbhar made their first contribution in #13498
- @kocaemre made their first contribution in #13515
- @w3lld1 made their first contribution in #13525
Full Changelog: deploy-2026-08-27-at-20-40...deploy-2026-09-03-at-22-34