Repository navigation
Releases: internetarchive/openlibrary
Release list
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
deploy-2026-08-27-at-20-40
What's Changed
- Delete 9 macros verified unused (no references in code, database, or production) by @RayBB in #13356
- ol-button: move to shadow DOM by @lokesh in #13350
- Delete 21 templates verified unused (no references in code, database, or production) by @RayBB in #13358
- Add FastAPI testing-environment status API (maintainer-gated) by @RayBB in #13278
- Add watch:components script to watch all Vue components in dev by @RayBB in #13368
- Fix docker compose up erroring from volume-population race conditions by @cdrini in #13362
- Seed dev environment with full /languages/* records from prod by @cdrini in #13354
- Add static-analysis test for unused templates and macros by @RayBB in #13360
- Make author works.json endpoint async end-to-end by @RayBB in #13373
- Unify the site's colors on one warm palette and remove the old color names by @lokesh in #13338
- Enhance FastAPI app metadata for better OpenAPI documentation by @RayBB in #13374
- Rebuild the /status Testing Environment panel as a live UI by @lokesh in #13311
- Remove deprecated web.py endpoints migrated to FastAPI by @Sanket17052006 in #13371
- fix: add FastAPI route alias for .json note POSTs to match legacy web… by @Sanket17052006 in #13382
- chore: remove remaining deprecated web.py endpoints migrated to FastAPI by @Sanket17052006 in #13383
- Remove script used to purge S3 keys by @jimchamp in #13372
- Fix search facets fallback when partial loading fails by @seanxuu in #13380
- Add unified icon system by @lokesh in #12955
- Continue Reading Phase 1: Merge 'Active Loans' with 'Loan History' on 'My Books' page by @Sadashii in #13281
- Add a parallel FastAPI /borrow endpoint alongside the legacy web.py one by @cdrini in #13389
- Fix on-call notification workflow by @jimchamp in #13375
- Fix: Move safe imports to top-level for PLC0415 compliance by @RayBB in #13393
- Cache httpx AsyncClient per event loop to avoid cross-loop reuse crashes by @cdrini in #13410
- Auto-regenerate solr_types.py via pre-commit instead of failing a unit test by @cdrini in #13417
- Use uvicorn --factory for fast_web — save ~100MB of RAM by @RayBB in #13404
- Fix pytest issues when running locally inside docker container of worktree by @cdrini in #13418
- refactor: fully remove swagger/openapi page by @Sanket17052006 in #13402
- Status panel: undelete PRs and auto-remove closed ones by @RayBB in #13376
- Remove unused template globals from helpers.py all (#13422) by @shariqueahmad108-ship-it in #13426
- Remove unused @public template-global registration (url_quote, get_borrow_status) (#13422) by @shariqueahmad108-ship-it in #13427
- pre-commit: Add zizmor security linter for GitHub Actions by @cclauss in #13411
- Remove unused i18n template globals by @lucaspmgomess in #13434
- Document the GitHub wiki's local clone in the AI coding guide by @RayBB in #13432
- Delete 68 legacy image files no longer referenced anywhere by @lokesh in #13329
- Update dependency concurrently to v10 by @renovate[bot] in #13441
- Reading-focused design for curated collections pages by @lokesh in #13259
- Remove unused template-global registrations in setup_template_globals by @SAY-5 in #13444
- Remove unused template globals by @lucaspmgomess in #13443
- Report graphite stats for every fail2ban jail, not just nginx-429 by @cdrini in #13440
- Wire facet droppers to context-aware counts (frontend for #12978) by @Armansiddiqui9 in #13064
- Renovate: automate GitHub Actions SHA pin updates by @RayBB in #13439
- Add FastAPI fallback proxy to web.py for local development and testing by @RayBB in #13423
- Fix: Replace deprecated asyncio.iscoroutinefunction with inspect by @asarakhatun17-lgtm in #13457
- fix(eslint): ignore the gitignored docs/wiki clone by @vaibhav8a in #13458
- fix(tests): stop stylelint CLI output leaking into jest runs by @vaibhav8a in #13459
- Run make lint through uvx and correct the AGENTS.md pre-commit note by @fahadhewad in #13461
- fix(components): replace deprecated >>> combinators with :deep() by @vaibhav8a in #13463
- fix(components): increase Vite chunk warning limit for Lit build by @CipherZ3r0 in #13470
- Update docs for FastAPI fallback proxy port swap (#13423) by @RayBB in #13471
- Hoist list availability lookups into Python handler by @lucaspmgomess in #13465
- Fix list grid view alignment by @CipherZ3r0 in #13385
- Move author search out of template rendering to author.GET (python handler) by @CipherZ3r0 in #13467
- Move blocking I/O from templates into Python handlers by @RayBB in #13387
- Move featured subjects fetching from templates to Python handlers by @CipherZ3r0 in #13468
- Fix Vue prop lint warnings by @josemmiranda04 in #13473
- Fix: Render Search Inside above Read button for open-access books (#13308) by @Sadashii in #13314
New Contributors
- @seanxuu made their first contribution in #13380
- @shariqueahmad108-ship-it made their first contribution in #13426
- @lucaspmgomess made their first contribution in #13434
- @SAY-5 made their first contribution in #13444
- @asarakhatun17-lgtm made their first contribution in #13457
- @vaibhav8a made their first contribution in #13458
- @fahadhewad made their first contribution in #13461
- @CipherZ3r0 made their first contribution in #13470
- @josemmiranda04 made their first contribution in #13473
Full Changelog: deploy-2026-08-18-at-16-12...deploy-2026-08-27-at-20-40
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