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.8.0

2026-01-14

Release build (minor) of NodeBB @ 2026-01-14T17:54:33.964Z

v4.8.0 (2026-01-14)

Documentation Changes
  • update openapi schema for missing routes related to crossposting (d81b644d)
New Features
  • user crossposts federate as:Announce (273bc68c)
  • add missing files, minor changes to crossposts list modal (38fd1798)
  • introduce new front-end UI button for cross-posting, hide move on topics in remote cids (0041cfe2)
  • disallow moving topics to and from remote categories, + basic tests for topic moving (ea1e4c7d)
  • API v3 calls to crosspost and uncrosspost a topic to and from a category (74172ecc)
  • refactor out.announce.topic to allow user announces, refactor tests to accommodate (874ffd7b)
  • stop extraneous vote and tids_read data from being saved for remote users (097d0802)
  • support remote Dislike activity, federate out a Dislike on downvote, bwahahah (528cd258)
  • expand postingRestrictedToMods mask testing, handle actor update for that prop (6a561050)
  • setAddBulk (#13805) (7d5402fe)
  • save privilege masking set when asserting group (f0a7a442)
  • patch low-level privilege query calls to accept privilege masks at the cid level (4020e1be)
  • federate out topic removal activities when topic is deleted and purged from a local category (3ab61615)
Bug Fixes
  • i18n fallbacks (a73ab8ee)
  • #13889, custom emoji from Piefed (0c75934a)
  • #13888, decode html entities for AP category name and description (6eea4df5)
  • derp (bcc204fa)
  • bump themes (a4c470ff)
  • guard against negative uids crossposting (2f96eed4)
  • bump themes (943b53b0)
  • calling sortedSetRemove to remove multiple values, instead of baking it into sortedSetRemoveBulk (82507c0f)
  • unused values (b9b33f9f)
  • typo, client-side handling of crossposts as pertains to uncategorized topics (7465762d)
  • client-side handling of category selector when cross-posting so only local cids are sent to backend (ea417b06)
  • update category sync logic to utilise crossposts instead (e5ee52e5)
  • remove old remote user to remote category migration logic + tests (28249efb)
  • update auto-categorization rules to also handle already-categorized topics via crosspost (148663c5)
  • topic crosspost delete and purge handling (f6cc556d)
  • bug where privileges users could not uncrosspost others’ crossposts. Tests (0a0a7da9)
  • allow non-mods to crosspost, move crosspost button out of topic tools, in-modal state updates (6daaad81)
  • removed ajaxify refresh on crosspost commit, dynamically update post stats in template, logic fix (b981082d)
  • nodeinfo route to publish federation.enabled in metadata section (14aa2bee)
  • bump link-preview again (74e47820)
  • bump link-preview (486e77c7)
  • remove commented out require (ffc3d279)
  • bump link-preview (cc1649e0)
  • auto-enable post queue as default, adjust tests to compensate (9390ccb6)
  • remove bidiControls from notification.bodyShort (b0679cad)
  • author of boosted content was not targeted in the activity (b05199d8)
  • closes #13872, use translator.compile for notification text (5a031d01)
  • #13715, dont reduce hardcap if usersPerPage is < 50 (cb31e70e)
  • dont use sass-embedded on freebsd, #13867 (b7de0cc7)
  • wrong increment value (20918b52)
  • increment progress on upgrade script (8abe0dfa)
  • add join-lemmy context for outgoing category group actors context prop (f1d50c35)
  • use setsAdd (d8e55d58)
  • missing await (4a6dcf1a)
  • admin privilege overrides only apply to local categories (7b194c69)
  • have notes.assert call out.announce.topic only if uid is set (so, if note assertion is called via search; manual pull) (3b7bcba6)
  • deep clone activity prop before execution; feps.announce (977a67f4)
  • minor comment fix (411baa21)
  • publish postingRestrictedToMods property in group actor (c365c1dc)
Other Changes
  • fix… tests (d20906b5)
  • still broken… more debug logs (a82e1f44)
  • log mock results (8236b594)
Refactors
  • check if tid is truthy (0e1ccfc9)
  • crossposts.get to return limited category data (name, icon, etc.), fixed up crosspost modal to hide uncategorized and all categories options (349b0875)
  • move crosspost methods into their own file in src/topics (1be88ca0)
  • silence if-function deprecation on prod (403230cc)
  • clear quick reply as soon as submitting (a331f8da)
Tests
  • intify uid/cid if they are numbers (when getting crossposts) (47e37ed5)
  • stop using partialDeepStrictEqual for now (0677689a)
  • ensure auto-cat and cat sync logic properly integrates with crossposts (add163a4)
  • crossposting behaviour and logic tests (947676ef)
  • new test file for crossposts (3560b6a3)
  • additional logic to allow multi-typing in schema type (4f1fa2d1)
  • lowercase tags (81cac015)
  • fix test to check for Secure in cookie string if test runner domain is https (5954015e)
  • more out.announce tests (cfdbbb04)
  • basic tests for activitypub.out (67912dc9)
  • update activitypub._sent to save targets as well, updated tests to accommodate format change (41368ef8)
  • test runs should not actually federate activities out (483ab083)
  • check if tests pass without await (5414cf47)
  • add back logs for failing test (301b5386)
  • add a test for set db.exists (#13809) (69562704)
  • fix failing test by adjusting the tests (c5292442)
  • privilege masking tests (934e6be9)
  • log label (22d3c523)
  • log activities (e39c9149)
  • on test fail show activities (841bd825)
  • new mongodb deps (#13793) (287b2569)