Starter plan on air-gapped workspace

Description

I have air-gapped workspace. I registred it offline. So i had Starter plan. After some time (2 hours) my plan changed to Comminity and then i saw"This air-gapped workspace is in read-only mode.". I dont understand what happend. I have only 4 users.

Server Setup Information

  • Version of Rocket.Chat Server: 7.8.2
  • Operating System: Ubuntu 22.04
  • Deployment Method: docker
  • Number of Running Instances: 1
  • DB Replicaset Oplog: -
  • NodeJS Version: v22.17.1
  • MongoDB Version: 8.0.12 / wiredTiger
  • Proxy: no
  • Firewalls involved: -

LOGS (rocket chat)

{"level":50,"time":"2025-07-28T08:22:02.185Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:22:12 {"level":50,"time":"2025-07-28T08:22:12.283Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:22:16 {"level":50,"time":"2025-07-28T08:22:16.729Z","pid":1,"hostname":"4b3eef45c45f","name":"SyncedCron","msg":"Failed to send usage report","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:22:27 {"level":50,"time":"2025-07-28T08:22:27.638Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:22:52 {"level":50,"time":"2025-07-28T08:22:52.990Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:23:33 {"level":50,"time":"2025-07-28T08:23:33.252Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"FetchError","message":"request to https://releases.rocket.chat/v2/server/supportedVersions failed, reason: unable to get local issuer certificate","stack":"FetchError: request to https://releases.rocket.chat/v2/server/supportedVersions failed, reason: unable to get local issuer certificate\n    at ClientRequest.<anonymous> (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1501:11)\n    at ClientRequest.emit (node:events:518:28)\n    at ClientRequest.emit (node:domain:489:12)\n    at emitErrorEvent (node:_http_client:104:11)\n    at TLSSocket.socketErrorListener (node:_http_client:518:5)\n    at TLSSocket.emit (node:events:518:28)\n    at TLSSocket.emit (node:domain:489:12)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at processTicksAndRejections (node:internal/process/task_queues:90:21)","errno":"UNABLE_TO_GET_ISSUER_CERT_LOCALLY","code":"UNABLE_TO_GET_ISSUER_CERT_LOCALLY","name":"FetchError"}}
2025-07-28 11:24:58 {"level":50,"time":"2025-07-28T08:24:58.383Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to communicate with Rocket.Chat Cloud","url":"https://releases.rocket.chat/v2/server/supportedVersions","err":{"type":"AbortError","message":"The user aborted a request.","stack":"AbortError: The user aborted a request.\n    at abort (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1458:16)\n    at AbortSignal.abortAndFinalize (/app/bundle/programs/server/npm/node_modules/node-fetch/lib/index.js:1473:4)\n    at AbortSignal.dispatchEvent (/app/bundle/programs/server/npm/node_modules/event-target-shim/src/event-target.mjs:337:35)\n    at abortSignal (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-signal.ts:68:12)\n    at AbortController.abort (/app/bundle/programs/server/npm/node_modules/abort-controller/src/abort-controller.ts:26:9)\n    at Timeout.<anonymous> (/app/bundle/programs/server/npm/node_modules/@rocket.chat/server-fetch/src/index.ts:43:48)\n    at listOnTimeout (node:internal/timers:588:17)\n    at processTimers (node:internal/timers:523:7)","name":"AbortError"}}
2025-07-28 11:24:58 {"level":50,"time":"2025-07-28T08:24:58.383Z","pid":1,"hostname":"4b3eef45c45f","name":"System","msg":"Failed to get supported versions from cloud after 5 retries."}

Airgap needs a license.

But i have Starter plan. I registered my server.


What am i doing wrong?

^^^^^^^^^^^^^^^^^^^

That’s it.

Airgapped servers need a premium license. It is not ‘free’. (Also note your country may be embargoed for paid services)

Of course you can take the open source code, remove the EE folder, run fossify and build whatever you want.

I understand that airgapped servers need a premium license. So I cant use Community plan. But Starter plan is premium and free. Isnt it?

Airgapped needs a licence - period. No matter what.

Yes, you can use Community Edition for ‘free’. But not airgapped.

Yes you can use Starter Edition for ‘free’ But not airgapped.

You cannot use airgapped without a paid licence on any version.

Ok, i finally undertand. Thank you.

But i did’t find in docs that airgapped cant work with Starter plan.

Yup, possibly the wording could be enhanced a little.

Essentially all airgapped versions require a paid licence.

You need to speak to the sales team if you want to airgap it.

That does not appear to be true according to your own pricing/comparison chart.

Is what you are saying correct or is the website correct?

I am in the exact same boat as OP. I am confused because the Starter plan explicitly states otherwise on Rocketchat’s website. Are you saying there is no way to keep an airgapped instance licensed? Starter or Community? Unsure why it drops into read-only mode…

Would also like to add that even in the docs it says you can get a Starter license for the air-gap so I’m very confused. I understand that a “license” is required but the pic that sysadmin1 posted above as well as this screen cap of the air-gap docs clearly state that the air-gap license should be obtainable and free. This is way more confusing than just needing to be “worded better”. They are flat out wrong/misleading OR there’s a misunderstanding in what you are telling us in this forum post.

Note - I don’t work here. Don’t shoot the messenger.

I rely on others in the company to provide me with information.

Yup the page is here, but often the docs are plain wrong.

Dropping to read only is when you are over some or other limit. Possibly you registered and then tried to airgap or similar. See the above link on how you are meant to do it.

I have asked again for further clarification.

You can of course grab the source code, fossify it, remove all the bits you don’t like, and build your own. That is what open source is about.

It is open source. That is not the same as free, or free software. Please bear that in mind.

Sorry. I assumed based on your responses and how your name was labeled that you were representing the company. This is one of those tricky scenarios where we can’t open a support ticket because we aren’t a paid support customer but the issue sits outside of that and literally has to do with inaccuracies/confusion/whatever you want to call it in what should require us being a paid user. I’m hoping that this post reaches someone at RocketChat to jump in here and officially clarify and either update the docs/pricing comparison or fix whatever issue is preventing it from working as documented. Time and resources were spent researching what tool to go with for our purposes (RocketChat vs. Mattermost, for example) and we landed on RocketChat because we were a bit familiar with it from several years ago where this whole license mechanism didn’t even exist and everything we looked at in the docs and that comparison page indicated it wouldn’t/shouldn’t be a problem.

Been in the community since just after they open sourced.

Did work for them for while but not now. Still have a mountain of good friends there.

They rarely read here unless I flag it. As I said - don’t shoot the messenger. I do what I can but I can’t force anything. I have asked for clarification. We’ll see what they say.

Your problem is indeed that you don’t want to pay, but want to use the software and have support. Never an easy bridge to cross.

Yup - I remember the old days when there were no licences but they had to make money somehow to stay afloat and continue to develop code. There simply weren’t enough voluntary contributions. That’s it.

People who use Rocket frequently make money themselves, but struggled with the concept that the software writers might need to make some money! So licensing was the only practical route.

I’ve fought for a long time to keep some ‘free’ usage and open source. Again, it’s never an easy balance. Devs gotta eat. …..

The old info on the docs page used to link to support but I think we got it changed and I think now links to sales. You may get an answer from them, but you will be at the back of the queue obviously.

As I said above:

I’ll see what comes back and let you know - please be patient.

I don’t think that’s a fair statement. I just want the docs and sales marketing to match the product for something so important, which as I stated is outside the scope of the product itself. It has nothing to do with me wanting/not wanting to pay. I’m not the one with or without money in this particular scenario but I don’t think you should have to pay for support first to determine if you are required to pay.

I completely understand why they decided to charge and it’s entirely their prerogative if they charge, if they remove starter edition, if they increase or decrease prices, whatever. This is not an argument for what they should/shouldn’t charge. What I don’t think is ok (and maybe it’s just a bug and that’s fine and I hope they fix it) is if you say everywhere (docs, pricing list) that something is free (and it works as expected for a day in this most recent case on our end where it said we were starter and the license was valid and then come in the next day and now it’s community. Last time after a week or 2 it went read-only where we thought the documented process wasn’t followed on our end so we tried again) and then after you deploy it in your environment it’s like “Surprise! This isn’t actually free.”. That’s more of a bait and switch which I HOPE is not their intention and it’s a mistake somewhere.

Thank you for relaying it to the team.

General open source

Note - I am not trying to be particularly argumentative or obtuse here, but I see the same arguments trotted out time after time for 30 years or more - both here and other places where I do open source work. I’m just trying to clarify what you can and can’t expect.

People have got it in there heads that they can ‘demand’ something when they aren’t prepared to pay for something.

That just isn’t the way it works.

If you intend buying, contact sales. Simple as that. They’ll be happy to help.

If not, YMMV.

Most people don’t either, but it is what it is. Just facts. But not ones many want to hear.

That is the bit. You can ‘want’ when you pay.

If you don’t want to pay then the code is there. Help yourself. Zero guarantees of anything, including documentation, as per the MIT licence. They could hide documentation for paying users only if they wanted.

However, note the following:

Docs

Yup the docs are pretty flaky. Always have been, always will be. It isn’t done on purpose, but there is a lot of stuff there to maintain, priorities with paying customers affect things, features added and removed, and things get missed.

Between a few of us we try to tighten it up for the open source side. If you think something is wrong on a page or needs clarification then you can use the ‘Was this article helpful?’ link at the bottom, say No and add your comments. Docs will look at it.

Now, as it transpires I have a good friend of mine who oversees various aspects in Rocket and following me complaining previously that some of this stuff wasn’t really clear enough, he has been working on documentation with better comparisons between versions. It isn’t ready yet - some info is surprisingly hard to confirm and is waiting for some info on Omnichannel currently - but will be published as soon as we know we have it about right.

Meat & potatoes

In the meantime I can confirm that you can have ONE air-gapped Starter workspace without having to contact sales.

So with Starter you will be limited to 50 users. Any more and it will go read only.

The documentation previously linked tells you how to do it and you MUST follow it precisely - the instance has to be completely airgapped. It if detects ANY connectivity it will fail.

It will not apply to Community Edition - CE - no matter how many users.

You will HAVE to have a properly registered and paid for instance for airgapped with more than 50 users.

Hope that is all clear.

If you have further questions please ask.

Thanks.