No description
  • TypeScript 97.6%
  • CSS 1.9%
  • HTML 0.5%
Find a file
theolagache c9a203fb47
Some checks failed
Release / release (push) Failing after 2m49s
update
2026-08-05 07:24:12 +02:00
.forgejo/workflows fixes 2026-08-02 21:49:00 +02:00
build fixes 2026-08-02 21:49:00 +02:00
public/icons base 2026-08-02 21:12:21 +02:00
src update 2026-08-05 07:24:12 +02:00
.editorconfig base 2026-08-02 21:12:21 +02:00
.gitignore base 2026-08-02 21:12:21 +02:00
CITATION.cff fixes 2026-08-02 21:49:00 +02:00
CONTRIBUTING.md fixes 2026-08-02 21:49:00 +02:00
LICENSE base 2026-08-02 21:12:21 +02:00
package.json update 2026-08-05 07:24:12 +02:00
pnpm-lock.yaml base 2026-08-02 21:12:21 +02:00
README.md fixes 2026-08-02 21:49:00 +02:00
tsconfig.json base 2026-08-02 21:12:21 +02:00
tsconfig.node.json base 2026-08-02 21:12:21 +02:00

Alice for Chrome and Firefox

Email aliases from the page you are signing up on

Beta software. This extension is a client for Alice, the self-hosted email alias manager. You need your own Alice instance — there is no hosted service.

Features

  • A button in the email field — one click creates an alias and types it in
  • Or right-click any field and pick Generate an Alice alias
  • From the toolbar — generate, copy, or fill the form in front of you
  • Tagged with the site it was created on, so a leak points at whoever received it
  • Manage your aliases — see the ones this site already has, disable or delete any of them, search the whole list
  • Sign in with your Alice account, no key to copy by hand
  • One instance, one permission — the extension talks to your server and nothing else

Install

No store listing yet. Build it, then load it unpacked.

pnpm install
pnpm build
Browser How
Chrome chrome://extensions → Developer mode → Load unpackeddist/chrome
Firefox about:debugging#/runtime/this-firefoxLoad Temporary Add-ondist/firefox/manifest.json

Connecting

Open the popup, enter your instance URL, and click Sign in with Alice. Alice opens in a tab where you approve the code shown, and the extension gets its own client key — the same kind of credential Bitwarden or a script would use.

The key appears in Alice under Clients as AliceConnect (Chrome) or (Firefox), badged Extension. Revoking it there cuts this browser off.

If this browser is not signed in to Alice, the options page also accepts a client key you paste yourself, created from Clients → Add client. Either way the key is stored locally and never synced to your browser account.

Pairing uses the device authorization grant with the client id aliceconnect-web, which your instance must allow — Alice lists it next to the mobile app's since 2026.08.

Permissions

Permission Why
storage your instance URL, the key, your preferences
activeTab read the site to tag the alias and fill its form, when you click the extension or its menu entry
scripting inject the field-filling script into that tab, on demand
contextMenus the Generate an Alice alias entry
alarms keeps a pairing alive while it waits for your approval
your instance's host requested when you connect
all sites optional, only if you turn the in-field button on

The button in email fields is the one feature that needs to run on pages before you ask for anything, so it is off by default. Turning it on requests the access and registers the script; turning it off unregisters it and gives the permission back. Everything else runs only after a click of yours.

No telemetry, no analytics, no server but yours.

Development

pnpm watch                    # rebuild dist/chrome on change
pnpm watch --target firefox
pnpm typecheck
pnpm package                  # zip both targets into web-ext-artifacts/
build/         manifest, Vite passes, packaging
public/icons/  generated from Alice's logo
src/
  background/  the only context that talks to Alice
  content/     injected in pages: finds the email field, fills it, draws the button
  popup/       generate, copy, fill, manage
  options/     connection, client key, preferences
  components/  shared UI
  hooks/
  lib/         API client, device flow, storage, messaging, permissions
  styles/

lib/, background/ and content/ are plain TypeScript; the two pages are React and never touch fetch. Everything holding the key runs in the background.

Pages are ordinary Vite HTML entries. The background and content scripts cannot be — a content script must be a classic self-contained file — so each is built on its own under a fixed name. build/build.ts runs the three passes and writes the per-browser manifest.

License

MIT — see LICENSE. Contributions welcome, see CONTRIBUTING.md.