NodeBB
Node.js based forum software built for the modern web
Alternative to: discourse, vanilla forums, circle
About
Versions (100)
v4.8.0
2026-01-14Release 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
postingRestrictedToModsproperty 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)