futures-rs

Foundation library for async programming in Rust. Defines the core Future, Stream, and Sink traits used across the Rust async ecosystem. Provides executor primitives, join!/select! macros for combining futures, stream/sink adapters, and channel implementations. Most async Rust code depends on futures traits either directly or transitively.

Evaluated Mar 06, 2026 (0d ago) v0.3+
Homepage ↗ Repo ↗ Developer Tools rust async futures streams sink executor combinators
⚙ Agent Friendliness
66
/ 100
Can an agent use this?
🔒 Security
97
/ 100
Is it safe for agents?
⚡ Reliability
89
/ 100
Does it work consistently?

Score Breakdown

⚙ Agent Friendliness

MCP Quality
--
Documentation
82
Error Messages
78
Auth Simplicity
100
Rate Limits
100

🔒 Security

TLS Enforcement
100
Auth Strength
100
Scope Granularity
100
Dep. Hygiene
92
Secret Handling
92

Core async library — no network access, no security concerns.

⚡ Reliability

Uptime/SLA
92
Version Stability
88
Breaking Changes
85
Error Recovery
90
AF Security Reliability

Best When

Writing executor-agnostic async Rust libraries, combining multiple futures, or implementing Stream/Sink traits.

Avoid When

Simple Tokio applications where tokio's built-in utilities cover your needs.

Use Cases

  • Use futures::join! and futures::select! macros to run multiple async operations concurrently in Rust
  • Implement Stream and Sink traits for custom async producers and consumers in Rust libraries
  • Use FutureExt and StreamExt combinators for map, then, flatten, and timeout operations on futures/streams
  • Access futures::channel::mpsc for async-runtime-agnostic bounded and unbounded channel implementations
  • Implement executor-agnostic async libraries that work with Tokio, async-std, or custom executors via futures traits

Not For

  • Tokio-specific async utilities — tokio has its own extensions that build on futures; tokio-stream for stream utilities
  • Simple async applications where tokio's built-in utilities are sufficient — futures crate adds complexity for basic async code
  • Non-Rust languages — futures is Rust-specific; use js Promises or Python asyncio equivalents

Interface

REST API
No
GraphQL
No
gRPC
No
MCP Server
No
SDK
Yes
Webhooks
No

Authentication

Methods: none
OAuth: No Scopes: No

Library — no auth needed.

Pricing

Model: open_source
Free tier: Yes
Requires CC: No

Open source foundational async library for Rust.

Agent Metadata

Pagination
none
Idempotent
Full
Retry Guidance
Not documented

Known Gotchas

  • futures::select! is biased toward the first arm — use futures::select_biased! explicitly if bias is intentional or futures::select! randomly breaks ties
  • Using both futures and tokio StreamExt in the same file requires disambiguating: use futures::StreamExt as _ conflicts with use tokio_stream::StreamExt as _
  • futures::channel::mpsc is not Tokio-aware — use tokio::sync::mpsc for Tokio-integrated backpressure and waker integration
  • Pinning requirements are complex — futures often require Pin<Box<dyn Future>> for type erasure; Box::pin() is the common solution
  • futures 0.3 removed the Executor trait; use tokio::runtime or async-std for execution — futures crate no longer provides an executor
  • FutureExt::shared() allows cloning a future to poll from multiple places — requires the output to be Clone and adds overhead

Alternatives

Full Evaluation Report

Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for futures-rs.

$99

Scores are editorial opinions as of 2026-03-06.

5229
Packages Evaluated
26151
Need Evaluation
173
Need Re-evaluation
Community Powered