frontpage.fyi Firefox extension#
This repository provides a Firefox WebExtension that lets you share the current tab to frontpage.fyi with minimal effort.
Links are submitted by creating fyi.frontpage.feed.post records on your ATProto account, the same mechanism the official Frontpage site uses.
ℹ️ This repository is hosted on tangled (PRs, issues) and GitHub (CI/CD, releases).
Features#
- Pop-up form that auto-fills the active tab’s title and URL.
- Title length indicator (120 characters, matching the Frontpage UI).
- Background service worker handles ATProto login, token refresh, and record creation.
- Options page for storing your handle, app password, and optional PDS override.
- Convenience links to open frontpage.fyi or the options page from the pop-up.
Prerequisites#
- An ATProto account that Frontpage can read.
- An app password for that account (create one at https://bsky.app/settings/app-passwords or via your own PDS).
Install a packaged build#
- Visit the Releases page and download the latest
frontpage-submitter-<version>.xpi(signed) or.zip(unsigned) asset. - In Firefox, open
about:addons, click the gear icon, and choose Install Add-on From File…. - Select the downloaded
.xpi(preferred) or.zipto complete the installation and approve the permissions prompt.
Configure credentials#
- Open the add-on pop-up and press the gear icon (or use
about:addons→ Preferences). - Enter your handle and app password. Supply a PDS URL only if you run a custom server.
- Click Save credentials. A success message confirms that the session tokens are stored locally.
- Use Log out at any time to remove stored tokens (you can also revoke the app password server-side).
Submit a link#
- Browse to the page you want to share.
- Open the Frontpage pop-up; the title and URL are pre-filled.
- Adjust the text if necessary and click Post to Frontpage.
- On success, the pop-up reports the record URI returned by
com.atproto.repo.createRecord.
Implementation notes#
- The background worker discovers the user’s PDS by resolving the handle (
com.atproto.identity.resolveHandle+ PLC lookup). - Sessions are refreshed automatically via
com.atproto.server.refreshSessionwhen the access JWT expires. - All data stays in
browser.storage.local; nothing is transmitted to third-party services beyond the ATProto endpoints. - Maximum lengths follow the current Frontpage limits (120 characters for the title, 2048 for URLs).
Development tips#
- Inspect background/service-worker logs from
about:debugging→ Inspect. - The UI scripts (
popup.jsandoptions.js) log to the DevTools console attached to their respective documents. - When packaging for distribution, zip the contents of the
extension/directory (see workflow below). - Licensed under the Apache License 2.0.
Development install (temporary)#
- Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on… and choose
manifest.jsoninside theextension/directory. - Pin the “Frontpage” toolbar button if you want quick access.
This method is ideal while iterating; Firefox forgets the add-on on restart.
Self-distribution pipeline#
This repository includes .github/workflows/package-extension.yml which builds (and optionally signs) the add-on using web-ext.
- Configure
AMO_JWT_ISSUERandAMO_JWT_SECRETrepository secrets with your AMO API credentials if you want automatic signing.
Without the secrets, the workflow still produces an unsigned ZIP you can download. - Trigger the workflow manually (
Actions→ package-extension → Run workflow). - Download the artifacts:
frontpage-extension-unsignedcontains the ZIP thatweb-ext buildgenerates.frontpage-extension-signed(only when secrets are present) contains the signed.xpifrom AMO for self-hosting.
- Each run also publishes a GitHub Release (tagged
v<version>-<run-id>) that ships the same ZIP/XPI assets, so you can share a permanent download link.- Mozilla requires every signed upload to have a unique version number. Bump
versioninextension/manifest.jsonbefore rerunning the workflow if you need a new signed package.
- Mozilla requires every signed upload to have a unique version number. Bump
These artifacts can be hosted directly for self-distribution as described in the Mozilla documentation.
Tangled mirror#
The mirror-to-tangled.yml workflow pushes every commit on main to Tangled, a federated Git hosting platform built on ATProto.
Browse the mirror at https://tangled.org/@galiglobal.com/frontpage_firefox_plugin.
Add a deploy key with write access as the TANGLED_DEPLOY_KEY repository secret so the mirror stays up to date.