Skip to content

NodeBB Development

Stay tuned here to hear more about new releases and features of NodeBB!

3.5k Topics 21.8k Posts

Subcategories


  • Posts from the NodeBB Development Blog
    96 Topics
    778 Posts
    julianJ

    Occasionally, we will get asked whether there are any differences between our hosted service and the open source project.

    It is as though we are holding back some great features and only allowing our paying customers access them! Conversely, it could be assumed that because we are hosting the software for others, that we would somehow out of self-interest or for economic reasons, deliver an inferior version with limitations.

    I'd like to say upfront that this is not the case for NodeBB.

    When you use our hosted service, you receive the same great NodeBB software that you can get for free off of our GitHub repository.

    What we're selling is support, maintenance, upgrades, and peace of mind delivered by our world-class† support team.

    You definitely can host NodeBB on your own! We've strived for years to deliver a piece of software that runs lean and fast on minimal hardware, great docs (some contributed by other admins!) that help you get up to speed quickly, and a fantastic community that will help you if you get stuck.

    The reason I take this principled stand is simple — I think it's unfair when artificial limitations are placed on software just for the purpose of getting customers to pay more.

    We've seen all this time and time again:

    You can't install any plugin you want, just a select few from a small list You can only have X units (tickets, posts, etc) of whatever you're using You can only have X admins/owners You can't see any messages older than X days

    These limitations are all artificial, and serve to restrict the use of something to the bare minimum. Anything extra is — of course — available for the right price.

    We don't do that. We tell everybody that NodeBB is powerful enough to run huge communities, and we stand by it. We tell everybody that NodeBB is flexible enough to look and function however you want, and we stand by it.

    These are the real limitations we impose on our hosting service:

    Hard drive space for uploads are imposed by our upstream provider and are set, though we are happy to add additional drive volumes for a fee) We have soft "pageview" limits that any user on our hosting can exceed (in fact, many do). We set them purely as a benchmark for the point at which your NodeBB may slow down depending on the type of load that you get, and encourage dialogue to make sure that you're on the right plan (server resources, etc.) We do not allow shell access for security reasons (and if you needed it, you probably could self-host)

    So please do rest assured when I and others tell you that what you see is what you get. No more, no less. I'd rather everybody get to use the best of NodeBB, instead of serving a special feature-reduced version for others.

    † I'm going to go out on limb here and say that we're probably the most qualified people to maintain NodeBB. Feel free to disagree 😉

  • You have a cool idea about NodeBB? Post it here.

    798 Topics
    5k Posts
    crazycellsC

    when the forum is used as PWA, there is no easy way to navigate between pages...

    Yesterday, I was reading a post on the forum that mentioned another topic, I have encountered an issue when attempting to return to the original post. So, after reading the linked topic, I had to go to categories page and retrace my steps to locate the topic I was reading initially...

    Although this can be achieved by page control arrows on destop and mobile browsers, there is no easy way to achieve this on PWA... so I propose adding some page control buttons that appear at the bottom of the page when scrolled up. (maybe it can be integrated to post navigation bar but I believe those buttons should appear in all pages, not only in topics)

    Here is just a suggestion to distinguish them from other arrows...

    IMG_0029 copy.jpeg

    alternatively the arrows or rewind icons that YouTube uses can be used:

    IMG_0030.jpg

  • Found a bug? Why not make a bug report here?
    1k Topics
    7k Posts
    crazycellsC

    @solmak

    Thank you for spending time on this, that was fast!

    he is quite speedy :rofl: @baris is known to create a new plugin in 3 minutes of it being discussed in the forum... lol

    Link Preview Image How? · Issue #2 · NodeBB/nodebb-plugin-best-posts

    How did you make a plugin in 3 minutes?

    favicon

    GitHub (github.com)

  • Focused discussion related to ActivityPub integration in NodeBB

    27 Topics
    231 Posts
    julianJ

    Please see below for details regarding the first Forasphere/Threadiverse Working Group meeting.

    Following up on the initial announcement post regarding the creation of a working group for threadiverse-type ActivityPub applications, I'm pleased to inform the community-at-large that we have scheduled our first meeting for Thursday, 4 April from 18:00 to 19:00 UTC.

    Thank you @[email protected] for organizing and providing an online meeting space:

    The video-call details are below. The goal of the meeting is to clarify what this group is, what its goals are, and how it will be run. As such, the working agenda is:

    Intro & housekeeping (e.g. consent to record). Who/what we are, nomenclature and overall expectations. Relationship with standards organisations and processes, including Fediverse Developers Network (FediDevs), W3C Social Web Community Group, and FEP process. Organisational, including software (i.e. mailing list), meeting times, facilitation and minutes.

    Topic: Forasphere/Threadiverse Technical Alignment Meeting
    Time: Apr 4, 2024 06:00 PM Universal Time UTC

    Join Zoom Meeting
    https://us06web.zoom.us/j/83819428627?pwd=zEE5EQXwPeEjCbqQNyJnaMR21ZMcSe.1

    If you have any suggestions on the agenda please respond to this post.

  • Help Translate NodeBB
  • /api/login return loggedin:false

    3
    0 Votes
    3 Posts
    385 Views
    T

    Okay I bit the bullet and learned nginx and am off to the races.

  • Session-sharing id question

    2
    0 Votes
    2 Posts
    287 Views
    PitaJP

    The id you send should identify the user in your system. The plugin will store a map of NodeBB user id to your id for synchronization.

  • Adding Categories/Boards Dynamically

    1
    0 Votes
    1 Posts
    214 Views
    DO MGBKD

    Hi,
    I am new to NodeBB. I want to use NodeBB for the school, every class will have its own discussion boards, the discussion board can only be accessed by the students in the class and moderated by the classroom teachers. How do I create the board dynamically and restrict access for a certain group of people? I don't need NodeBB's user management system as our application has already authenticated users, so this is assuming students and teachers are already logged in with JWT token stored in the cookie.

    Your help is appreciated!

    John

  • can we run nodebb using firebase hosting

    3
    0 Votes
    3 Posts
    400 Views
    dunlixD

    @ak-tech I don't know about firebase hosting... As long as it runs on a compatible OS and has Shell access, I don't see why it can't.

  • Nodebb plugin install from github

    3
    0 Votes
    3 Posts
    475 Views
    Spin0usS

    @anirban-dutta I use command like this npm install git+https://github.com/me-cooper/nodebb-plugin-makesmart-gallery.git when repo is not recognized by npm install

    Just remember to add .git at the end of github repo url.

  • Content Security Policy and unsafe-inline

    1
    0 Votes
    1 Posts
    176 Views
    Jeff ReiffersJ

    Re: content security policy

    Is CSP supported in 1.17.1?

  • 0 Votes
    3 Posts
    383 Views
    phenomlabP

    @miguel-guzman I just noticed that the Fiddle you included appears to have an API key embedded - hope that's not yours - otherwise, millions of random internet users will be getting this product for free whilst you pay for it 🙂

  • 0 Votes
    8 Posts
    906 Views
    Anirban DuttaA

    Thanks @dunlix and @PitaJ for help me. Problem solved only for yours help. Thanks a lot

  • How to make a plugin?

    2
    0 Votes
    2 Posts
    361 Views
    Anirban DuttaA

    https://docs.nodebb.org/development/plugins/
    Read this link----->

  • Users to whom the category is available

    7
    0 Votes
    7 Posts
    639 Views
    M

    As a result, I got such a script, maybe it will be useful to someone.

    const Theme = {} const user = require.main.require('./src/user') const privileges = require.main.require('./src/privileges') Theme.getUsersByCategory = async function(data) { const { templateData: { cid } } = data const allUserIds = await user.getUidsFromSet('users:joindate', 0, -1) const asyncFilter = async (arr, predicate) => { const results = await Promise.all(arr.map(predicate)) return arr.filter((element, index) => results[index]) } const availableUserIds = await asyncFilter(allUserIds, async (id) => { return await privileges.categories.can('read', cid, id) }) data.templateData.availableUsers = await user.getUsersData(availableUserIds) return data } module.exports = Theme
  • Cannot find any string to translate.

    7
    0 Votes
    7 Posts
    664 Views
    AlekseiA

    @antosik great, thank you!

  • Custom homepage template

    23
    0 Votes
    23 Posts
    2k Views
    PitaJP

    @phenomlab it probably isn't provided with the breadcrumb data, so it doesn't render anything.

    You can check ajaxify.data in your browsers js console to see what's there.

  • the custom theme will be removed

    4
    0 Votes
    4 Posts
    460 Views
    PitaJP

    Yeah it's a known issue you'll have to relink sometimes. It depends on what npm version and OS you're using.

  • Issue while upgrading !!

    3
    0 Votes
    3 Posts
    285 Views
    gotwfG

    @rajeev2189 ... but since:

    You already tried the big jump and failed You are also using some customized stuff

    I'd suggest going version by version until you hit something that breaks. Then examine breaking changes logs and such for that version.

    Edit: Hmmm... Rereading your OP:

    ...challenges while upgrading.

    Maybe I misinterpreted this and you have not actually already tried to update? 🤔

    In which case, if not, follow pitaj's recipe above.

  • Improve API Docs

    1
    0 Votes
    1 Posts
    170 Views
    Martijn MichelM

    A question to the developers of nodebb, please improve the api docs. The api is great but is lacking explanation in many cases.

  • Making the font bigger

    12
    0 Votes
    12 Posts
    932 Views
    phenomlabP

    @eveh sorry 🤭

    Try this

    body { font-size: 2rem !important; }
  • api/admin/upload/file always 401

    7
    0 Votes
    7 Posts
    563 Views
    Martijn MichelM

    ive found this post, but i dont understand how to get a csrf token
    https://community.nodebb.org/topic/6932/how-to-get-a-csrftoken-from-an-api-req-object/4

  • Unable to connect a bot to the websocket

    19
    0 Votes
    19 Posts
    839 Views
    masonwheelerM

    @pitaj OK, I have no idea what's going on, but after I verified all of those things, without actually changing the code that wasn't working before... suddenly I'm getting user messages! 😕 😕 😕

    So... yeah, it's working now. Thanks for the help!

  • 0 Votes
    3 Posts
    489 Views
    F

    @grabmaier Absolutely, try it out and share with us what you build.

  • API: Trouble getting list of users

    3
    0 Votes
    3 Posts
    395 Views
    thalixT

    I found a good way to get the user list out of mongodb. In case anyone need it:

    async function doMongoDb() { const { MongoClient } = require("mongodb"); const username = encodeURIComponent("admin"); const password = encodeURIComponent("mypassword"); const clusterUrl = "localhost:27017"; const authMechanism = "DEFAULT"; const uri = `mongodb://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`; const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); try { await client.connect(); const database = client.db("nodebb"); const objects = database.collection("objects"); // get all user const query = { _key: /^user:\d+$/ }; // select fields we want to see const options = { projection: { _id: 0, username: true, _id: false, email: true, "email:confirmed": true, joindate: true, fullname: true }, }; const cursor = objects.find(query, options); if ((await cursor.count()) === 0) { console.log("No user found!"); } // iterate over the users await cursor.forEach(user => { if (user["email:confirmed"] == 1 ) { console.dir(user); } }); } finally { // make sure we close the connection await client.close(); } } // --------------------------------------------------- function init() { try { doMongoDb(); } catch(e) { console.log(e); } } // --------------------------------------------------- init();