Rocket.Chat Push Gateway are disabled after Update to 8.7.0

Description

After updating Rocket.Chat from version 8.6.1 to 8.7.0, the following message appears in the server logs:
“Connected to MongoDB database: rocketchat”
{“level”:51,“time”:“2026-08-07T16:52:13.362Z”,“pid”:1,“hostname”:“a3d387b57282”,“name”:“System”,“msg”:“Offline license detected: outbound connections to Rocket.Chat Cloud services and the Rocket.Chat Push Gateway are disabled”}
Before the update to version 8.7.0, push notifications to the iPhone were working correctly.
Since the update, push notifications are no longer delivered to the iPhone. No intentional changes were made to the license, Rocket.Chat Cloud configuration, or push notification settings.
It appears that Rocket.Chat 8.7.0 is now detecting the existing license as an offline license and consequently disabling access to the Rocket.Chat Push Gateway.
Could you please confirm whether this is a known issue or a behavioral change introduced in Rocket.Chat 8.7.0, and advise how push notifications can be restored?

Server Setup Information

  • ±----------------------------------------------------------------------------------------+
    | SERVER RUNNING |
    ±----------------------------------------------------------------------------------------+
    | |
    | Rocket.Chat Version: 8.7.0 |
    | NodeJS Version: 22.22.3 - x64 |
    | MongoDB Version: 8.2.3 |
    | MongoDB Engine: wiredTiger |
    | Platform: linux |
    | Process Port: 3000 |
    | Site URL: https://rocketchat.deutschland.de |
    | Hashed Site URL: 1a918a270a065a848882a9443180d1dd7a2afe26e091d006ef64583f5480adba |
    | OpenSSL Version: 3.5.6 |
    | FIPS Provider: Disabled |
    | Commit Hash: c59f19009d |
    | Commit Branch: HEAD |
    | |
    ±----------------------------------------------------------------------------------------+

Any additional Information

Due to this issue, i am forced to take our Rocket.Chat instance offline for the first time in over a year. Push notifications are a critical part of my daily workflow, and without them the mobile app is effectively unusable for me. This makes the current behavior a production-blocking issue for me

The perils of early adoption. If you don’t like nasty surprises stay one release behind.

Note things do change - they may have tightened licencing again.

How many users?

What licence are you using?

And don’t ask the same question in multiple places hoping to get a faster answer. It just wastes my time.

This is you.

I am using the Starter plan with a self-managed Docker deployment.

I have approximately 3 registered users

The workspace is registered in Rocket.Chat Cloud and shows Status: Active.

Register_Server = true

Push_enable = true

Enterprise_License_Status = Valid

Push notifications worked correctly on 8.6.1.

Immediately after upgrading to 8.7.0, Rocket.

License installed, version 3.0
Offline license detected: outbound connections to Rocket.Chat Cloud services and the Rocket.Chat Push Gateway are disabled

This is not an air-gapped installation, and I did not intentionally change the license, cloud registration, or push configuration during the upgrade.

From our perspective, the upgrade to 8.7.0 causes Rocket.Chat to load a valid license but classify it as an offline license, which disables access to the Rocket.Chat Cloud services and the Push Gateway.

I understand your point.

I posted this in multiple places because this is a critical issue for us. Push notifications stopped working immediately after upgrading to 8.7.0, and this directly affects our users.

I wasn’t trying to create duplicate work. I was simply hoping to reach someone who might have already encountered the same issue or could point me in the right direction.

Why is a valid Starter license detected as an Offline License during the startup of Rocket.Chat 8.7.0, even though the installation is a normal, online-registered self-managed workspace and push notifications worked without any issues in Rocket.Chat 8.6.1?

Hi,

It’s been a while! We’ve analyzed and resolved several Rocket.Chat issues together in the past, so I hope you still remember me. :blush:

My Rocket.Chat installation is actually still the same one as back then. It has successfully gone through many upgrade cycles since then, and everything worked so smoothly that I never had a reason to contact you again.

Unfortunately, this time I seem to have run into a problem that I haven’t been able to solve on my own, so I was hoping you might be able to point me in the right direction.

I believe the code change

(#41148) adds support for the offline license flag, suppressing every outbound connection to Rocket.Chat Cloud services and the Push Gateway at its source, so air-gapped workspaces never initiate calls that would violate their security compliance.

Is the reason for this

And why would it affect you if you are not offline and don’t have an offline licence?

Trying to understand why it would single you out and not others.

Rollback to Rocket 8.6.1 with an consistent mongo dump from version 8.6.1
(the good old admin makes a backup bevor change)

gleiche Installation
gleiche MongoDB-Version
gleicher Workspace
gleiche Push-Konfiguration
gleiche Lizenz
gleicher Lizenz-Hash AkzRP0Qs

8.6.1 → Push funktioniert
8.7.0 → “Offline license detected” → Push gesperrt

You can see in the code

Die konkrete Änderung steckt in PR #41148 „feat: no egress for offline licenses“, gemerged am 18. Juli 2026 für 8.7.0. GitHub

Die zentrale Stelle für Push ist in:

apps/meteor/server/lib/notifications/push/push.ts

Dort wurde sinngemäß diese Prüfung eingebaut:

private shouldUseGateway(): boolean {
if (License.hasOfflineLicense()) {
return false;
}

return Boolean(
    !!this.options.gateways &&
    settings.get('Register_Server') &&
    settings.get('Cloud_Service_Agree_PrivacyTerms')
);

}

if (this.options.gateways && License.hasOfflineLicense()) {
continue;
}

Das bedeutet ganz konkret: Sobald License.hasOfflineLicense() true liefert, wird der Push-Gateway nicht benutzt – unabhängig davon, dass Register_Server=true gesetzt ist. GitHub

Noch deutlicher ist die neue Datei:

apps/meteor/server/lib/cloud/offlineLicense.ts

export function hasOfflineLicense(): boolean {
return License.hasOfflineLicense();
}

export function assertNotOfflineLicense(): void {
if (hasOfflineLicense()) {
throw new CloudOfflineLicenseError(
‘Cloud connectivity is disabled by the offline license applied to this workspace’
);
}
}

Die Entwickler beschreiben dort ausdrücklich, dass bei einer Offline-Lizenz keine ausgehenden Verbindungen zu Rocket.Chat Cloud oder zum Push Gateway aufgebaut werden dürfen. GitHub

Auch exakt deine Logmeldung wurde mit diesem PR eingebaut, in:

apps/meteor/ee/server/lib/license/startup.t

if (!License.hasOfflineLicense()) {
logged = false;
return;
}

if (!logged) {
SystemLogger.info(
‘Offline license detected: outbound connections to Rocket.Chat Cloud services and the Rocket.Chat Push Gateway are disabled’,
);
logged = true;
}

8.6.1
License installed version=3.0 hash=AkzRP0Qs
→ keine Offline-Meldung

8.7.0
License installed version=3.0 hash=AkzRP0Qs
→ Offline license detected
→ Push Gateway deaktiviert

Der relevante PR ist hier:

Rocket.Chat PR #41148 – no egress for offline licenses

Der nächste interessante Punkt wäre jetzt die Implementierung von License.hasOfflineLicense() selbst in ee/packages/license/src/license.ts. Genau dort entscheidet Rocket.Chat letztlich, warum deine Lizenz als offline eingestuft wird. Ich kann dir diese Stelle als Nächstes ebenfalls herausziehen und mit dir Zeile für Zeile durchgehen.

In ee/packages/license/src/license.ts steht in Rocket.Chat 8.7.0:

public hasOfflineLicense(): boolean {
return this.getLicense()?.information.offline ?? false;
}

Das heißt ganz schlicht: Rocket.Chat schaut in die bereits entschlüsselte und validierte Lizenz und prüft dort dieses Feld:

license.information.offline

Wenn das true ist, liefert hasOfflineLicense() ebenfalls true. Wenn das Feld fehlt, wird durch ?? false auf false zurückgefallen.

8.6.1 hat dieses Merkmal für Cloud/Push offenbar noch nicht ausgewertet. Mit 8.7.0 wurde genau diese Durchsetzung über PR #41148 hinzugefügt. Der Commit heißt passend „feat: no egress for offline licenses“ und verändert 25 Dateien, darunter Push, Cloud-Sync, Marketplace und Lizenz-Startup. GitHub

“information”: {
“offline”: true
}

Fazit:
Meine Lizenz enthält offenbar information.offline = true. Rocket.Chat 8.7.0 wertet dieses Flag neu aus und sperrt dadurch Push und Cloud. Warum enthält eine aktive, online registrierte Starter-Lizenz dieses offline=true überhaupt?

Why is a license with information.offline = true being issued or applied to an active, online-registered Starter workspace?

If this is unintended, does the license need to be reissued without the offline flag, or does the license handling introduced in Rocket.Chat 8.7.0 need to be corrected?

Is my Lizenz not correct ? Must I connect Gabriel Engel :rofl::rofl::rofl::rofl::rofl:

Ich habe meine Lizenz geprüft.

db.rocketchat_settings.findOne(
{_id:“Enterprise_License”},
{value:1}
).value

python3 - <<‘PY’
import base64, json

token = “”“HIER_DEN_VOLLSTÄNDIGEN_RCV3_WERT_EINFÜGEN”“”

jwt = token.removeprefix(“RCV3_”)
parts = jwt.split(“.”)

payload = parts[1]
payload += “=” * (-len(payload) % 4)

data = json.loads(base64.urlsafe_b64decode(payload))

print(“offline =”, data.get(“information”, {}).get(“offline”))
PY

offline = True

And now, Gabriel :rofl::rofl::rofl::rofl::rofl: contact for a new Starter Licence.
The Rockt Support does not talk with me, i have contact it via mail.
I am not an paid customer.

I am the only with an Starter Licenz and offline = True and version 8.7.0 ?

my final check

with key in mongo— OFFLINE CHECK —
information = {‘id’: ‘65fe0fa4edfe320bb89bf884’, ‘autoRenew’: True, ‘createdAt’: ‘2026-08-07T12:39:00.966664057Z’, ‘visualExpiration’: None, ‘notifyAdminsAt’: None, ‘notifyUsersAt’: None, ‘trial’: False, ‘cancellable’: True, ‘offline’: True, ‘grantedBy’: {}, ‘grantedTo’: {}, ‘tags’: [{‘name’: ‘Starter’, ‘color’: ‘#F3BE08’}]}
offline vorhanden = True
offline Wert = True
offline Typ = bool

Damit verhält sich Rocket.Chat 8.7.0 genau entsprechend dem neuen Code:

NO BUG in code but a Starter-Workspace Lizenz with
tags: Starter
offline: True

Additional findings

I was able to identify the exact trigger.

The RCV3 license stored in Enterprise_License is a Starter license, but its signed payload contains:

information.offline = true

The value is a boolean.

The same license (same license hash) is used with both versions:

  • 8.6.1: Push notifications work.
  • 8.7.0: License.hasOfflineLicense() evaluates to true and Rocket.Chat disables Cloud services and the Push Gateway.

The server logs:

License installed, version 3.0, hash AkzRP0Qs
Offline license detected: outbound connections to Rocket.Chat Cloud services and the Rocket.Chat Push Gateway are disabled

The workspace is an active, online-registered Starter workspace and is not air-gapped.

So the remaining question is: Why is an online-registered Starter workspace issued a signed RCV3 license with information.offline = true?

They won’t because you are not a paid customer and reasons I have explained many times before.

Starter is supported as open source. i.e. community support only.

No idea right now. It’s the weekend and you don’t have paid support :man_shrugging:

You also seem to be one of one so far.

(It would also help if you posted in English - that is how they work, and few will understand German)

You are also demonstrating why for critical applications you should never rush, and always test before upgrading.

My Workspace is registered in CloudPortal but i have a starter lizenz with offline:true
I think i need a lizenz with offline:fales an Online-Starter Lizenz

Where ist the Contact in the RocketChat company. Sales ?

Have you tried looking on their website?

Again, you are unlikely to get any response until next week.

I have asked my contact to take a look but again, it might take a while and you will have to be patient.

Thank you for your help.
“Sorry, I know patience isn’t my strong suit.”
The System is running in Version 8.6.1

Stay on 8.6.x until it can be resolved.

They are aware, but I can say no more than that.

Yes, i stay and wait. when you need info, no problem.
nice weekend.