
netstack.fm uReq with Martin Algesten
Mar 10, 2026
Martin Algesten, a Rust developer who created ureq and contributes to Sans I/O projects, joins to discuss ureq’s origins and its shift toward protocol correctness. He talks about Sans-IO design, the ureq-proto refactor and transport-agnostic implementations. The conversation covers header parsing quirks, sync vs async trade-offs, proxies, DNS, and why ureq keeps sensible defaults while enabling extensibility.
AI Snips
Chapters
Transcript
Episode notes
Why Martin Started Ureq As A Simple Sync Client
- Martin built ureq originally as a sync-first, very simple HTTP client because he came from Node.js and wanted ergonomics similar to superagent.
- He learned Rust while writing ureq starting around 2017 and intentionally kept APIs simple (strings, slices) to lower the entry barrier.
Start Simple Then Harden With Real Tests
- Start simple and iterate: ship a working client first, then harden for spec compliance when real incompatibilities appear.
- Use real-world testing (e.g., crawling many sites) to discover obscure edge cases like weird header values.
Headers Can Be Non UTF-8 So Strings Aren't Enough
- HTTP header values may include byte ranges that don't map to UTF-8 strings, so strict compliance requires non-string header representations.
- Martin adjusted ureq to handle such headers after encountering them in large-scale crawling tests.
