| Crates.io | three-word-networking |
| lib.rs | three-word-networking |
| version | 2.3.0 |
| created_at | 2025-07-03 13:49:59.318827+00 |
| updated_at | 2025-07-12 08:10:52.361754+00 |
| description | Convert IP addresses to memorable, family-friendly word groups. IPv4 = 3 words, IPv6 = 6 or 9 words. Perfect reconstruction with human-readable vocabulary. |
| homepage | https://github.com/dirvine/three-word-networking |
| repository | https://github.com/dirvine/three-word-networking |
| max_upload_size | |
| id | 1736259 |
| size | 8,233,853 |
Traditional networking requires us to remember complex strings of numbers. But what if every service on your computer—your website, blog, phone system, video chat, or AI assistant—had its own simple three-word address?
This isn't just about IP addresses; it's about service addresses. Each device can run over 60,000 different services, and each gets its own unique three-word combination. Same computer, different words, different services—all instantly accessible to anyone you choose to share them with.
When you start your node on this peer-to-peer network, you might receive three words like "black.tree.fish". Share these words with friends, and they can instantly connect to you—no technical knowledge required. Whether you're creating a private friend network or joining a global community, those three words are your gateway.
Your computer becomes a Swiss Army knife of services:
Each service runs on the same machine but has its own memorable address. Tell a friend to video call you at "mountain.cat.yes"—that's it. No apps to download, no accounts to create, just direct, secure communication.
Cryptocurrency addresses are notoriously complex: long strings of random characters that are easy to mistype and impossible to remember. With three-word networking, sending Bitcoin becomes as simple as saying "send 2 Bitcoin to monkey.rain.bike".
For the technically curious, this elegantly solves the challenge of transmitting high-entropy data (complex cryptographic addresses) through a low-entropy channel (human speech and memory).
Think of it as a massive, global directory service—like DNS but:
Critics might say "but you can't choose your own words!" Yet look at today's internet: all the good domain names are taken. We're left with misspelled company names, hard-to-pronounce combinations, and domains that have nothing to do with their content.
Three-word networking actually levels the playing field. Everyone gets equally memorable addresses, allocated fairly by the system.
This represents a shift from the corporate-controlled internet back to its peer-to-peer roots. When anyone can run services as easily as sharing three words, we return to an internet of equals—where innovation isn't gatekept by those who can afford domain names and hosting.
While this system starts with individual machines (no load balancing like big tech companies use), it opens doors to entirely new models of distributed computing. Combined with other decentralized network technologies, we might see:
Three-word networking isn't just a technical innovation—it's a return to the internet's original vision: a network where anyone can connect, create, and communicate without permission, without fees, and without complexity.
In a world where we struggle to remember phone numbers, where we rely on corporate platforms for basic communication, and where technical barriers keep billions from fully participating online, three simple words might just be the key to unlocking the internet's true potential.
Welcome to the future of networking. It's as simple as black.tree.fish.
Based on open-source peer-to-peer networking technology including ant-quic and other decentralized protocols currently in development.
System for converting IP addresses and ports into memorable word combinations. IPv4 addresses always produce exactly 3 words with perfect reconstruction, while IPv6 addresses use 2 or 3 groups of 3 words (6 or 9 words total) maintaining the same clean user experience.
🚧 Status: Release Candidate - The core technology is complete and functional. We are currently:
- Actively curating our 65,536-word dictionary to ensure all words are highly readable and memorable
- Finalizing word selection for optimal voice clarity and natural recognition
- Conducting extensive real-world testing and security analysis
- Gathering community feedback on word selection and international usage
GOLD_WORDLIST.txt - Our Premium Word Dictionary: After enormous effort, we've created GOLD_WORDLIST.txt, a meticulously curated dictionary of exactly 65,536 words. This represents countless hours of algorithmic generation, AI-assisted refinement, and human curation. The creation process involved:
- Algorithmic Generation: Initial word lists were created programmatically, but these weren't sufficiently human-readable
- AI-Assisted Refinement: We developed
wordlist_openai_improver.py, a sophisticated script that uses bloom filters to enable AI-based word improvement at scale- Bloom Filter Innovation: Since LLMs can't process 65,536 words at once, we created a bloom filter system that allows the AI to process small batches while checking if suggested replacements already exist in the larger list
- Continuous Improvement: The wordlist is still being refined - it's not finished, but it represents the best balance of readability and coverage we've achieved so far
This approach solves a fundamental challenge: creating a massive dictionary where EVERY word must be readable, pronounceable, and memorable. The Feistel network selects from all 65,536 positions with equal probability, so we can't hide poor words in rarely-used positions.
Future Vision: We intend to test this system in real-world network infrastructure with 100% P2P connectivity. Our plans include integration with a secured DHT (Distributed Hash Table) where our three-word mechanism, combined with reversible hash expansion mechanisms, will create innovative patterns for human-friendly networking UX.
Early adopters and developers are encouraged to test and provide feedback! If you're interested in improving the wordlist, check out
wordlist_openai_improver.pyto see how we use AI to enhance word quality at scale.
# IPv4 addresses: Always exactly 3 words (perfect reconstruction)
192.168.1.10:443 → erase classicist geosynchronous
192.168.1.5:443 → recalibration misallocation dessert
127.0.0.1:8080 → landscapers parachute precedes
# IPv6 addresses: 2 or 3 groups of 3 words (6 or 9 words total)
[::1]:443 → marlins parathyroid fairest hep afflict trailed
[fe80::1]:22 → grunt conchoidal dwindled coaxially chairperson menagerie
[2001:db8::1]:443 → dehydrogenase davenport reassessments hep afflict trailed
Three-Word Networking provides a solution for converting IP addresses into human-memorable word combinations. The system uses a 65,536-word dictionary to achieve perfect encoding for IPv4 addresses in just 3 words, while IPv6 addresses use 2 or 3 groups of 3 words (6 or 9 words total) for consistent user experience.
3wn command with cargo install three-word-networkingThree-Word Networking uses sophisticated bit manipulation and a large dictionary to achieve optimal encoding:
The system uses a carefully curated 65,536-word dictionary optimized for human readability:
| Address Type | Example | Word Count | Time |
|---|---|---|---|
| IPv4 | 192.168.1.1:443 | 3 | <1μs |
| IPv4 | 10.0.0.1:8080 | 3 | <1μs |
| IPv6 Loopback | [::1]:443 | 6 | <2μs |
| IPv6 Link-Local | [fe80::1]:22 | 6 | <2μs |
| IPv6 Global | [2001:db8::1]:443 | 6 | <2μs |
| IPv6 Complex | [2001:db8:85a3::8a2e:370:7334]:8080 | 9 | <2μs |
# Install the 3wn CLI tool
cargo install three-word-networking
# Convert IP to words
3wn 192.168.1.1:443
# Output: gelsemium readdressed colophons
# Convert words back to IP
3wn "gelsemium readdressed colophons"
# Output: 192.168.1.1:443
# Also supports backward compatibility with dots
3wn gelsemium.readdressed.colophons
# Output: 192.168.1.1:443
Add to your Cargo.toml:
[dependencies]
three-word-networking = "2.0.0"
# IPv4 addresses (always 3 words - perfect reconstruction)
3wn 192.168.1.10:443
# erase classicist geosynchronous
3wn 192.168.1.5:443
# recalibration misallocation dessert
# IPv6 addresses (6 or 9 words)
3wn "[::1]:443"
# marlins parathyroid fairest hep afflict trailed
3wn "[2001:db8::1]:443"
# dehydrogenase davenport reassessments hep afflict trailed
# Reverse conversion
3wn "erase classicist geosynchronous"
# 192.168.1.10:443
3wn "marlins parathyroid fairest hep afflict trailed"
# [::1]:443
# Verbose mode shows details
3wn -v 192.168.1.10:443
# Input: 192.168.1.10:443
# Type: IPv4
# Words: erase classicist geosynchronous
# Count: 3 words
# Method: Perfect reconstruction (0% data loss)
# Note: IPv4 addresses always use exactly 3 words
use three_word_networking::ThreeWordAdaptiveEncoder;
let encoder = ThreeWordAdaptiveEncoder::new()?;
// Encode IPv4 (always 3 words, perfect reconstruction)
let words = encoder.encode("192.168.1.10:443")?;
assert_eq!(words, "erase classicist geosynchronous");
// Decode back to exact address
let decoded = encoder.decode("erase classicist geosynchronous")?;
assert_eq!(decoded, "192.168.1.10:443");
// IPv6 examples (6 or 9 words)
let ipv6_words = encoder.encode("[::1]:443")?;
assert_eq!(ipv6_words, "marlins parathyroid fairest hep afflict trailed"); // 6 words
let decoded_ipv6 = encoder.decode(&ipv6_words)?;
assert_eq!(decoded_ipv6, "[::1]:443");
// Word count depends on address type
// IPv4: Always exactly 3 words
// IPv6: 6 or 9 words (2 or 3 groups of 3)
assert_eq!(words.split(' ').count(), 3); // IPv4
assert_eq!(ipv6_words.split(' ').count(), 6); // IPv6
use three_word_networking::ThreeWordAdaptiveEncoder;
let encoder = ThreeWordAdaptiveEncoder::new()?;
// IPv4 perfect reconstruction details
let ipv4_words = encoder.encode("192.168.1.10:443")?;
println!("IPv4: {} -> {}", "192.168.1.10:443", ipv4_words);
// IPv4: 192.168.1.10:443 -> erase classicist geosynchronous
// IPv6 adaptive compression
let ipv6_words = encoder.encode("[fe80::1]:22")?;
println!("IPv6: {} -> {}", "[fe80::1]:22", ipv6_words);
// IPv6: [fe80::1]:22 -> grunt conchoidal dwindled coaxially chairperson menagerie
// Simple format for all addresses
// IPv4: 3 words (erase classicist geosynchronous)
// IPv6: 6 or 9 words
// Integration with existing code
fn get_server_words(addr: &str) -> Result<String, Box<dyn std::error::Error>> {
let encoder = ThreeWordAdaptiveEncoder::new()?;
Ok(encoder.encode(addr)?)
}
Three-word addresses are optimized for verbal communication:
"What's your server address?"
"erase classicist geosynchronous" (192.168.1.10:443)
"Can you share the IPv6 endpoint?"
"marlins parathyroid fairest hep afflict trailed" ([::1]:443) - 2 groups of 3 words
"I need the development server"
"recalibration misallocation dessert" (192.168.1.5:443)
Real-world scenarios:
- Phone support: "Connect to erase classicist geosynchronous"
- Team meetings: "The API is at recalibration misallocation dessert"
- Documentation: "Default: landscapers parachute precedes"
- Voice assistants: "Connect me to erase classicist geosynchronous"
# Server configuration files
api_server = "erase classicist geosynchronous" # 192.168.1.10:443
db_primary = "recalibration misallocation dessert" # 192.168.1.5:443
db_replica = "landscapers parachute precedes" # 127.0.0.1:8080
Support: "Please connect to erase classicist geosynchronous"
User: "Is that E-R-A-S-E?"
Support: "Yes, erase classicist geosynchronous"
User: "Connected successfully!"
// Device announces its address verbally
device.announce("Device ready at recalibration misallocation dessert");
Alert: Connection lost to landscapers parachute precedes (127.0.0.1:8080)
Action: Reconnecting to landscapers parachute precedes...
Status: Restored connection to landscapers parachute precedes
use three_word_networking::ThreeWordNetworking;
use warp::Filter;
#[tokio::main]
async fn main() {
let twn = ThreeWordNetworking::new().unwrap();
let addr: SocketAddr = "127.0.0.1:3030".parse().unwrap();
let words = twn.encode(addr).unwrap();
println!("Server running at: {}", words);
println!("Tell users to connect to: {}", words.replace('.', " "));
// Your web service here
warp::serve(routes)
.run(addr)
.await;
}
# config.toml
[servers]
primary = "erase classicist geosynchronous" # 192.168.1.10:443
backup = "recalibration misallocation dessert" # 192.168.1.5:443
[database]
master = "erase classicist geosynchronous" # 192.168.1.10:5432
replica = "recalibration misallocation dessert" # 192.168.1.5:5432
// Convert addresses in logs for readability
log::info!("Connected to {}", twn.encode(peer_addr)?);
// Output: Connected to erase classicist geosynchronous
// Parse from logs
if let Ok(addr) = twn.decode("erase classicist geosynchronous") {
reconnect(addr);
}
// Main API interface
pub struct ThreeWordNetworking { ... }
// Methods
fn encode<T: Into<AddressInput>>(&self, input: T) -> Result<String>
fn decode(&self, words: &str) -> Result<SocketAddr>
fn word_count<T: Into<AddressInput>>(&self, input: T) -> Result<usize>
fn is_valid_words(&self, words: &str) -> bool
fn analyze<T: Into<AddressInput>>(&self, input: T) -> Result<EncodingInfo>
// Input types supported
pub enum AddressInput {
String(String), // "192.168.1.1:443"
SocketAddr(SocketAddr),
IpAddr(IpAddr), // Port defaults to 0
}
3wn command for instant conversions🔧 Dictionary Optimization: Fine-tuning the 65,536-word list for:
🔧 Security Analysis:
🔧 Real-World Testing:
🔧 Internationalization:
We welcome contributions! Areas of interest:
See CONTRIBUTING.md for guidelines.
Licensed under either of:
at your option.
Three-Word Networking: Making IP addresses human-friendly. IPv4 in 3 words. IPv6 in groups of 3. Always.