announcements.json is the content source for the announcements panel in the RocketRide VS Code extension. The extension fetches this file at startup from raw.githubusercontent.com, caches it locally for an hour, and falls back to a bundled defaults list if the fetch fails.
Hosting an announcement here means it shows up in every running extension within an hour of merge, with no release cycle required and no admin UI to build. Updates are gated by CODEOWNERS: any change to announcements.json requires PR review from a listed owner.
id— pick something descriptive and stable across edits. The extension remembers which ids the user dismissed; reusing an oldidafter the user dismissed it means they won't see the new content. Bump to a newidif the message materially changes.title— short, plain text (~60 chars). The leading glyph is a Markdown image referencing a file inassets/(e.g.) — add visuals that way, not with emoji.body— keep it to two sentences at most and no emoji (emoji read as cheap in-product). Inline Markdown is supported (**bold**, links,`code`); if you want a graphic, commit it underassets/and reference it with Markdown image syntax rather than inlining an emoji.schema_version— current is1. Old extension builds ignore fields they don't recognize; bumpingschema_versionsignals a structural change (e.g., adding a required field).priority—urgentfloats to the top and uses red styling; reserve for outages and security advisories.warningis yellow (degraded service, deprecation notices).infois blue (releases, events, feature highlights). Default if absent:info.valid_from/valid_until— let you queue future announcements (drop the JSON into a PR ahead of time) and auto-expire stale ones. Both optional.link— if set, the extension renders a "Learn more" button that opens the URL externally. Keep links to canonical sources (docs, blog posts, GitHub issues).dismissable— defaulttrue. Set tofalseonly for legal/compliance notices that must stay visible.
- Open a PR that edits
announcements.jsononly. - Make sure the JSON is valid (lint with
jq . announcements.jsonlocally; CI will reject malformed JSON). - Wait for review + merge from a CODEOWNER. The change is live within an hour (extension cache TTL).
- To take an announcement down immediately: set
valid_untilto a past timestamp, or delete the entry. The extension will stop showing it on its next refresh. - To edit copy: change
title/bodyin place. If the change is substantive enough that a previously-dismissing user should see it again, bump theid.
- Independent release cadence: announcement content shouldn't gate on the engine release cycle (
rocketride-server) — most announcements need to ship faster than that, and engine releases shouldn't be blocked on copy edits. - Public read access: published from
raw.githubusercontent.com, so the extension fetches it without auth and GitHub handles global CDN caching. - Audit trail + review gate: git history shows who said what, when, and why; CODEOWNERS keeps the change set small.
- The fetch URL is
https://raw.githubusercontent.com/rocketride-org/announcements/main/announcements.json— pinned tomainbranch. - Raw content is served via GitHub's CDN; updates propagate within ~5 minutes globally.
- Extension cache TTL is 1 hour; users see new announcements within an hour of merge, sooner on extension restart.
- No secrets, no auth, no infrastructure to maintain — by design.
{ "schema_version": 1, "announcements": [ { "id": "string", // stable identifier; clients dedupe + remember "dismissed" state by id "title": "string", // shown in the panel header, ~60 chars "body": "string", // shown below the title; inline Markdown, ≤2 sentences, no emoji "priority": "info|warning|urgent", // controls color + ordering "valid_from": "YYYY-MM-DDTHH:MM:SSZ", // optional, ISO-8601 UTC; if absent, valid immediately "valid_until": "YYYY-MM-DDTHH:MM:SSZ", // optional; if absent, valid indefinitely "link": "string", // optional, full URL shown as a "Learn more" button "dismissable": true // if false, panel cannot be dismissed by user } ] }