1.19.0 Breaking Changes

NodeBB Development
  • Themes should no longer rely on showHidden property in all user account pages (profile/edit/etc.)

    It has been replaced with canEdit (which has been around for quite awhile), whose logic is identical. showHidden will be removed in this version of NodeBB.


  • julianJ julian pinned this topic on
  • Removals

    socket.emit('admin.categories.create') removed, use POST /api/v3/categories
    socket.emit('admin.categories.purge') removed, use DELETE /api/v3/categories/:cid
    socket.emit('admin.categories.update') removed, use PUT /api/v3/categories/:cid
    socket.emit('admin.categories.setPrivilege') removed, use PUT /api/v3/categories/:cid/privileges/:privilege
    socket.emit('admin.categories.getAll') removed, use GET /api/admin/manage/categories
    socket.emit('admin.categories.getPrivilegeSettings') removed use GET /api/v3/categories/:cid/privileges
    socket.emit('admin.categories.setPrivilege') removed use PUT /api/v3/categories/:cid/privileges/:privilege

    socket.emit('admin.groups.create') removed use POST /api/v3/groups
    socket.emit('admin.groups.join') removed use PUT /api/v3/groups/:slug/membership/:uid
    socket.emit('admin.groups.leave') removed use DELETE /api/v3/groups/:slug/membership/:uid
    socket.emit('admin.groups.update') removed use PUT /api/v3/groups/:slug

    socket.emit('admin.user.deleteUsers') removed use DELETE /api/v3/users/:uid/account
    socket.emit('admin.user.deleteUsersContent') removed use DELETE /api/v3/users/:uid/content
    socket.emit('admin.user.deleteUsersAndContent') removed use DELETE /api/v3/users or DELETE /api/v3/users/:uid

    socket.emit('admin.uploads.delete') removed use DELETE /api/v3/files

    socket.emit('posts.reply') removed use POST /api/v3/topics/:tid
    socket.emit('posts.getPost') removed user GET /api/v3/posts/:pid
    socket.emit('posts.delete') removed use DELETE /api/v3/posts/:pid/state
    socket.emit('posts.restore') removed use PUT /api/v3/posts/:pid/state
    socket.emit('posts.purge') removed use DELETE /api/v3/posts/:pid
    socket.emit('posts.getDiffs') removed use GET /api/v3/posts/:pid/diffs
    socket.emit('posts.showPostAt') removed use GET /api/v3/posts/:pid/diffs/:since
    socket.emit('posts.restoreDiff') removed use PUT /api/v3/posts/:pid/diffs/:since
    socket.emit('posts.edit') removed use PUT /api/v3/posts/:pid
    socket.emit('posts.bookmark') removed use PUT /api/v3/posts/:pid/bookmark
    socket.emit('posts.unbookmark') removed use DELETE /api/v3/posts/:pid/bookmark
    socket.emit('posts.movePost') removed use PUT /api/v3/posts/:pid/move
    socket.emit('posts.movePosts') removed use PUT /api/v3/posts/:pid/move
    socket.emit('posts.upvote') removed use PUT /api/v3/posts/:pid/vote
    socket.emit('posts.downvote') removed use PUT /api/v3/posts/:pid/vote
    socket.emit('posts.unvote') removed use DELETE /api/v3/posts/:pid/vote

    socket.emit('topics.post') removed use POST /api/v3/topics
    socket.emit('topics.search') removed use GET /api/search
    socket.emit('topics.getTopic') removed use GET /api/v3/topics/:tid
    socket.emit('topics.delete') removed use DELETE /api/v3/topics/state
    socket.emit('topics.restore') removed use PUT /api/v3/topics/state
    socket.emit('topics.purge') removed use DELETE /api/v3/topics
    socket.emit('topics.lock') removed use PUT /api/v3/topics/lock
    socket.emit('topics.unlock') removed use DELETE /api/v3/topics/lock
    socket.emit('topics.pin') removed use PUT /api/v3/topics/pin
    socket.emit('topics.unpin') removed use DELETE /api/v3/topics/pin
    socket.emit('topics.follow') removed use PUT /api/v3/topics/:tid/follow
    socket.emit('topics.changeWatching') removed use PUT/DELETE /api/v3/topics/:tid/(follow|ignore)

    socket.emit('groups.join') removed use PUT /api/v3/groups/:slug/membership/:uid
    socket.emit('groups.leave') removed use DELETE /api/v3/groups/:slug/membership/:uid
    socket.emit('groups.grant') removed use PUT /api/v3/groups/:slug/ownership/:uid
    socket.emit('groups.rescind') removed use DELETE /api/v3/groups/:slug/ownership/:uid
    socket.emit('groups.update') removed use PUT /api/v3/groups/:slug
    socket.emit('groups.create') removed use POST /api/v3/groups
    socket.emit('groups.delete') removed use DELETE /api/v3/groups

    socket.emit('flags.create') removed use POST /api/v3/flags
    socket.emit('flags.update') removed use PUT /api/v3/flags/:flagId
    socket.emit('flags.appendNote') removed use POST /api/v3/flags/:flagId/notes
    socket.emit('flags.deleteNote') removed use DELETE /api/v3/flags/:flagId/notes/:datetime

    socket.emit('user.exists') removed use HEAD /api/v3/users/bySlug/:userslug AND HEAD /api/v3/groups/:slug
    socket.emit('user.deleteAccount') removed use DELETE /api/v3/users/:uid/account
    socket.emit('user.follow') removed use POST /api/v3/users/follow
    socket.emit('user.unfollow') removed use DELETE /api/v3/users/unfollow
    socket.emit('user.saveSettings') removed use PUT /api/v3/users/:uid/settings
    socket.emit('user.search') removed use GET /api/users
    socket.emit('user.changePicture') removed use PUT /api/v3/users/:uid/picture
    socket.emit('user.changeUsernameEmail') removed use PUT /api/v3/users/:uid
    socket.emit('user.updateProfile') removed use PUT /api/v3/users/:uid
    socket.emit('user.changePassword') removed use PUT /api/v3/users/:uid/password
    socket.emit('user.setTopicSort') removed use PUT /api/v3/users/:uid/settings
    socket.emit('user.setCategorySort') removed use PUT /api/v3/users/:uid/settings
    socket.emit('user.banUsers') removed use PUT /api/v3/users/:uid/ban
    socket.emit('user.unbanUsers') removed use DELETE /api/v3/users/:uid/ban

    socket.emit('categories.getCategory') removed use GET /api/v3/categories/:cid

    socketHelpers.setDefaultPostData removed use apiHelpers.setDefaultPostData

    socketTopics.loadMoreSortedTopics removed use infinitescroll.loadXHR
    socketTopics.loadMoreFromSet removed use infinitescroll.loadXHR


    app.alert is deprecated use alerts.alert from alerts module
    app.alertError is deprecated use alerts.error from alerts module
    app.alertSuccess is deprecated use alerts.success from alerts module
    app.removeAlert is deprecated use alerts.remove from alerts module
    app.logout is deprecated use logout module directly. ie require(['logout'], function (logout) { logout() });
    app.openChat is deprecated use chat.openChat from chat module.
    app.newChat is deprecated use chat.newChat from chat module.
    app.enableTopicSearch is deprecated use search.enableQuickSearch from search module.
    app.handleSearch is deprecated use search.init from search module.
    app.prepareSearch is deprecated use search.showAndFocusInput from search module.

  • Some custom themes may introduce additional navigation bars at the top of the page, above the NodeBB header menu.

    Persona included code that calculated the height of the header menu and adjusted #panel to start just below it, but it did not account for cases where the header menu is not at the top of the page.

    Updated Persona code will do so in v1.19.0 going forward, so any custom themes that use CSS overrides to compensate will need a revisit.

  • action:category.loaded will not fire when topics are loaded via infinite scroll on category page. use action:topics.loaded instead

  • Pages starting with /admin/plugins or /api/v3/admin/plugins route prefixes no longer need to call middleware.admin.checkPrivileges or do their own administrative checks. This is now automatically done.

    However, this could be considered breaking if you had a page with a route starting with /admin/plugins/, and expect to have full access to it from non-admins.

  • middleware.authenticate removed, page and API routes are now automatically authenticated via setup(Page|API)Route. Use middleware.authenticateRequest (if not using route helper) and middleware.ensureLoggedIn instead.

    middleware.authenticateOrGuest has been renamed, use middleware.authenticateRequest instead

  • Topics.getTopicPosts takes a topic object as first parameter.

  • S sharonyue referenced this topic on
  • The commit associated with this issue changes the order of middlewares across all routes using setup*Route helpers.

    This sounds serious, but in practice the only thing this affects is that prior to the change, all api requests using bearer token were automatically refused if the site was in maintenance mode. Now, just as admins are able to access the site during maintenance mode, admins can make bearer call authenticated API calls as well.

  • Tags allow % character now, themes will need to be updated to use tags.valueEncoded instead of tags.valueEscaped

    See changes in persona to update your custom theme https://github.com/NodeBB/nodebb-theme-persona/commit/6aada9127865ddc1cbaf8cd5f548ebc78f7bf90a

  • julianJ julian unpinned this topic on

Suggested Topics