Skip to main content

Tokenade

Portable browser sessions. Export cookies (and storage) from a real browser into a .tokenade file, then launch or proxy on another machine as that session — with TLS fingerprint matching where it matters.

PyPI version Python versions License: MIT PyPI - Downloads CI Code style: black

pip install tokenade

Not a Multilogin / AdsPower replacement. Tokenade is session portability (export → package → inject / proxy), not a full anti-detect browser product. Stealth is best-effort and measured — never “undetectable.”


Why Tokenade?

You need… Tokenade
Move a logged-in session to another device Export → .tokenade → launch or proxy
Keep cookies + localStorage (e.g. Telegram Web) Full / ecosystem packaging
Match donor TLS on proxied traffic CDP proxy + curl-cffi
Encrypt session files at rest AES-256-GCM (encrypt / export password)
Extend behavior per site Site-handler plugins (--plugin google-handler)

Self-hosted CLI. No cloud account required for the core loop.


Quick start

1. Install

pip install tokenade
# Python 3.10+

Optional extras: tokenade[tui], tokenade[linux], tokenade[enterprise] (LDAP — experimental).

2. Install site plugins + quit the donor browser

tokenade plugin install google-handler   # ships site_config.json
tokenade export --list-handlers

Fully quit the browser first (see Best practices). A running browser locks the cookie database.

tokenade export --list-profiles

# Domains / critical cookies come from the plugin's site_config.json
tokenade export --browser-name firefox --plugin google-handler -o gmail.tokenade

3. Use the session

Launch (inject into a clean profile — preferred for interactive use):

tokenade launch \
  --browser brave \
  --session gmail.tokenade \
  --plugin google-handler \
  --url "https://mail.google.com/mail/u/0/#inbox" \
  --profile-dir /tmp/tokenade-brave-clean \
  --port 9223 --visible

Omit --profile-dir and Tokenade still uses a clean temp profile for session inject.

Proxy (CDP reverse proxy with optional TLS impersonation):

tokenade proxy -s gmail.tokenade
# Open the local GUI / URL printed by the CLI (default port 9222)

Encrypt sensitive jars before sharing or storing:

tokenade encrypt -s gmail.tokenade -o gmail.enc.tokenade
# or: tokenade export ... --encrypt-password '…'

Full command list: tokenade --help and tokenade <command> -h. Deep dives live under docs/.


What works (evidence-based)

Capability Status Notes
Cookie export (Chrome / Firefox / Brave / Edge) Works SQLite extraction; quit browser first
Launch + inject (Gmail, multi-browser) Works Prefer clean --profile-dir
Google: Firefox/Brave/Edge donor → non-Chrome target Works Multi-browser & multi-device verified (2026-07-10)
Google → Chrome / Chromium target Fails Account chooser / signed out; avoid Google-owned browsers
CDP proxy + session inject (Gmail, ChatGPT) Works Confirmed logged-in in real runs
localStorage (e.g. Telegram Web) Works Use --full / storage flags when needed
AES-256-GCM session encryption Works Core encryptor, PBKDF2
Session health scoring Works Heuristic on cookies — not live auth proof
TLS fingerprint matching (curl-cffi) Works Core dependency; use thoughtfully with cf_clearance
Hard bot labs / Cloudflare Turnstile Often fails Do not market as Grade A bypass
Enterprise LDAP / fleet / K8s generators Code present Not production-hardened product surfaces

GitHub/Discord/Reddit from session-only cookies often fail when the donor never wrote durable auth cookies to disk.


Core workflows

┌──────────────┐     export      ┌────────────────┐     launch / proxy
│ Donor browser│ ──────────────► │ .tokenade file │ ──────────────────► Target
│ (logged in)  │  cookies (+LS) │  portable jar  │  clean profile or CDP
└──────────────┘                 └────────────────┘
  1. Export — read cookies (and optional storage) from a real profile; package as .tokenade.
  2. Transfer — copy the file (optionally encrypted) to another machine or process.
  3. Replaylaunch (system browser + inject) or proxy (TLS-matched reverse proxy).

Google recipe (verified): donor not Chrome → target Brave / Edge / Firefoxclean --profile-dir → open the product URL (e.g. mail.google.com), not accounts.google.com after inject. Same jar can run on multiple non-Chrome browsers/devices concurrently. Vivaldi is code-supported but not battle-tested.


Best practices

These matter more than flag trivia. Follow them and most “broken session” reports go away.

Export

  1. Fully quit the donor browser before export. Chrome/Firefox/Brave hold exclusive locks on the cookies SQLite DB. “Quit” means no residual process in Task Manager / Activity Monitor / pgrep. Otherwise you get database is locked or a partial/stale dump.
  2. Export only the domains you need (--domains or a site plugin). Smaller jars are easier to reason about and safer to share.
  3. Prefer a stable donor for high-value accounts. For Google, prefer Firefox / Brave / Edge — not Google Chrome — so cookies are portable.
  4. Use --list-profiles when multiple profiles exist; export the one that is actually logged in.
  5. Encrypt before sharing (encrypt or --encrypt-password). Treat .tokenade like a password dump.
  6. Need storage (Telegram, some SPAs)? Use --full or --extract-local-storage instead of cookies-only.

Launch & inject

  1. Always use a clean --profile-dir for tests and portability. Injecting into a dirty system profile mixes old cookies, risk signals, and false failures.
  2. Navigate to the product URL, not the IdP bounce page, after inject (e.g. inbox URL, not accounts.google.com).
  3. Google: avoid Chrome-family targets (Chrome, Chromium, Canary). Non-Chrome targets work; Chrome clean profiles still fail in practice.
  4. One CDP port per concurrent browser (--port). Parallel launches need distinct ports and profile dirs.
  5. Site plugins (--plugin google-handler) keep domain filters and launch URLs consistent between export and launch.

Proxy & ops

  1. Prefer 127.0.0.1 binding for local proxy; do not expose session proxies to the network without deliberate network design.
  2. TLS fingerprint / --fingerprint: useful for many anti-bot stacks; can interfere with some cf_clearance flows — verify per site.
  3. Refresh instead of re-login when cookies age: tokenade refresh-browser or tokenade accounts refresh for batches.
  4. Health is a hint, not a login proof. tokenade health scores cookie heuristics; confirm with a real page load when it matters.
  5. Do not commit live .tokenade files to git. Add them to .gitignore; rotate if leaked.

Security habits

  1. Session files = full account access for cookie lifetime. Store encrypted; limit filesystem permissions.
  2. Prefer short-lived copies on shared machines; delete profile dirs under /tmp when done.
  3. For automation, pin Python and document the donor browser version you validated against.

Installation (dev)

git clone https://github.com/mihir0209/tokenade.git
cd tokenade
pip install -e ".[dev]"
playwright install chromium --with-deps
pytest   # suite under tokenade/tests/

CloakBrowser (stealth Chromium backend) is a core dependency; its binary downloads on first use when available.


Plugins

Site handlers and other plugins customize domains, critical cookies, and launch behavior without forking core:

tokenade export --list-handlers
tokenade plugin list
tokenade launch -s gmail.tokenade --plugin google-handler --browser brave \
  --profile-dir /tmp/tokenade-brave-clean --visible

Authoring guide: docs/PLUGIN_DEVELOPMENT.md. Examples: examples/plugins/.


Security (short)

  • Treat every .tokenade as credentials.
  • Use encryption at rest; prefer encrypt-on-export for transfers.
  • Default proxy bind is loopback; SSRF protections block private/loopback targets on outbound proxy paths.
  • Report security issues privately when possible; see docs/SECURITY.md.

Documentation

Doc Contents
docs/TUTORIAL_GETTING_STARTED.md Gmail→Brave golden path + Windows
docs/TROUBLESHOOTING.md Locked DB, decrypt errors, proxy issues
docs/SITE_CONFIGS.md Site configs live in plugins (site_config.json)
docs/API.md Programmatic / server API
docs/ARCHITECTURE.md Package layout and design
docs/PLUGIN_DEVELOPMENT.md Plugin API
USE-CASES.md Scenarios and comparisons
docs/CONTRIBUTING.md Contribution guidelines

CLI discovery beats a second manual: tokenade --help.


Project stance

  • Honesty over hype — battle-tested vs “code exists” stay separated in docs and messaging.
  • Session portability first — plugins, stealth, fleet tooling support that core; they are not the product by themselves.
  • Evidence — Google multi-device non-Chrome recipe verified 2026-07-10; see project notes under .agent/ for campaign details (not required for end users).

License

MIT — Copyright (c) 2026 MiHiR

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tokenade-1.1.0.tar.gz (827.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tokenade-1.1.0-py3-none-any.whl (951.1 kB view details)

Uploaded Python 3

File details

Details for the file tokenade-1.1.0.tar.gz.

File metadata

  • Download URL: tokenade-1.1.0.tar.gz
  • Upload date:
  • Size: 827.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for tokenade-1.1.0.tar.gz
Algorithm Hash digest
SHA256 65b993d3902cf4dc1e9f01c2959b8507e5a9630f2ef016d9d90e1c6c2e30c563
MD5 1675e53e5339ac21c402d2bf6718c385
BLAKE2b-256 c50a699b9fd1e469b0e0e5c80aa5595ea24137f07129a0c73322827ae0a15ecf

See more details on using hashes here.

File details

Details for the file tokenade-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: tokenade-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 951.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for tokenade-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0de610332cf1cb7f351ff4982652d9adcfeafaa322557889ab70d0b2f1ab125
MD5 cc841ba8ced03642ce2f78cca77d3a6e
BLAKE2b-256 b33a818b9ba97db2b27ed477c8891fbbff65219e088506cc5ed5eefad27874fb

See more details on using hashes here.

Release history Release notifications | RSS feed

1.3.0

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.94

2 files

1.1.93

2 files

1.1.92

2 files

1.1.91

2 files

1.1.90

2 files

1.1.80

2 files

1.1.77

2 files

1.1.76

2 files

1.1.75

2 files

1.1.74

2 files

1.1.72

2 files

1.1.71

2 files

1.1.70

2 files

1.1.65

1 file

1.1.64

2 files

1.1.63

2 files

1.1.62

2 files

1.1.61

2 files

1.1.60

2 files

1.1.53

2 files

1.1.52

2 files

1.1.51

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

This release

1.1.0 This release

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page