v4.8.0
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 (d81b644)
New Features
- user crossposts federate as:Announce (273bc68)
- add missing files, minor changes to crossposts list modal (38fd179)
- introduce new front-end UI button for cross-posting, hide move on topics in remote cids (0041cfe)
- disallow moving topics to and from remote categories, + basic tests for topic moving (ea1e4c7)
- API v3 calls to crosspost and uncrosspost a topic to and from a category (74172ec)
- refactor out.announce.topic to allow user announces, refactor tests to accommodate (874ffd7)
- stop extraneous vote and tids_read data from being saved for remote users (097d080)
- support remote Dislike activity, federate out a Dislike on downvote, bwahahah (528cd25)
- expand postingRestrictedToMods mask testing, handle actor update for that prop (6a56105)
- setAddBulk (#13805) (7d5402f)
- save privilege masking set when asserting group (f0a7a44)
- patch low-level privilege query calls to accept privilege masks at the cid level (4020e1b)
- federate out topic removal activities when topic is deleted and purged from a local category (3ab6161)
Bug Fixes
- i18n fallbacks (a73ab8e)
- #13889, custom emoji from Piefed (0c75934)
- #13888, decode html entities for AP category name and description (6eea4df)
- derp (bcc204f)
- bump themes (a4c470f)
- guard against negative uids crossposting (2f96eed)
- bump themes (943b53b)
- calling sortedSetRemove to remove multiple values, instead of baking it into sortedSetRemoveBulk (82507c0)
- unused values (b9b33f9)
- typo, client-side handling of crossposts as pertains to uncategorized topics (7465762)
- client-side handling of category selector when cross-posting so only local cids are sent to backend (ea417b0)
- update category sync logic to utilise crossposts instead (e5ee52e)
- remove old remote user to remote category migration logic + tests (28249ef)
- update auto-categorization rules to also handle already-categorized topics via crosspost (148663c)
- topic crosspost delete and purge handling (f6cc556)
- bug where privileges users could not uncrosspost others' crossposts. Tests (0a0a7da)
- allow non-mods to crosspost, move crosspost button out of topic tools, in-modal state updates (6daaad8)
- removed ajaxify refresh on crosspost commit, dynamically update post stats in template, logic fix (b981082)
- nodeinfo route to publish federation.enabled in metadata section (14aa2be)
- bump link-preview again (74e4782)
- bump link-preview (486e77c)
- remove commented out require (ffc3d27)
- bump link-preview (cc1649e)
- auto-enable post queue as default, adjust tests to compensate (9390ccb)
- remove bidiControls from notification.bodyShort (b0679ca)
- author of boosted content was not targeted in the activity (b05199d)
- closes #13872, use translator.compile for notification text (5a031d0)
- #13715, dont reduce hardcap if usersPerPage is < 50 (cb31e70)
- dont use sass-embedded on freebsd, #13867 (b7de0cc)
- wrong increment value (20918b5)
- increment progress on upgrade script (8abe0df)
- add join-lemmy context for outgoing category group actors context prop (f1d50c3)
- use setsAdd (d8e55d5)
- missing await (4a6dcf1)
- admin privilege overrides only apply to local categories (7b194c6)
- have notes.assert call out.announce.topic only if uid is set (so, if note assertion is called via search; manual pull) (3b7bcba)
- deep clone activity prop before execution; feps.announce (977a67f)
- minor comment fix (411baa2)
- publish
postingRestrictedToModsproperty in group actor (c365c1d)
Other Changes
Refactors
- check if tid is truthy (0e1ccfc)
- crossposts.get to return limited category data (name, icon, etc.), fixed up crosspost modal to hide uncategorized and all categories options (349b087)
- move crosspost methods into their own file in src/topics (1be88ca)
- silence if-function deprecation on prod (403230c)
- clear quick reply as soon as submitting (a331f8d)
Tests
- intify uid/cid if they are numbers (when getting crossposts) (47e37ed)
- stop using partialDeepStrictEqual for now (0677689)
- ensure auto-cat and cat sync logic properly integrates with crossposts (add163a)
- crossposting behaviour and logic tests (947676e)
- new test file for crossposts (3560b6a)
- additional logic to allow multi-typing in schema type (4f1fa2d)
- lowercase tags (81cac01)
- fix test to check for Secure in cookie string if test runner domain is https (5954015)
- more out.announce tests (cfdbbb0)
- basic tests for activitypub.out (67912dc)
- update activitypub._sent to save targets as well, updated tests to accommodate format change (41368ef)
- test runs should not actually federate activities out (483ab08)
- check if tests pass without await (5414cf4)
- add back logs for failing test (301b538)
- add a test for set db.exists (#13809) (6956270)
- fix failing test by adjusting the tests (c529244)
- privilege masking tests (934e6be)
- log label (22d3c52)
- log activities (e39c914)
- on test fail show activities (841bd82)
- new mongodb deps (#13793) (287b256)