Skip to content

FAQ

No. The widget fetches your shipdot.json and nothing else. Read state is a list of entry IDs in the user’s localStorage. There is no analytics, no cookie and no third-party request.

Why is nothing unread when I first open my app?

Section titled “Why is nothing unread when I first open my app?”

By default, a first visit marks everything already published as read, so new users aren’t greeted by your whole history. Use first-visit="show-latest" to keep the newest entry unread, or clear the shipdot:default key in localStorage while testing.

How do I show the panel from my own menu item?

Section titled “How do I show the panel from my own menu item?”

Put your own element inside <ship-dot> (it replaces the bell), or call document.querySelector('ship-dot').open(). See Theming.

Yes. init, build and validate only read files. Only draft and the Action talk to GitHub.

shipdot build renders Markdown and sanitizes it with a strict allowlist (no scripts, iframes, styles, event handlers or javascript: URLs). The widget trusts shipdot.json, so serve it from your own site. Details in ADR 0002.

Only each pull request’s title and body, plus the instructions. Never code, diffs, file names or author data. See what is sent, exactly.

About 6.5 KB min+gzip with zero dependencies. CI fails the build above 10 KB.

Yes. Importing shipdot on the server is a no-op; the element upgrades in the browser. See the Next.js guide.

Can read state follow a user across devices?

Section titled “Can read state follow a user across devices?”

Yes, if your app has user accounts: store the IDs from the shipdot:read event on your server and pass them back with markRead(ids). See Syncing read state across devices.

Can I have two widgets with different feeds?

Section titled “Can I have two widgets with different feeds?”

Yes. Give each one its own storage-key so their read states don’t mix.

Chrome and Edge 123+, Firefox 125+, Safari 17.5+.