- TypeScript 97.6%
- CSS 1.9%
- HTML 0.5%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| build | ||
| public/icons | ||
| src | ||
| .editorconfig | ||
| .gitignore | ||
| CITATION.cff | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
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 unpacked → dist/chrome |
| Firefox | about:debugging#/runtime/this-firefox → Load Temporary Add-on → dist/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.