A TUI tool to search for EVM chains, manage favorites securely, and select RPC URLs.
Project description
EVM RPC Picker
A powerful TUI (Terminal User Interface) tool to search for EVM chains and manage your RPC URLs securely. It helps you quickly select and set the ETH_RPC_URL environment variable with the fastest available RPC, whether it's public, private, or project-specific.
Features
- Instant Search: Filter over 1000+ chains by name or Chain ID.
- Latency Checks: Real-time ping (using
eth_blockNumber) to find the most responsive RPC. - Custom RPC Management: Add, edit, and manage your own RPC endpoints for any chain.
- Secure Storage: Encrypt sensitive RPC URLs and store API keys securely in your system's Keyring.
- Smart Context Detection: Automatically detects networks and URLs defined in your
foundry.tomlorhardhat.config.js. - Favorites System:
- Project Level: Store favorites in
.rpc-picker.tomlwithin your repository. - Global Level: Store favorites in your global user config.
- Favorite RPCs: Bookmark both public chains and your own custom RPCs to easily access and test them from a dedicated unified dashboard.
- Project Level: Store favorites in
- Filtering:
- Toggle between Mainnet, Testnet, or All.
- Quickly filter to show only your Favorite chains.
- Notes: Attach notes to your custom RPCs — stored as plain text (public) or AES-encrypted and portable inside the config file (private, when password-protected).
- Sensitive Mode: Toggle
Ctrl + Sto instantly mask all sensitive URLs and notes for screen sharing or streaming. Also available via--privacy/-pCLI flag.
Installation
Ensure you have uv installed.
# Run directly without installation
uvx evm-rpc-picker
One-Off Command Execution
If you only want to select an RPC for a single command without modifying your current shell's ETH_RPC_URL environment variable, you can pass the output of evm-rpc-picker directly as a subshell argument:
# Run cast block-number with a freshly selected RPC
cast block-number --rpc-url $(uvx evm-rpc-picker)
Shell Integration
Add the following function to your .bashrc or .zshrc to easily export the selected RPC:
pick-rpc() {
local rpc=$(uvx evm-rpc-picker)
[ -n "$rpc" ] && export ETH_RPC_URL="$rpc"
}
After restarting your shell, simply run pick-rpc to pick and export the RPC.
Since ETH_RPC_URL is now exported to your environment, all Foundry commands (cast, forge) will automatically pick it up without requiring manual --rpc-url parameters:
# Query the current block number using cast
cast block-number
Python Usage
You can also use evm-rpc-picker as a module in your own Python scripts:
from evm_rpc_picker import pick_rpc
# This will open the TUI
rpc_url = pick_rpc()
if rpc_url:
print(f"Selected RPC: {rpc_url}")
Keyboard Shortcuts
Main Screen
| Key | Action |
|---|---|
Tab |
Switch Focus (Table ↔ Personal RPCs ↔ Env Status) |
Enter |
Select highlighted chain to see RPCs |
Ctrl + F |
Filter Favorites toggle |
Ctrl + T |
Filter Network Type (All ↔ Mainnet ↔ Testnet) |
Ctrl + L |
Toggle Local Favorite (Project level) |
Ctrl + G |
Toggle Global Favorite (Global level) |
Ctrl + R |
Refresh chain data from network |
Ctrl + E |
Use Current ETH_RPC_URL (select current ENV and exit) |
Ctrl + U |
Personal RPC URLs (manage and select custom endpoints) |
Ctrl + B |
Favorite RPCs (view all bookmarked public and custom endpoints) |
Ctrl + S |
Toggle Sensitive Mode (mask all URLs and notes for screen sharing) |
Chainlist.org chain's RPC Selection Screen
| Key | Action |
|---|---|
Enter |
Select RPC and exit |
Esc |
Back to main screen |
Ctrl + R |
Refresh latencies |
Ctrl + L |
Toggle Local Favorite (Project level) |
Ctrl + G |
Toggle Global Favorite (Global level) |
Personal RPC URLs Screen
| Key | Action |
|---|---|
Enter |
Select RPC and exit |
Esc |
Back to main screen |
a |
Add custom RPC |
e |
Edit highlighted RPC |
Delete |
Delete highlighted RPC |
Ctrl + V |
Paste & Add (paste URL from clipboard into Add RPC modal) |
Ctrl + B |
Toggle Favorite (bookmark/unbookmark the selected custom RPC) |
Favorite RPCs Screen
| Key | Action |
|---|---|
Enter |
Select RPC and exit |
Esc |
Back to main screen |
Ctrl + R |
Refresh latencies |
Ctrl + L |
Toggle Local Favorite (Project level) |
Ctrl + G |
Toggle Global Favorite (Global level) |
Add/Edit Custom RPC Modal
| Key | Action |
|---|---|
Ctrl + S |
Save changes (when editing) |
Ctrl + G |
Add Globally (when adding) |
Ctrl + L |
Add Locally (when adding) |
Esc |
Cancel |
Sensitive Mode (Streamer / Over-Shoulder Protection)
Sensitive Mode lets you instantly hide all sensitive RPC URLs and notes without closing the application — useful when sharing your screen, streaming, or recording.
Activation
| Method | Command |
|---|---|
| Runtime toggle | Ctrl + S on the main screen |
| CLI flag | evm-rpc-picker --privacy or evm-rpc-picker -p |
What gets masked
| Element | Normal display | Sensitive Mode |
|---|---|---|
| URL with API key | https://mainnet.infura.io/v3/mykey |
https://mainnet.infura.io/•••••••• |
| URL with credentials | https://user:pass@rpc.example.com/key |
https://••••••••@rpc.example.com/•••••••• |
| RPC note | my personal note |
•••••••• |
The host/domain remains visible so you can still identify the provider. When Sensitive Mode is active, the header subtitle changes to [🙈] Sensitive Mode (displayed in red).
Note: Sensitive Mode is display-only. Selecting an RPC still returns the real URL to the shell.
Configuration
- Global Config:
~/.config/evm-rpc-picker/config.toml - Project Config:
.rpc-picker.tomlin your project root. - Cache: Data from
chainlist.orgis cached for 24 hours in~/.cache/evm-rpc-picker/chains.json.
Secure Storage & Encryption
Zero-Prompt AES-GCM Hybrid Encryption
The application features a secure, industrial-grade hybrid encryption system designed to protect your private RPC endpoints and personal notes without ruining the developer experience:
- Unencrypted Custom RPCs: Standard custom RPCs store their URLs and notes in plain-text inside the
config.tomlor.rpc-picker.tomlconfiguration files. - Password-Protected (Encrypted) Custom RPCs:
- If password protection is enabled, the entire URL and the note are individually encrypted using AES-256-GCM (via
cryptography). - The encrypted payloads are saved directly inside the TOML configuration file as inline tables (
url_encryptedandnote_encrypted). This makes your configuration fully portable across different machines. - To prevent having to type your password repeatedly, the password is automatically registered in your system's secure credential vault (macOS Keychain, Windows Credential Manager, or Linux Secret Service via
keyring). - Zero-Prompt UX: When selecting, editing, or performing background latency checks on an encrypted RPC, the app silently queries the keyring. If the credentials are present, it unlocks the endpoint instantly without prompting the user. If the credentials are missing, a secure password prompt modal will ask you for it and automatically persist it back to the keyring.
- If password protection is enabled, the entire URL and the note are individually encrypted using AES-256-GCM (via
Security Visual Indicators
- Lock Icon
[🔒]: Displayed in front of password-protected RPCs in both the Personal RPCs and Favorite RPCs dashboards. - Privacy Masking (
Ctrl + S): When Sensitive/Privacy Mode is active:- For unlocked encrypted RPCs, the decrypted URL and note are masked display-only (e.g., displaying
[🔒] https://mainnet.infura.io/••••••••and••••••••). - For locked encrypted RPCs, both values remain completely hidden behind the secure
[🔒] Lockedplaceholder.
- For unlocked encrypted RPCs, the decrypted URL and note are masked display-only (e.g., displaying
Development
git clone https://github.com/radeksvarz/evm-rpc-picker.git
cd evm-rpc-picker
uv sync
# Run normally
uv run evm-rpc-picker
Hot Reloading (TUI Development)
For TUI development with hot reloading, open two terminals.
Terminal 1 (Console output):
uv run textual console
Terminal 2 (App with hot reload):
uv run textual run --dev evm_rpc_picker.tui:ChainRPCPicker
Created with 🍻 by BeerFi Prague web3 builders community | Source and updates
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evm_rpc_picker-0.1.1.tar.gz.
File metadata
- Download URL: evm_rpc_picker-0.1.1.tar.gz
- Upload date:
- Size: 44.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7c1af6b54355cdb364370cb66aa667ab427f35857aceb83f6b8840f4cf73c26
|
|
| MD5 |
7fc17484ac3b3dca9d2e2ce0b305ac8f
|
|
| BLAKE2b-256 |
3ea6a6bbeabfd6471d1c892a52c536a3716bafa6ee05187f43de6048c39aa68a
|
File details
Details for the file evm_rpc_picker-0.1.1-py3-none-any.whl.
File metadata
- Download URL: evm_rpc_picker-0.1.1-py3-none-any.whl
- Upload date:
- Size: 50.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
836840913bc815e7f1cd38eb2f62e8f78776d457793b0976aca5e8233453388a
|
|
| MD5 |
5974ba765abe3e3a21a6bb04ac69ebb3
|
|
| BLAKE2b-256 |
fba1ff427a2971f6e31200208484a26dd44a968f8ddcf2eb5a2981a53c25a35c
|