Disposable emails, instant OTPs, automated account creation. No wait, no hassle.
A fast, single-binary toolkit for temporary emails, OTP capture, and account automation — available as both a TUI dashboard and a REST API server. Built in Rust.
- Instant email creation — generate disposable emails on 12 supported domains
- Real-time OTP detection — auto-extracts verification codes from incoming mail
- TUI Dashboard — interactive terminal UI with grid table, scrolling, color-coded status
- REST API server — headless mode for bot/Telegram/webhook integration
- ChatGPT signup automation — with TLS fingerprint spoofing (Chrome 131)
- Devin signup automation — automated account creation
- Session export — saves session JSON after signup, compatible with SesWi and Cookie Editor
- Batch signup — create up to 50 accounts concurrently (5 workers)
- Per-addon blacklist — separate blacklists for ChatGPT & Devin, auto-managed
- Configurable — JSON config at
~/.framo/.config - Update checker — auto-checks GitHub for new releases
- Clipboard integration — copy OTP or email with a single keystroke
- Cross-platform — Windows, Linux, macOS, Docker
apple.edu.pl mailo.edu.pl nik.edu.pl itmo.edu.pl mailer.edu.pl
imail.edu.vn gddp2018.edu.vn jakarta.io.vn newdelhi.io.vn
mailer.io.vn newyork.io.vn dulieu.io.vn
Download from Releases — available for Windows, Linux (x86_64, aarch64), and macOS (x86_64, aarch64).
| Platform | Requirements |
|---|---|
| All | Rust 1.85+ / Cargo 1.85+ |
| Windows | Visual Studio Build Tools (MSVC), CMake, NASM, LLVM |
| Linux | build-essential, cmake, nasm, libclang-dev, pkg-config |
| macOS | Xcode Command Line Tools, cmake, nasm (via Homebrew) |
CMake, NASM, and LLVM are required for BoringSSL (used by wreq for TLS fingerprint emulation).
# Install build dependencies
winget install Kitware.CMake
winget install NASM.NASM
winget install LLVM.LLVM
# Build
cargo build --release
# Binary: target\release\framo.exesudo apt update
sudo apt install -y build-essential cmake nasm libclang-dev pkg-config
cargo build --release
# Binary: target/release/framobrew install cmake nasm
cargo build --release
# Binary: target/release/framodocker build -t framo .
# TUI mode
docker run --rm -it framo
# API mode
docker run --rm -p 3700:3700 framo --apiframo # Launch TUI dashboard (default)
framo --api # Start REST API server on port 3700
framo --api --port 8080 # Custom port
framo --version # Print version
framo --help # Print usage| Key | Action |
|---|---|
a |
Add email (apple.edu.pl) |
n |
Add custom email (prompted) |
g |
Generate random emails (prompted count) |
h |
Devin signup automation |
j |
ChatGPT signup automation |
x |
Delete selected row |
r |
Refresh selected email |
> |
View inbox messages |
< |
Back to email list |
c |
Copy OTP to clipboard |
e |
Copy email to clipboard |
d |
Download all emails |
↑↓ |
Navigate |
q |
Quit |
Start the server:
framo --api| Method | Endpoint | Description |
|---|---|---|
GET |
/api/health |
Health check + version |
GET |
/api/update |
Check for updates on GitHub |
GET |
/api/config |
View current config |
POST |
/api/email |
Create temp email |
GET |
/api/email/:email/inbox |
Fetch inbox messages |
GET |
/api/email/:email/otp |
Extract OTP (add ?wait=true to poll) |
POST |
/api/signup/chatgpt |
Create ChatGPT account |
POST |
/api/signup/devin |
Create Devin account |
POST |
/api/signup/chatgpt/batch |
Batch ChatGPT signup (max 50) |
POST |
/api/signup/devin/batch |
Batch Devin signup (max 50) |
GET |
/api/blacklist |
View blacklisted domains |
POST |
/api/blacklist |
Add domain to blacklist |
DELETE |
/api/blacklist/:domain |
Remove from blacklist |
# Create a random email
curl -X POST http://localhost:3700/api/email \
-H "Content-Type: application/json" \
-d '{}'
# Create email with specific domain
curl -X POST http://localhost:3700/api/email \
-H "Content-Type: application/json" \
-d '{"domain": "mailer.io.vn"}'
# Get inbox
curl http://localhost:3700/api/email/user@mailer.io.vn/inbox
# Get OTP (instant)
curl http://localhost:3700/api/email/user@mailer.io.vn/otp
# Get OTP (poll up to 6 attempts)
curl "http://localhost:3700/api/email/user@mailer.io.vn/otp?wait=true&attempts=6"
# ChatGPT signup
curl -X POST http://localhost:3700/api/signup/chatgpt \
-H "Content-Type: application/json" \
-d '{"password": "MyPassword123!"}'
# ChatGPT signup with specific email
curl -X POST http://localhost:3700/api/signup/chatgpt \
-H "Content-Type: application/json" \
-d '{"email": "user@mailer.io.vn", "password": "MyPassword123!"}'
# Batch ChatGPT signup (5 accounts)
curl -X POST http://localhost:3700/api/signup/chatgpt/batch \
-H "Content-Type: application/json" \
-d '{"count": 5, "password": "MyPassword123!"}'
# Batch Devin signup (3 accounts)
curl -X POST http://localhost:3700/api/signup/devin/batch \
-H "Content-Type: application/json" \
-d '{"count": 3}'
# Check for updates
curl http://localhost:3700/api/updateConfig file: ~/.framo/.config (JSON, auto-created on first run)
{
"default_domain": "apple.edu.pl",
"poll_interval_secs": 3,
"otp_max_attempts": 6,
"default_password": "",
"domains": ["imail.edu.vn", "..."],
"chatgpt_blacklisted_domains": [],
"devin_blacklisted_domains": [],
"output_dir": "~/Downloads/framo",
"github_repo": "risuncode/framo"
}| Key | Description | Default |
|---|---|---|
default_domain |
Domain for quick-add (a key) |
apple.edu.pl |
poll_interval_secs |
Seconds between OTP poll attempts | 3 |
otp_max_attempts |
Max OTP poll retries | 6 |
default_password |
Pre-fill password for ChatGPT signup | "" |
domains |
Available email domains | 12 domains |
chatgpt_blacklisted_domains |
Auto-managed ChatGPT blacklist | known domains |
devin_blacklisted_domains |
Auto-managed Devin blacklist | [] |
output_dir |
Where to save output files | ~/Downloads/framo |
github_repo |
GitHub repo for update checker | risuncode/framo |
~/.framo/
├── .config # persistent JSON config
└── logs.log # structured log (append mode)
~/Downloads/framo/ (or configured output_dir)
├── tempmail/ # downloaded email files
├── chatgpt/
│ ├── gpt-accounts.txt # combined credentials (email|password)
│ └── Accountz-session/
│ └── chatgpt-*.json # per-account session JSON
└── devin/
├── devin-accounts.txt # combined accounts (email|name)
└── Accountz-session/
└── devin-*.json # per-account session JSON
After every successful ChatGPT signup, FRAMO automatically saves a session JSON file alongside the credentials.
This session file is fully compatible with:
- SesWi Session Manager — import/export browser sessions, backup & restore accounts
- Cookie Editor — browser extension for cookie import/export
- FRAMO creates a ChatGPT account (email + password)
- Cookies from
chatgpt.comare captured and exported as JSON - Two outputs are saved:
chatgpt/gpt-accounts.txt— combined credentials (email|password)chatgpt/Accountz-session/chatgpt-{namemail}.json— per-account session JSON
- Easy migration — move accounts between browsers/machines by importing session JSON
- Backup & restore — save sessions for later use without re-login
- Bulk account management — create 50 accounts, import all sessions via SesWi
FRAMO maintains separate blacklists per addon (ChatGPT and Devin).
Domains are automatically blacklisted when:
registration_disallowed— service rejects the domain- OTP timeout — 6 poll attempts with no OTP received
Blacklisted domains are:
- Saved per-addon to
~/.framo/.config(chatgpt_blacklisted_domains,devin_blacklisted_domains) - Skipped in
random_domain_for()selection - Fast-fail checked inside each worker after semaphore acquire (always fresh)
To un-blacklist, edit ~/.framo/.config manually or use the API:
curl -X DELETE http://localhost:3700/api/blacklist/apple.edu.plsrc/
main.rs # entry point, CLI parsing, mode routing
config.rs # AppConfig, blacklist, update checker
models.rs # EmailAccount, EmailMessage, InboxResponse
browser.rs # HTTP session with cookies
provider.rs # imail.edu.vn Livewire API
utils.rs # OTP extraction, clipboard, helpers
api/
mod.rs # REST API routes + handlers (axum)
dashboard/
mod.rs # TUI state + event loop
table.rs # grid/table renderer
views.rs # sidebar helpers
actions.rs # action constants
addon/
mod.rs # addon registry
common.rs # shared: uuid_v4, poll_otp
chatgpt/mod.rs # ChatGPT signup flow (wreq + Chrome TLS)
devin/mod.rs # Devin signup flow
| Crate | Purpose |
|---|---|
tokio |
Async runtime |
axum |
REST API framework |
clap |
CLI argument parsing |
wreq + wreq-util |
HTTP client with TLS fingerprint emulation (BoringSSL) |
ratatui + crossterm |
TUI rendering |
serde + serde_json |
Serialization |
tower-http |
CORS middleware |
tracing |
Structured logging |
regex |
OTP extraction |
arboard |
Clipboard |
dirs |
Cross-platform directory detection |
This project is licensed under the GNU General Public License v3.0.