Skip to content

Technical Support

Need help with installing or configuring NodeBB? Look here.

4.8k Topics 26.5k Posts

Subcategories


  • User documentation for NodeBB

    44 Topics
    44 Posts
    Jay MoonahJ
    One of the first important things to do after setting up NodeBB is to set up an emailer plugin. While NodeBB does include a local emailer, if your forum is particularly active we recommend using an third-party emailer such as SendGrid which provides better deliverability for sites that send a high volume of email. Setting up SendGrid in NodeBB is very easy. Open the administrative dashboard using the 'gear' icon on your forum. Open the Extend > Plugins menu, and select the Find Plugins tab. Use the search on the right. Type 'SendGrid' and the plugin should appear -- select Install when you see it. From Installed tab on the Plugins menu, search again for 'SendGrid' and select Activate. Activating the plugin will require a restart of your forum. To restart, select the Dashboard menu and press the Restart button to the right. After NodeBB restarts, the SendGrid plugin will be active. After you restart, there should be a item called Emailer (SendGrid) under the Plugins menu -- if you don't see this right away, try refreshing your browser. Sign up to SendGrid Go to the SendGrid website, open the pricing page and scroll to the bottom. Click on the link and create your free account. Once you've confirmed your SendGrid account via email, you should be able to login to the SendGrid website. On the left side of your SendGrid dashboard, open Settings and click on API Keys. Click the button in the top right to create a new key. Make sure that the key has Full Access for Send Mail and Alerts.  When you are done, the new key to your clipboard. Now, return to the SendGrid menu on your NodeBB admin panel. Paste the API key into the field, and save your changes. Now go back to the Dashboard to restart your forum one more time. SendGrid should now be working for your forum. [image: youtubelogo.png] Setting up SendGrid mailer for NodeBB
  • NodeBB guides, how-to's and general tips and tricks

    83 Topics
    601 Posts
    Z
    not sure the plugin worked for firefox. saw a-z in the sort icon. when i used it, i expected the topics in the category would be sorted a-z. they werent
  • 25 Topics
    201 Posts
    eeeeeE
    I think you answered my point, by agreeing there are issues. I didn't even attempt to deploy nodebb, I had problems with much smaller projects! Nextjs routing was going through a change of design at the time, so perhaps that is less confusing now, but there were multiple other headaches. I would get build errors and issues with package management.
  • Weird Text Over Header Icons

    Solved
    6
    0 Votes
    6 Posts
    673 Views
    barisB
    You can just hard code to english but users using different languages will not be able to see them in their correct language. The correct values are here if you want to fix them https://github.com/NodeBB/NodeBB/blob/master/install/data/navigation.json#L26
  • Error On Install -Please Please Help - Losing The Will To Live

    Solved
    19
    0 Votes
    19 Posts
    4k Views
    PitaJP
    @sampo2910 https://docs.nodebb.org/configuring/running/#systemd
  • After Upgrade to 1.17.1 debugging is not working.

    Solved
    1
    0 Votes
    1 Posts
    293 Views
    E
    Hello, I am upgraded from 1.14.3 to 1.16.1 and 1.17.1. I have a heavily customized theme based on the old Material theme and a dozen of various plugins that I have developed. After making changes to categories, filters, etc., I have the site up and running. However my debug console is filled with service worker and require.js mismatch errors. Debugging is extremely slow down to crawl and most importantly no longer opens up the source maps and goes to Nodebb minified package, why? I am unable to debug and this release still requires more work to become production ready so I am staying at release 1.14.3 for now until I can figure this out and test everything else. Below is my log and thanks in advance for your guidance and help as always. Uncaught (in promise) TypeError: Failed to fetch service-worker.js:1 Uncaught (in promise) TypeError: Failed to fetch adservice.google.com/tt/r:1 Failed to load resource: net::ERR_FAILED require.js:143 Uncaught Error: Mismatched anonymous define() module: function(){return function(e){var t={};function n(i){if(t[i]){return t[i].exports}var r=t[i]={i:i,l:false,exports:{}};e[i].call(r.exports,r,r.exports,n);r.l=true;return r.exports}n.m=e;n.c=t;n.d=function(e,t,i){if(!n.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:i})}};n.r=function(e){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})};n.t=function(e,t){if(t&1)e=n(e);if(t&8)return e;if(t&4&&typeof e==="object"&&e&&e.__esModule)return e;var i=Object.create(null);n.r(i);Object.defineProperty(i,"default",{enumerable:true,value:e});if(t&2&&typeof e!="string")for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i};n.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};n.d(t,"a",t);return t};n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};n.p="";return n(n.s="./build/index.js")}({"./build/index.js":function(e,t,n){"use strict";function i(e){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){i=function e(t){return typeof t}}else{i=function e(t){return t&&typeof Symbol==="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t}}return i(e)}Object.defineProperty(t,"__esModule",{value:true});t.io=t.Socket=t.Manager=t.protocol=void 0;var r=n("./build/url.js");var o=n("./build/manager.js");var a=n("./node_modules/debug/src/browser.js")("socket.io-client");e.exports=t=l;var s=t.managers={};function l(e,t){if(i(e)==="object"){t=e;e=undefined}t=t||{};var n=r.url(e,t.path||"/socket.io");var l=n.source;var c=n.id;var u=n.path;var f=s[c]&&u in s[c]["nsps"];var d=t.forceNew||t["force new connection"]||false===t.multiplex||f;var p;if(d){a("ignoring socket cache for %s",l);p=new o.Manager(l,t)}else{if(!s[c]){a("new io instance for %s",l);s[c]=new o.Manager(l,t)}p=s[c]}if(n.query&&!t.query){t.query=n.queryKey}return p.socket(n.path,t)}t.io=l;var c=n("./node_modules/socket.io-parser/dist/index.js");Object.defineProperty(t,"protocol",{enumerable:true,get:function e(){return c.protocol}});t.connect=l;var u=n("./build/manager.js");Object.defineProperty(t,"Manager",{enumerable:true,get:function e(){return u.Manager}});var f=n("./build/socket.js");Object.defineProperty(t,"Socket",{enumerable:true,get:function e(){return f.Socket}});t["default"]=l},"./build/manager.js":function(e,t,n){"use strict";function i(e){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){i=function e(t){return typeof t}}else{i=function e(t){return t&&typeof Symbol==="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t}}return i(e)}function r(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||false;i.configurable=true;if("value"in i)i.writable=true;Object.defineProperty(e,i.key,i)}}function a(e,t,n){if(t)o(e.prototype,t);if(n)o(e,n);return e}function s(e,t){if(typeof t!=="function"&&t!==null){throw new TypeError("Super expression must either be null or a function")}e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:true,configurable:true}});if(t)l(e,t)}function l(e,t){l=Object.setPrototypeOf||function e(t,n){t.__proto__=n;return t};return l(e,t)}function c(e){var t=d();return function n(){var i=p(e),r;if(t){var o=p(this).constructor;r=Reflect.construct(i,arguments,o)}else{r=i.apply(this,arguments)}return u(this,r)}}function u(e,t){if(t&&(i(t)==="object"||typeof t==="function")){return t}return f(e)}function f(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function d(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Date.prototype.toString.call(Reflect.construct(Date,[],function(){}));return true}catch(e){return false}}function p(e){p=Object.setPrototypeOf?Object.getPrototypeOf:function e(t){return t.__proto__||Object.getPrototypeOf(t)};return p(e)}Object.defineProperty(t,"__esModule",{value:true});t.Manager=void 0;var h=n("./node_modules/engine.io-client/lib/index.js");var m=n("./build/socket.js");var g=n("./node_modules/socket.io-parser/dist/index.js");var v=n("./build/on.js");var y=n("./node_modules/backo2/index.js");var b=n("./build/typed-events.js");var w=n("./node_modules/debug/src/browser.js")("socket.io-client:manager");var x=function(e){s(n,e);var t=c(n);function n(e,o){var a;r(this,n);a=t.call(this);a.nsps={};a.subs=[];if(e&&"object"===i(e)){o=e;e=undefined}o=o||{};o.path=o.path||"/socket.io";a.opts=o;a.reconnection(o.reconnection!==false);a.reconnectionAttempts(o.reconnectionAttempts||Infinity);a.reconnectionDelay(o.reconnectionDelay||1e3);a.reconnectionDelayMax(o.reconnectionDelayMax||5e3);a.randohttps://requirejs.org/docs/errors.html#mismatch at makeError (require.js:168) at D (require.js:1254) at Object.o [as require] (require.js:1446) at requirejs (require.js:1797) at Function.req.config (require.js:1805) at require-config.js:3 chartist.js:330 Uncaught TypeError: Cannot read property 'querySelectorAll' of null at Object.c.createSvg (chartist.js:330) at f.d [as createChart] (chartist.js:3778) at f.h (chartist.js:1925) jquery.js:10109 Failed to load resource: the server responded with a status of 404 (Not Found) send @ jquery.js:10109 autofill.js:105 Uncaught TypeError: Cannot read property 'tid' of undefined at autofill.js:105 at Object.execCb (require.js:1696) at n.check (require.js:883) at n.enable (require.js:1176) at n.init (require.js:788) at require.js:1460 require.js:772 Uncaught TypeError: e.slice is not a function at n.init (require.js:772) at require.js:1460 :4567/assets/src/modules/jqueryui.js?v=o91jt8lcv8k:1 Failed to load resource: the server responded with a status of 404 (Not Found) require.js:143 Uncaught Error: Script error for "jqueryui" service-worker.js:1 Uncaught (in promise) TypeError: Failed to fetch socket.io.js:3956 GET http://localhost:4567/socket.io/?EIO=4&transport=polling&t=NgHu2XK net::ERR_FAILED e @ socket.io.js:3956 n @ socket.io.js:3875 e @ socket.io.js:3804 e @ socket.io.js:3840 e @ socket.io.js:4230 e @ socket.io.js:4173 e @ socket.io.js:3288 e @ socket.io.js:2687 n @ socket.io.js:2615 e.exports @ socket.io.js:2453 e @ socket.io.js:409 (anonymous) @ socket.io.js:700 setTimeout (async) e @ socket.io.js:692 e @ socket.io.js:666 i.emit @ socket.io.js:1915 e @ socket.io.js:3143 (anonymous) @ socket.io.js:2712 i.emit @ socket.io.js:1915 e @ socket.io.js:3371 e @ socket.io.js:4612 service-worker.js:1 Uncaught (in promise) TypeError: Failed to fetch socket.io.js:3956 GET http://localhost:4567/socket.io/?EIO=4&transport=polling&t=NgHu3cg net::ERR_FAILED
  • Post queue too big (crashing site)

    Unsolved
    2
    0 Votes
    2 Posts
    373 Views
    barisB
    I will post a couple queries to help with this. Get number of queued posts db.objects.count({_key: "post:queue"}); Get latest 20 post queue objects ids db.objects.find({_key: "post:queue"}).sort({score: -1}).limit(20); Using ids from above query you can get the queued posts with db.objects.find({_key: "post:queue:<replace_with_id_from_above_query"}); To delete a post queue from the db with id 123456 db.objects.remove({_key: "post:queue", value: "123456"}); db.objects.remove({_key: "post:queue:123456"}); To remove all queued posts db.objects.remove({_key: /^post:queue/}); Hope that helps.
  • Register a hook but lose another hook

    Solved
    3
    0 Votes
    3 Posts
    329 Views
    D
    Thank you so much. And I spent my afternoon debugging this, feeling so stupid right now
  • Post name without topic/id?

    Unsolved
    3
    0 Votes
    3 Posts
    492 Views
    N
    @julian I see. I love the wordpress permalinks where there are no ID's, it's just the post name so I hoped there was something like that for nodebb. Still better than the last forum sw I was using :). Thanks.
  • Post's Dropdown Menu Doesn't Work

    Unsolved
    3
    0 Votes
    3 Posts
    446 Views
    barisB
    Works fine in latest firefox.
  • NodeBB shuts down

    Unsolved
    4
    0 Votes
    4 Posts
    612 Views
    y hY
    Worked Thanks
  • How do I update my custom theme?

    Moved
    7
    0 Votes
    7 Posts
    881 Views
    julianJ
    @jim-bridger said in How do I update my custom theme?: Does that mean my theme would be listed in everyone elses plugin list? It's a custom theme for my site, not something I want to publish Yes, that is correct. Because you've published it to npm, our package manager automatically picks it up as an available theme and offers it for download to any other NodeBB. You can set nbbpm.index to false in your package.json, but this would also remove the theme from your plugins list. The easiest thing to do would be to publish the theme under your own namespace (agian, with nbbpm.index set to false), and then install it via the command line, as @pitaj suggested. e.g. npm i @jimbridger/nodebb-theme-mytheme
  • Layout shift in 1.17.1

    Unsolved
    6
    0 Votes
    6 Posts
    712 Views
    julianJ
    @pitaj Markdown plugin should automatically append width and height for images (both local and external) in the output HTML, which should help resolve these issues. I think the real remaining cause of a viewport shift would be topic events. They're still rendered client-side right now.
  • Unwanted line feed

    Solved
    7
    0 Votes
    7 Posts
    631 Views
    FrankMF
    Explanation Normally, when i copied text from an terminal window and paste it into an post i will do four spaces before i insert the text. This works for me for a long time. After i switched to ubuntu & wayland i got the problem with unwanted line feeds. I do not know what triggers the problem Solution I will insert the text and use the code icon to format the text. That worked for me. Hope this helps someone with a similar problem
  • Voting for and against unregistered users

    Unsolved
    1
    1 Votes
    1 Posts
    204 Views
    J
    I have a forum with directories with no option to subscribe Is it possible to let guests vote for posts like 'liked' or 'disliked'
  • How to override plugin/widget templates from within a theme?

    Moved
    4
    0 Votes
    4 Posts
    2k Views
    PitaJP
    You can't override them from within your theme (themes are always lowest priority), but you can create a new plugin for overrides and set it as the highest priority.
  • Allow forum to be embedded on multiple domains?

    Solved
    8
    0 Votes
    8 Posts
    1k Views
    Jim BridgerJ
    @dunlix I'm already using a custom theme, but my site has it's own login system where the user is shown logged in at the top -- this would not be possible if i put it into a nodebb theme. Also session-sharing and iframe is already working perfectly.
  • nodebb setup config/scripted admin setup failing (ansible)

    Solved
    11
    0 Votes
    11 Posts
    1k Views
    B
    @pitaj Well, this info is golden. This clearly needs to be documented well and easily found. The usage message of ./nodebb setup --help should indicate the expected syntax and strikingly point out config.json is the wrong syntax in this case to be fed into ./nodebb setup. In the long run, there should be no special case or different syntax between node app --setup and ./nodebb setup. Thank you, @PitaJ, @Max-0 .
  • phpbb conversion leaves html/bb code

    Unsolved
    9
    0 Votes
    9 Posts
    876 Views
    N
    I'm going to start a new thread since this is getting nowhere and it is now about the plugin and not the outcome. https://community.nodebb.org/topic/15804/nodebb-plugin-import-of-phpbb-looping
  • phpbb >nodebb, admin/mods cannot edit

    Solved
    28
    0 Votes
    28 Posts
    4k Views
    N
    @keng-her Thank you. I'll back everything up and try that and report back.
  • Expanded categories without plugin?

    Solved
    19
    0 Votes
    19 Posts
    2k Views
    N
    @nodeham Thank you for all of the help. I will start a new thread for the next problem I am seeing.
  • Introduced three columns style and page requires a refresh

    Moved
    6
    0 Votes
    6 Posts
    620 Views
    paladin884P
    @pitaj that's it! Oh gosh, I literally couldn't see the connection of that ID. But now it all makes sense. Thank you!
  • Add custom stylesheet inside header.tpl

    Moved
    5
    0 Votes
    5 Posts
    722 Views
    PitaJP
    @paladin884 what do you mean that won't work? What did you try? Here's me importing a CSS fine directly into less in one of my plugins: https://github.com/pitaj/nodebb-plugin-calendar/blob/2b9893dad12ee59bce494fe0fb24342f66cf9e67/public/calendar.less#L1 Then you just need to make sure your less is defined in plugin.json: https://github.com/pitaj/nodebb-plugin-calendar/blob/2b9893dad12ee59bce494fe0fb24342f66cf9e67/plugin.json#L31 You can instead just add it to your plugin.json under css like so: { ... "css": [ "path/to/stylesheet.css" ] } Either of those options will result in it being added to the main css file loaded in header.tpl