Download Latest Version v4.10.1 source code.tar.gz (5.3 MB)
Email in envelope

Get an email when there's a new version of NodeBB

Home / v4.10.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-03-19 6.4 kB
v4.10.0 source code.tar.gz 2026-03-19 5.3 MB
v4.10.0 source code.zip 2026-03-19 7.6 MB
Totals: 3 Items   12.9 MB 0

Release build (minor) of NodeBB @ 2026-03-19T16:20:32.075Z

v4.10.0 (2026-03-19)

New Features
  • add /world as a potential home page route (58d3aa77)
  • add category selector to /world quick composer (2f5021e5)
  • ability to show only local posts in /world (44e65b8d)
  • [#14094], notification drawer UX improvements (6c01a5d8)
  • allow 3 profile pics (#14092) (533ae69c)
  • screenshot upload in ACP, send fallback brand icons in manifest, serve assets for richer PWA install UI (75a6dfff)
  • category group actor outbox, [#14083] (b317cdd3)
  • new ap mocks, now publishing user outboxes (f848393e)
  • show cronjobs in acp (#14068) (3c0a6540)
  • redirect cold requests to remote resources to their canonical source, [#14043] (2b12f8b5)
  • include alt text in image/attachment property federating out (ca5aee10)
Bug Fixes
  • improve idempotency of ap test (8ca34e74)
  • call syncfollowcounts on unfollow as well (ebe709da)
  • sync follow counts on local and remote follows, [#14105] (44e78e47)
  • cold load redirect should only affect guests (cc606677)
  • schema fix for new api config value (7e2c7db3)
  • close notif drawer on item click, fix crash in module (7c65471b)
  • schema fix for new api config value (efaf8eb9)
  • issue where initial quickcreate post wouldn't go to the right cid (35c03e5c)
  • only show category selector on quickreply on /world (27b0fbe6)
  • delete cid:<cid>:privilegeMask on category.purge (902533db)
  • bump themes (3aa8d5ba)
  • removing topic tools/checkbox from /world for guests, reword guest CTA in /world (53286625)
  • add back 'after' query param handling in /world that was removed accidentally (67a93da5)
  • restrict contextmenu preventDefault to the checkbox only (2eb0964d)
  • long-press support for topicSelect, [#14045] (d1e1a008)
  • debug log (58da9036)
  • restore guest access to /world, default to latest(all) (1aa5ca88)
  • bump harmony (10859455)
  • restored popular calculation behaviour that was broken by e2131d1d2e1c6f14cb8867ac7e22840da3f4c63f, removed followingOnly arg passing for popular (1af83564)
  • imagesLoaded integration for handleBack in world.js (38a1da46)
  • merged chat notifications if all the messages are from the same user (26bb60ef)
  • type (59dd22ca)
  • type (40fecd01)
  • merged chat notifications if all the messages are from the same user (6147a4d0)
  • screenshot fallback (09c54127)
  • buildRecipients to handle if local uids are passed in followers (a8f081c0)
  • update Like/Dislike to have addressees in activity (c8e349ca)
  • accidental hardcoded cid (464bc275)
  • skip AP cache on context processing methods (a3ee7447)
  • skip AP cache on context processing methods (10e4d579)
  • cache key (9eea12ec)
  • cache key (74fa77dd)
  • missing orderedItems on category outbox index retrieval (8496e1ef)
  • [#14084], fix tags not getting properly removed from topics (0a94cecb)
  • group badge on group details page (52e8ede8)
  • return digest header only if it is set to something (aka not null) (1ad9ce5f)
  • missing page parseInt (9978af59)
  • dont add self username when clicking reply (9fcaad38)
  • notifs (ed3a3672)
  • also use tx.compile in chat notif merge (6d22e33a)
  • publish id with user outbox, fixes [#13478] (c08a45a5)
  • merge with txArgs (e1d0e2a0)
  • merged notification translations (34b68109)
  • derped handleBack in world.js (ac483152)
  • syntax error on undefined value (6b3b3e7e)
  • filter out image attachments from remote data if they are already embedded in content (40b8544f)
  • update thumbs loading logic to always include post attachments as part of thumbs (prior: was controlled by thumbsOnly flag orshowPostUploadsAsThumbnail setting) (c2d190e1)
  • [#14072], world to call thumbs with thumbsOnly filter (f1976168)
  • promises in groups.leave (f826e629)
  • [#14071], duplicate items loaded via IS on /world (d29f1fbd)
  • [#14043], cold-load redirect should only affect guests (5a7316b1)
  • hacking handleBack module to work with world page (971c8603)
  • bump web-push (27e12a28)
  • patch translateKey to wrap arguments in first string isolate (FSI) and Pop Directional Isolate (PDI) characters (59f19ba4)
  • add missing db call (4d1d1c86)
  • [#14061], world.js show more buttons on infinite scroll (0aead782)
  • update clamp-fade to use mask-image, add background to btn-link on Brite skin (9bc1b400)
  • [#14046], sneak in a mention to the community in mocked replies (b8ef027c)
  • world page 'see more' bugs (cc733631)
  • [#13239], unescape custom user field values (9e69b9ad)
  • restore preview as it is now supported by BridyFed (8a371d23)
  • missing done (9604a0cd)
  • bump harmony, [#14042] (b02cdaa9)
  • [#14042], adopt plugin-feed's show-more/less logic/scss (43f2951a)
  • update minimum title length default to zero to allow title-less topics via composer (6bfe3cd0)
  • parent cid (f567d970)
  • skip parsing of duplicate emoji tags (363cad29)
Other Changes
  • remove unused (19bb37ca)
  • jobs.json (e1b6e617)
  • remove unused (d6d3116e)
  • remove unused (b50a10df)
Performance Improvements
  • switch to set, remove parseFloat in redis (09de6fb9)
  • move out nconf.get and isClientScript regex (4d55ee0a)
  • move out nconf.get and isClientScript regex (f2bca332)
  • make a single round trip for set(s)Remove (bcbb7bc4)
  • cache groups:createtime (380d9895)
Refactors
  • /world sorting logic to always use topics/sorted logic (e2131d1d)
  • move to data (36bf3f16)
  • get rid of cleanupUids use missing set (6569ea51)
  • remove async.series, use batch.processSortedSet (894248e6)
  • get rid of helper function (1cc77343)
  • switch to cursor (1c7daf0d)
  • use set (d9344140)
  • pass in cid to rename/remove (fe4a22fb)
  • remove admin.themes.getInstalled (92d72f67)
Tests
  • add missing selectedCategory to world.yaml (779a372f)
  • exclude uploadScreenshot from routeMap parsing test (ff1e1b92)
  • make tests happy (08bed89b)
  • fix test maybe (25f6088f)
  • add one more topic to tag test (e01cb104)
  • cleaner user.delete test (215d6440)
  • set minimumtitlelength for test (7429b5d4)
  • added test to ensure that Likes do not get processed when privilege is rescinded (8cba65cd)
  • break apart inbox handling tests to its own file in test/activitypub (06e0bd6a)
  • add debug test to see if failing test is due to race condition (e3119c76)
  • fix spec (6dd9f734)
Source: README.md, updated 2026-03-19