FAQ
Does shipdot track my users?
Section titled “Does shipdot track my users?”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.
Can I use it without GitHub?
Section titled “Can I use it without GitHub?”Yes. init, build and validate only read files. Only draft and the Action talk to GitHub.
Is the HTML in entries safe?
Section titled “Is the HTML in entries safe?”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.
What does LLM mode send to the provider?
Section titled “What does LLM mode send to the provider?”Only each pull request’s title and body, plus the instructions. Never code, diffs, file names or author data. See what is sent, exactly.
How big is the widget?
Section titled “How big is the widget?”About 6.5 KB min+gzip with zero dependencies. CI fails the build above 10 KB.
Does it work with server-side rendering?
Section titled “Does it work with server-side rendering?”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.
Which browsers are supported?
Section titled “Which browsers are supported?”Chrome and Edge 123+, Firefox 125+, Safari 17.5+.