Beatmap Discussion Tools for osu! — browser extension
Privacy policy
Last updated 9 October 2026
This policy covers the Beatmap Discussion Tools for osu!browser extension (“the extension”). The extension is a free, non-commercial tool made by Nostril, a member of the osu!taiko mapping community. It is not affiliated with, endorsed by or sponsored by ppy Pty Ltd or by s-ul.eu. “osu!” is a trademark of ppy Pty Ltd.
In short
- The extension has no analytics, no telemetry, no advertising and no remote code. Nothing about you or your use of it is sent to the developer.
- Everything it stores stays in your browser profile.
- Data leaves your browser only when a feature you use needs it: a file you drop into a discussion box is uploaded to s-ul.eu, and the draft bridge, once you pair it, syncs your unpublished mod drafts between your own devices.
Where the extension runs
Its scripts run only on osu! beatmap discussion pages (https://osu.ppy.sh/beatmapsets/…) and, for the timestamp hand-off, on n.ot.e (https://note.nostril.io). It does not read or change any other website.
What it stores on your device
The extension keeps the following in its own extension storage, which your browser deletes when you uninstall it:
- Your settings: which features are on, and your formatting hotkeys.
- Your s-ul.eu API key, if you enter one.
- Your draft-bridge pairing code, if you enter one.
- Draft-bridge working state: copies of your unpublished mod drafts for the beatmapsets you have opened, which of them were delivered to the osu! review box, which were deleted, and a random installation id. The extension’s hidden sync page also keeps a copy of your drafts room in the browser’s IndexedDB.
- Short-lived status messages between the popup, the background script and the extension’s own pages, discarded when the browser closes.
The popup’s Reset draft sync data button deletes the draft-bridge state; its Reset button clears the settings.
What it reads on the osu! page
All of this is processed on your device:
- The text you type in discussion boxes, to format it, preview it and insert upload links.
- The unpublished review draft that the osu! website keeps in the page’s local storage, to sync it.
- The beatmapset data the osu! website embeds in the page, including the set’s published discussions, to match drafts to posts you have already published and timestamps to the discussions they belong to.
- Your osu! user id, from the page header, to name your private drafts room.
Uploads to s-ul.eu
When you drag, drop or paste a file into a discussion box while the uploader is on, the extension sends that file, together with your s-ul.eu API key, to s-ul.eu’s upload API. The file is stored in your s-ul.eu account and s-ul.eu returns a public link, which the extension inserts into your post. What s-ul.eu does with uploaded files is governed by s-ul.eu’s own terms and privacy policy. The extension uploads only what you drop or paste yourself, and only to s-ul.eu.
The draft bridge
The bridge is off until you save a pairing code. When it is on, each osu! discussion tab joins a private drafts roomshared by the devices you paired: your n.ot.e sessions and your other browsers running this extension. The room is named after your osu! user id plus a hash of your pairing code, and the code is the room’s password. Anyone who has the code can join your room, so treat it as a secret: the popup masks it, and a pairing link contains it.
What travels through the room:
- Your unpublished mod drafts for the beatmapset open in that tab: their type, difficulty, timestamp and text; the order of the blocks in your review box; and deletions.
- A presence record: whether the device is n.ot.e or the extension, its protocol number and its version.
- While you hover a posted timestamp, that timestamp, so a paired desktop n.ot.e can mark it on its timeline; and a jump request when you choose to open a timestamp there.
How it travels: paired devices connect to each other directly over WebRTC, which is encrypted end to end between them. To find each other they use the signaling server n.ot.e uses (wss://y-webrtc-signaling.fly.dev), which sees your IP address, the room name (which includes your osu! user id) and signaling messages encrypted with your pairing code; it never receives your drafts. WebRTC also contacts public STUN servers to learn your public IP address. No server stores anything from the room; the copies live only on the paired devices.
Hand-off to n.ot.e
Open in n.ot.e opens note.nostril.io with the beatmapset, difficulty and timestamp in the address. If a n.ot.e tab is already open, the extension asks that tab to seek there instead of opening a new one, and hovering a posted timestamp tells open n.ot.e tabs which timestamp you are hovering. Nothing else is exchanged with n.ot.e; what n.ot.e itself stores is described by n.ot.e, not by this policy.
What the extension does not do
- No analytics, telemetry or crash reporting.
- No cookies, and no reading of your browsing history.
- No advertising, and no selling or sharing of data with anyone.
- No remote code: every script runs from the extension package you installed.
Permissions, explained
storage— the settings and working state listed above.https://osu.ppy.sh/*— the beatmap discussion pages the extension works on.https://s-ul.eu/*— uploading the files you drop, on your behalf.https://note.nostril.io/*— finding an open n.ot.e tab to hand a timestamp to, and raising it.
Changes
Changes to this policy are posted on this page, with the date above updated. A change to what the extension sends anywhere is also noted in that version’s store listing.
Contact
Nostril, on osu!: osu.ppy.sh/users/11479122.