Releases: internetarchive/openlibrary
Releases · internetarchive/openlibrary
Release list
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
deploy-2026-05-19-at-19-10
What's Changed
- Update actions/deploy-pages action to v5 by @renovate[bot] in #12647
- Update actions/configure-pages action to v6 by @renovate[bot] in #12645
- Update actions/github-script action to v9 by @renovate[bot] in #12648
- chore(deps): update actions/setup-node action to v6 by @renovate[bot] in #12651
- chore(deps): update actions/setup-python action to v6 by @renovate[bot] in #12667
- chore(deps): update astral-sh/setup-uv action to v8 by @renovate[bot] in #12669
- chore(deps): update codecov/codecov-action action to v6 by @renovate[bot] in #12670
- chore(deps): update actions/upload-pages-artifact action to v5 by @renovate[bot] in #12668
- feat: migrate list_view_json endpoint to FastAPI by @shoaib-inamdar in #12556
- chore: delete unused
codegen_api_docs.ymlby @omkar-334 in #12673 - Add ol-select-popover component by @lokesh in #12635
- chore: update browserslist to track MediaWiki Grade A modern support by @lokesh in #12684
- Migrate lists_delete endpoint to FastAPI by @Sanket17052006 in #12538
- Use shared haproxy for solr by @cdrini in #12679
- fix(security): bump JS dev deps to resolve 8 high-severity Dependabot alerts by @mekarpeles in #12700
- Fix missing f-string in facet_wrapper assert message (#12649) by @tranmin001 in #12691
- Update JSON schema from openlibrary-client by @hornc in #12723
- Fix: alignment of action buttons in search grid view by @Armansiddiqui9 in #12696
- Fix tag_deploy regression and add SKIP_TRANSFER for deploy reruns by @mekarpeles in #12665
- fix(security): open redirect in BarcodeScanner + overly-broad regex in models.py by @mekarpeles in #12701
- chore(renovate): add stabilization delay, weekly schedule, and PR cap by @mekarpeles in #12638
- refactor: split AffiliateLinks into AffiliateLinksLoadingIndicator.html for loading indicator by @Sanket17052006 in #12687
- feat: add source toggle to OLMarkdownEditor by @lokesh in #12682
- refactor(css): replace hardcoded spacing values with semantic tokens by @Armansiddiqui9 in #12370
- Migrate list editions functionality to FastAPI by @Sadashii in #12545
- refactor(fastapi): use APIKeyCookie for OpenAPI security scheme by @shoaib-inamdar in #12717
- Fix open redirect vulnerability in login flow by @jimchamp in #12730
- refactor: move affiliate store logic from template to Python by @Sanket17052006 in #12731
- feat: migrate list_subjects_json endpoint to FastAPI by @harshgupta2125 in #12606
- Delete unused search_amazon stub (#12732) by @manrajs1 in #12734
- Don't make solr queries for list covers when unused by @cdrini in #12741
- fix: Follow button shows login link for authenticated users on book page lists by @mekarpeles in #12720
- Prevent FastAPI login handler from redirecting off site by @jimchamp in #12742
- Increase max requests for Gunicorn to 5000 by @mekarpeles in #12728
- Update Croatian translation by @milotype in #12749
- Fix: Add missing alt text to avatar images (#12707) by @shaiksahilrizwan in #12721
- Fix: Make native select visible on focus for keyboard accessibility (#12708) by @shaiksahilrizwan in #12727
- Fix seen type annotation in author redirects by @charliesheh in #12739
- Add image template: Generalise wording to apply to authors also by @hornc in #12744
- Add solr replica to ol-solr2 by @cdrini in #12706
- Fix MyBooksDropper partial 500ing while making solr query by @cdrini in #12763
- fix: restore TSV format for ratings, reading-log, and covers data dumps by @arijiiiitttt in #12526
- Read recaptcha URL from configuration file by @jimchamp in #12766
- Remove unused cache engines by @manrajs1 in #12765
New Contributors
- @omkar-334 made their first contribution in #12673
- @tranmin001 made their first contribution in #12691
- @charliesheh made their first contribution in #12739
- @arijiiiitttt made their first contribution in #12526
Full Changelog: deploy-2026-05-08-at-01-51...deploy-2026-05-19-at-19-10
deploy-2026-05-08-at-01-51
What's Changed
- Feature: Add DB events to Sentry by @scottbarnes in #9026
- Reorder pre-commit hooks for faster feedback by @mr-alarcon in #12472
- Feature - New WYSIWYG editor via tiptap by @Sadashii in #12182
- Delete openlibrary/templates/admin/memory directory by @RayBB in #12458
- delete endpoints already migrated to fastapi by @RayBB in #12470
- remove old solr editions code by @RayBB in #12469
- Remove verbose output from i18n pre-commit hook by @arjunrawal1 in #12477
- Team Page json by @mekarpeles in #8461
- Remove WMD reference from olmarkdown.py docstring by @Sanket17052006 in #12481
- make _do_search_query async for CarouselLoadMore in fastapi by @RayBB in #12482
- Remove PartialDataHandler ABC and unused sync stub methods by @manrajs1 in #12483
- fix: normalize tag names to lowercase for consistent subject page matching by @mekarpeles in #12473
- remove do_search by @RayBB in #12475
- Delete some no longer used code by @cdrini in #12486
- Avoid web.cookies() for pd and sfw checks by @ragini-pandey in #12492
- Different rate limits for logged in users by @cdrini in #12501
- make _do_subjects_query async by @Sanket17052006 in #12495
- make _do_browse_query async by @RayBB in #12484
- Replace deprecated web strip helpers by @Abhishek764 in #12507
- Refactor: Remove unused scripts/generate-api-docs.py (#12510) by @LUC4SWM in #12517
- Replaced web.urlquote with urllib.parse.quote by @Saad259 in #12516
- i18n(fr): add missing French translations for Locate button and welcome card by @AhmedxSaid in #12502
- refactored subject_search and author_search to remove template-side network requests by @Saad259 in #12532
- web.safeunicode by @acaligac in #12520
- fix: correct typo 'riased' → 'raised' in work.py comment by @AhmedxSaid in #12528
- updates eslint exemption list to active PRs only by @harshgupta2125 in #12539
- refactor: remove unused @public functions by @AhmedxSaid in #12536
- Add more API users by @cdrini in #12541
- asyncify code for trending and availability fastapi by @RayBB in #12508
- Update
/api/unlink.jsonhandler by @jimchamp in #12402 - i18n/zh Updated Chinese Translation by @yingren-wang in #12474
- Fix: Restore historical ordering of messages.pot - Fixes #12465 by @tfmorris in #12467
- refactor: remove @public from functions not called in HTML templates by @AhmedxSaid in #12537
- Replace web.re_compile with re.compile by @mr-alarcon in #12521
- feat: migrate Amazon PA-API to Creators API (side-by-side) by @mekarpeles in #12364
- Sort grep output where it is extracted by @cdrini in #12548
- Update messages.po by @prantikbanerjee2006 in #12543
- Note memcache.other calls in olspy by @cdrini in #12437
- Fix solr-updater and book page errors when invalid identifier by @cdrini in #12547
- chore(deps): consolidate JS dependency upgrades (security + maintenance) by @mekarpeles in #12559
- chore(deps): consolidate Python security dependency upgrades by @mekarpeles in #12558
- chore(deps): consolidate Python dependency upgrades by @mekarpeles in #12584
- chore(deps): consolidate JS dependency upgrades (security + maintenance) by @mekarpeles in #12585
- Update Croatian translation by @milotype in #12552
- chore(deps): update haproxy docker tag to v2.9.15 by @renovate[bot] in #12587
- chore(deps): consolidate Python dependency upgrades (round 2) by @mekarpeles in #12595
- chore(deps): consolidate JS dependency upgrades (round 2) by @mekarpeles in #12596
- Add CSS guide and expand AI docs with wiki frontend content by @lokesh in #12160
- Add SELinux relabel option to bind mount volumes in local composer co… by @aczietlow in #11944
- chore(deps): update dependency babel to v2.18.0 by @renovate[bot] in #12598
- chore(deps): consolidate Python dependency upgrades (round 3) by @mekarpeles in #12602
- chore(deps): consolidate JS dependency upgrades (round 3) by @mekarpeles in #12603
- chore(deps): update dependency mypy to v1.20.2 by @renovate[bot] in #12614
- Restrict access to '/api/versions' endpoint by @cdrini in #12616
- Update infogami submodule by @jimchamp in #12622
- Disable Matomo analytics on /verify_human page by @Copilot in #12551
- add name option when wrapping async functions by @RayBB in #12625
- Fixed missing whitespace around highlights in ol-chip by @ragini-pandey in #12493
- Refactor partials.py to remove init and use @classmethod (#12485) by @manrajs1 in #12575
- Switch history page to numbered pagination by @lokesh in #12624
- feat: add data-ol-link-track click tracking to Follow and reading log buttons by @Copilot in #12367
- chore(deps): consolidate Python dependency upgrades (round 4) by @mekarpeles in #12612
- chore(deps): consolidate JS dependency upgrades (round 4) by @mekarpeles in #12613
- Add handler to associate IA
ocaids with OL edition records by @jimchamp in #12429 - Throw error when visiting follower page while unauthenticated by @jimchamp in #12631
- ensure get_solr_works and site/request ContextVars work from scripts by @RayBB in #12259
- Fix worldcat links have spaces by @cdrini in #12653
- Fix: Add descriptive alt text to footer social icons by @LUC4SWM in #12652
- Fixed checked-out button in carousel to link to book page by @samyuktha2004 in #12152
- modsecurity by @mekarpeles in #12592
- Fix: add id and aria-labels to edit profile inputs (#12554) by @shaiksahilrizwan in #12646
- build: remove protected files from Ruff & Black configs by @shoaib-inamdar in #12662
- Update recaptcha domain by @jimchamp in #12661
- Add more UAs to list by @cdrini in #12659
- Update edition matching query in unlink handler by @jimchamp in #12641
New Contributors
- @mr-alarcon made their first contribution in #12472
- @arjunrawal1 made their first contribution in #12477
- @manrajs1 made their first contribution in #12483
- @Abhishek764 made their first contribution in #12507
- @LUC4SWM made their first contribution in https://gi...
deploy-2026-04-29-at-00-25
What's Changed
- Check server storage before olsystem deploy, too by @cdrini in #12423
- Fix affiliate server generate undefined by @cdrini in #12426
- Tweak solr weights/boosts - switch from additive boosting to multiplactive boosting by @cdrini in #12357
- update bwb api url to avoid 301 by @RayBB in #12427
- Fix multiple Connection instances in webpy breaking RunAs by @cdrini in #12407
- Add script to detect and fix HTML-escaped unicode in OL dumps (dry-run) by @Chisomnwa in #12224
- Cache avatar url by @Saad259 in #12355
- Fix history page pagination off-by-one by @lokesh in #12430
- fix: remove duplicate legend in Advanced Search form (#12381) by @rayrishu19-wq in #12387
- fix: remove unused parameter from welcome.html by @rattnak in #12411
- Fix case-insensitive language name sorting (#11962) by @numericals-org in #12395
- feat: interactive testing environment dashboard on /status (#11506) by @mekarpeles in #12241
- Expand py-spy monitoring by @cdrini in #12428
- Classify more API usage by @cdrini in #12436
- Adding ol-web3 to web head cluster by @cdrini in #12433
- Update Infogami for
transaction_detailstable by @jimchamp in #12434 - Asyncify solr calls of /api/books and /api/volumes by @cdrini in #12401
- substituting /static/images for /images in all urls -fixes 12208 by @jack-wines in #12352
- Update api user list by @cdrini in #12445
- Fix: improve French translations (spelling and grammar) by @MahdiiFakhfakh in #12444
- Added internationalization support for Philippines(PH) translation by @bdb-lab in #12233
- Update unicode fixer script by @jimchamp in #12435
- Remove Vue files from temporary ESLint formatting exemptions by @akramcodez in #12453
- build: apply ruff-format and black to more python files by @ragini-pandey in #12452
- Don't show error response on internalerror page by @cdrini in #12457
- feat: migrate price_api endpoint to FastAPI (#11999) by @shoaib-inamdar in #12439
- Fix /merges endpoint sql injection risk by @cdrini in #12460
- Add types to _get_db by @cdrini in #12462
- Prevent expensive query.json queries by @cdrini in #12466
- Add account security check endpoint by @mekarpeles in #12464
- Replace caret (visual whitespace) with whitespace in MARC LCCN subfields by @hornc in #12468
- i18n: Add missing Arabic translation for 'Preview Only' in ar/message… by @hichemferjani in #12456
New Contributors
- @Chisomnwa made their first contribution in #12224
- @rayrishu19-wq made their first contribution in #12387
- @rattnak made their first contribution in #12411
- @jack-wines made their first contribution in #12352
- @MahdiiFakhfakh made their first contribution in #12444
- @bdb-lab made their first contribution in #12233
- @ragini-pandey made their first contribution in #12452
- @hichemferjani made their first contribution in #12456
Full Changelog: deploy-2026-04-21-at-19-56...deploy-2026-04-29-at-00-25
deploy-2026-04-21-at-19-56
What's Changed
- fix: add noopener noreferrer to external links with target blank by @akramcodez in #12348
- Exclude dev DB dump from pre-commit fixes by @Shikhar-395 in #12377
- Add workflow to label PRs when changes requested by @Sanket17052006 in #12376
- Update stats gathering functions by @jimchamp in #11844
- Update actions where needed by @jimchamp in #12226
- migrate LazyCarouselPartial to async by @shoaib-inamdar in #12293
- Fix: Validate that the publisher exists before writing to the follows table. by @Saad259 in #12135
- build: enforce consistent quote style with ruff-format and black by @shoaib-inamdar in #12373
- fix: disable 'Want to Read' button until JS loads by @bhardwajparth51 in #12139
- Add solr haproxy prometheus exporter + fix ping path by @cdrini in #12371
- Set BWB request timeout by @cdrini in #12382
- Localize
titleattribute in template by @jimchamp in #12358 - Adopt ol-chip for subject tags, author page, and publisher page by @linhkhanhhoang in #12261
- refactor(css): replace raw em values with tokens in headings.css by @Armansiddiqui9 in #12374
- fix: add FastAPI route alias for
.jsoncheck-in POSTs to match legacy web.py behavior. by @akramcodez in #12394 - Add bulk search link to advanced search by @Shikhar-395 in #12396
- Update
wrap_jsonpto handle lists by @jimchamp in #12397 - move get_betterworldbooks_metadata and get_amazon_metadata out of AffiliateLinks template by @Sanket17052006 in #12393
- build: remove tests and partials.py from ruff/black formatting denylist by @shoaib-inamdar in #12405
- Bump bundlesizes to fix CI by @cdrini in #12406
- make betterworldbooks async by @RayBB in #12404
- Don't show trap links to recognized bots by @cdrini in #12413
- Add more api partners to monitoring by @cdrini in #12418
- Delete openlibrary/macros/DonateModal.html by @RayBB in #12403
New Contributors
- @linhkhanhhoang made their first contribution in #12261
Full Changelog: deploy-2026-04-14-at-21-41...deploy-2026-04-21-at-19-56