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.
Ask episode
AI Snips
Chapters
Transcript
Episode notes
ANECDOTE

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.
ADVICE

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.
INSIGHT

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.
Get the Snipd Podcast app to discover more snips from this episode
Get the app