Download Latest Version v4.15.2 source code.zip (8.2 MB)
Email in envelope

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

Home / v4.15.2
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-09-02 4.5 kB
v4.15.2 source code.tar.gz 2026-09-02 5.7 MB
v4.15.2 source code.zip 2026-09-02 8.2 MB
Totals: 3 Items   13.9 MB 0

Release build (patch) of NodeBB @ 2026-09-02T21:20:37.096Z

v4.15.2 (2026-09-02)

New Features
  • shift-click range selection when selecting posts (#14727) (f7668bd6)
  • add filter:privileges.posts.delete, fired ahead of the lock gate (#14722) (8d9d0645)
  • expose topic lock state to filter:privileges.posts.edit (#14710) (61126cc9)
  • link pinned message timestamp to its place in the conversation (#14699) (8cb1be35)
  • link chat reply quote timestamp to the quoted message (#14697) (90fc85da)
  • show full category path on hover in category dropdowns (#14686) (0ea5c3dc)
  • add missing object cache to psql similar to mongodb/redis (#14684) (4b93ab96)
  • allow disabling all notification emails, closes [#5644] (46ac1ee6)
  • crossposts: reconcile stale sort scores on topic read (#14681) (aa52e783)
Bug Fixes
  • uid can be a groupname in groups.join/leave (857680ce)
  • clean up active and orphaned tooltips on ajaxify transitions and chat modal actions (#14745) (3052ab03)
  • closes [#14743], handle uid groupnames in isMember methods (9999d1eb)
  • keep a readable name on converted pasted images (#14735) (c443898c)
  • closes [#14729], handle purged topic/ deleted account (ec5503a4)
  • add missing uid to getRaw, compare Strings (0cfa8308)
  • closes [#14717], add uid:<uid>:blocker_uids (85da0d17)
  • hide deleted main post content on (2db21463)
  • scope chat modal delete-room handler to room controls (#14714) (a2899e2d)
  • do not expose raw content of deleted chat messages (#14709) (c5351fc7)
  • revert skin regression (8b6ecbeb)
  • use normalizeReturnToPath for redirect validation (d99545fa)
  • restrict x-return-to to internal paths (67555b4b)
  • closes [#14702], helpers.redirect expects path to start with / (b4ebd4b0)
  • validate theme id on admin.themes.set (24c9d560)
  • retarget animated navigator scrolls after layout shifts (#14674) (5a76dfd9)
  • anchor the assets/uploads strip in routeTouchIcon (#14694) (72f711e8)
  • check upload folder containment in admin uploadFile (#14693) (12230a39)
  • throw on invalid db during webinstall (7f5f0903)
  • quick reply user status tooltip (63a542ce)
  • [#14691], fix selector up themes (8979c218)
  • user profile age off by a few days due to fixed-length year math (#14687) (7d573372)
  • scroll chats list to the active room (#14683) (50b616d9)
  • hide imagedrop overlay when drag ends outside of it (#14682) (616c6aef)
  • don't display crosspost button if user doesn't have privilege (0cd65312)
  • apply saved search preferences immediately (#14665) (95e4f9fc)
  • bring chat modal to front on interaction so overlapping chat modals stack correctly (#14663) (f7f7bf2e)
  • only offer categories the user can crosspost to (e9cfa61f)
  • sync client category watch states with core so unread badge updates for watching users (#14648) (77518451)
  • topic filter dropdown opening in wrong direction on RTL (#14504) (35756dfa)
  • update stale template path for search filters partial (#14643) (118c6c6c)
  • return error instead of redirect for banned uid on token-authenticated requests, closes [#12739] (#14639) (2c8379b7)
  • activitypub:
  • trim whitespace from signature parameter names in middleware reparses (038cc5a6)
  • filter soft-deleted and scheduled topics from outbox (c03de9e9)
  • crossposts:
  • pin and unpin the crossposted categories too (#14680) (4f293ab4)
  • pinned topics throw, tags unindexed, no bump on reply (#14658) (7403b018)
Performance Improvements
  • only hydrate chat rooms that match the search query (#14734) (9f0b3451)
  • select uploads on the routes that render posts (#14654) (a2d19d34)
  • use .some for better perf, no need to filter entire array (22962f49)
Refactors
  • only send to login if user has password (73035d5f)
  • go to login when login timer expires (1eb8ace5)
  • validate extensions first before processing upload (75e8771f)
  • change schduled restore to happen first (f28200d5)
  • if there are unread notifications open unread tab (bd21871c)
  • follow up, clear cache on privilege change for crossposts (321df046)
  • remove ttl on set, cache has it on init (86c9102e)
Tests
  • fix getRaw test, voterUid is the owner so need to use another uid (aed03040)
  • move federate posts to after unpin (da30471e)
  • cover root and subfolder return paths (4a1c33d2)
  • await unpin (a9e2f69a)
  • on fail log data (1ef1cf17)
  • unpin after everything else (c2016090)
Source: README.md, updated 2026-09-02