NodeBB
Node.js based forum software built for the modern web
Alternative to: discourse, vanilla forums, circle
About
Versions (100)
v4.5.0
2025-09-03Release build (minor) of NodeBB @ 2025-09-03T17:42:15.868Z
v4.5.0 (2025-09-03)
Documentation Changes
- add missing routes to openapi schema (0f44034e)
- openapi typo (560cc2eb)
- update openapi schema for relays and rules (a9a12a9f)
- openapi schema fixes for auto-categorization commits (c0248ca5)
New Features
- use sbd to more intelligently put together a sub-500 character summary based on existing sentences in post content (35641f37)
- add sbd dependency to improve title generation (and for summary generation, later) (82686322)
- send local posts out to established relays (aa26dfb3)
- relay handshake logic, handle Follow/Accept, send back Accept. (f4d1df7c)
- adding and removing relays from AP settings page in ACP (1e0fb20d)
- apply auto-categorization logic (165af50d)
- ability to add/remove auto-categorization rules for incoming federated content (bdcf28a3)
- re-jigger ‘add category’ button to allow addition of remote category to main index (75639c86)
- add Urdu localisation, thank you! (8c6992f5)
- add wordpress (82037dee)
- add wordpress (c10656ec)
- only mark notifications read that match current filter (9d39ed51)
- closes #13578, increase uniquevisitors (e1423636)
- add new brite skin from bootswatch (e851a523)
- add filter:post.getDiffs (97d4994a)
- add filter:post.getDiffs (90a65129)
- add expose-gc flag to loader (bba18e31)
- add ap pageviews analytics (559a2d23)
- add heap snapshot (f88329db)
- add option to toggle chat join/leave message (92a3859f)
- add protection mechanism to request lib so that network requests to reserved IP ranges throw an error (9d3b8c3a)
Bug Fixes
- display proper id if lock fails (19aa8a71)
- closes #13624, update post fields before schedule code (9d4a9b83)
- #13622, WordPress blog URLs not asserting properly (4ef605b1)
- closes #13625, fix utils.params so it works with relative_paths (a0e78ff8)
- remove webfinger error log (a0be4a28)
- urlencoded param in openapi spec example (5f7085f3)
- re-ordering dependencies because raisins (cbdc90a4)
- missed a tab character (788301a5)
- random hotkeys adding dependencies to my project smh (771b8dcb)
- parseAndTranslate bug (40973ca7)
- internationalize relay states (6576468e)
- minor fixes for yukimochi/Activity-Relay compatibility (28b63891)
- inbox.announce to not reject activities from relays (b1dbb19c)
- handle webfinger responses with subject missing scheme (4967492f)
- closes #13501 (bf279d71)
- closes #13620 (027d6f30)
- rare crash if queued item is no longer in db but id is in post:queue (e79dfeb7)
- jquery selector on post edit (f5ad7862)
- relative paths in openapi schema (a771b17f)
- add missing routes to write.yaml (e8401472)
- only process unique slugs (312df523)
- remove special-case logic that added a requested object to a topic if its defined context didn’t actually contain it (70d7e329)
- return null if field is falsy (09898b94)
- mark-all read notifications button (c16f9d64)
- catch exceptions in assertPayload, closes #13611 (9bdf24f0)
- add missing files (057e3b79)
- add missing file to ur language folder (ecab347b)
- regression caused by cc6fd49c4d2ddc6970ea23011dece5ba91517ec0 (06c38247)
- protocol-relative URLs being accidentally munged, #13592 (cc6fd49c)
- cache lookup error when doing loopback calls (67389639)
- image handling when image url received is not a path with an extension (b4ff7906)
- readd retry items (c6889f08)
- set noindex tag on remote profiles as well (fe160160)
- duplicate canonical link header (c8ad0867)
- add rel canonical to remote user profiles (8ce5498f)
- ap queue id to use payload.type payload.id (a8bf4ea0)
- clearTimeout if item is evicted from cache (0997fbfa)
- sometimes summary is null/undefined (65364bfa)
- don’t translate text on admin logs page (f6ed7ec2)
- change the client side reloginTimer to match setting (c43c3533)
- redis connect host/port (eac3d0a0)
- closes #13558, override/extend json opts from config.json (25c24298)
- add missing cache name (3f520c33)
- add missing ap pageview middleware (01f2effc)
- set to empty string if undefined (0ef98ec4)
- make clickable element anchor (dbed2db9)
- for attribute, remove upload trigger when click inputs (329f98d5)
- check topic and thumbs (72fec565)
- closes #13526, dont send multiple emails when user is invited (5a5ca8a5)
- pubsub on node-redis (f7f70468)
- typo (2280ea88)
- ensure check returns false if no addresses are looked up, fix bug where cached value got changed accidentally (6478532b)
- wrap cached returns for dns lookups in nextTick (010113a9)
- #13459, unread indicators for remote categories (6411c197)
- further guard against DNS rebinding attack (a8e613e1)
- undefined check, allow plugins to append to allow list (70c04f0c)
- simplify dns to use .lookup instead of .resolve4 and .resolve6, automatically allow requests to own hostname (df360216)
- return 200 for non-implemented activities instead of 501 (fcb3bfbc)
- remove null categories (28c021a0)
- patch ap .probe() so that it does not execute on requests for its own resources (a80edfa1)
- bring back auto-categorization if group and object are same-origin, handle Peertube putting channel names in
attributedTo(8f933459)
Other Changes
- fix comma dangle (d4bf5f0c)
- fix lint issue (5dfd2413)
- remove unused url (076cc9e8)
Refactors
- revert, don’t need to pass relative_path (f67265da)
- leaner utils.params for relative path (648c4543)
- remove invalid queued items (b73ee309)
- braces (f83d2536)
- add missing awaits (5ee1fd02)
- category listing logic to allow remote categories to be added, disabled, and re-arranged in main forum index (cb0b6092)
- show code/stack when dep check fails (f8733e06)
- dont del if cache disabled (bc40d79c)
- remove old arg (8305a742)
- if user.delete fails in actor prune (d5f6d158)
- use promise.all (472df3aa)
- use promise.all (6eab44a0)
- move ap retry queue from lru cache to db (#13568) (b3a4a128)
- log uid that failed (de71cc63)
- change default teaser to last-post (8ba230a2)
- copy session/headers when building req (e4a0160e)
- show both days and hours (1d7c32a5)
- add missing cache name (272008bb)
- another missing cache name (0fdde132)
- add names to caches, add max to request cache (a08551a5)
- closes #13547, process user uploads via batch (1ad97ac1)
- move post uploads to post hash (#13533) (24e7cf4a)
- parallel socket.io adapter (0b9bfc1c)
- use strings for cids (57a5de26)
Reverts
- remove heapdump (e74996fb)
Tests
- delete commented-out test (70bbed93)
- add timeout to ap.helpers.query (8f7411c3)
- more logs (8e160fe0)
- add more logs (f703a94b)
- add more logs (681ce8bf)
- debug timeout (029da6c5)
- more logs for failing test (79c6e72c)
- catch error in failing test (69a6c150)
- sharp invalid png (1ea10eff)
- latest sharp (3cdf28bd)
- add logs for test that’s timing out (15155809)
- use protocol of test runner (04815497)
- fix notification tests (f8a0a7e1)
- one more fix (95f6688c)
- fix spec (7393bdd4)
- fix openapi (1071ac0c)
- fix meta test (1776bd1d)
- test fixes for default teaser change (8eedb38a)
- add openapi spec (020e0ad1)
- try timeout again (27aab921)
- disable timeout (930ff21f)
- psql fix (85e2d7d3)
- one more test fix (22d1972f)
- fix test, add joinLeaveMessages to newRoom (7acd63c2)
- increase timeout (fa31ba05)
- on more (1a85fafb)
- testing timeout on failing test (82c8034c)
- remove ci env (39d243b0)
- add a null field test (1fc91d5e)