NodeBB logo

NodeBB

Node.js based forum software built for the modern web

Alternative to: discourse, vanilla forums, circle

NodeBB screenshot

About Versions (100)

v4.5.0

2025-09-03

Release 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)