Cited markdown report
Every job returns a synthesized report with inline citations that map back to the exact source array, so your agent can trace any claim.
POST /v1/research
Send one question, get back a cited report your LLM can actually use.
Give your agent a research question and let webclaw do the legwork. It searches the web, scrapes the sources, extracts findings, and synthesizes everything into a markdown report with inline citations and confidence-rated facts. Built in Rust, it runs many search and analyze cycles in the background so your agent stays free to do other work.
Every job returns a synthesized report with inline citations that map back to the exact source array, so your agent can trace any claim.
Each extracted fact carries a high, medium, or low confidence rating based on source authority, so your model knows what to trust.
It runs several search and analyze cycles across many pages, not a single fetch, then condenses the result to roughly 90% fewer tokens than raw HTML.
Use normal mode for a fast 5 to 8k word report, or flip deep mode on for wider source coverage and a long-form synthesis.
01
POST a research question with optional depth, source, and topic hints, and get back a job ID right away.
02
webclaw searches the web, picks the strongest sources, and scrapes each one, handling JavaScript rendering and bot protection automatically.
03
It pulls confidence-rated findings from every page, then synthesizes them into a single report with inline citations.
04
Poll GET /v1/research/{id} until status is completed, then read the full report, sources, and findings from the response.
Classification: Open Research Report Date: August 2025 Scope: Rust Async Runtime Ecosystem, Language-Level Developments, Tooling, and Comparative Runtime Analysis Primary Sources: 25 verified sources, 127 extracted findings across 3 research rounds
Rust's async ecosystem is undergoing its most significant maturation phase since the stabilization of async/await syntax, with the Rust Project designating "Bring the Async Rust experience closer to parity with sync Rust" as one of three flagship goals for the first half of 2025 [5]. Foundational capabilities including async closures (stabilized in 2024H2), experimental async Drop support, generator infrastructure via a builtin iter! macro, and pin ergonomics improvements collectively signal a shift from ad hoc community workarounds toward first-class language support [5]. Tokio remains the de facto standard runtime—powering infrastructure-level networking software across databases, proxies, and backend services—and its continued performance leadership is supported by architectural refinements including hierarchical timing wheels and work-stealing executor improvements [6][7]. Significant structural challenges persist: the ecosystem remains fragmented across runtime boundaries, the async book remains incomplete, Return Type Notation (RTN) progress has been slowed by compiler type-system technical debt, and the 2025H1 async parity goal has not advanced as rapidly as planned due to scope and resource constraints [5][9]. Nonetheless, the directional trajectory—toward async functions in traits subsuming the async-trait crate, reduced "function coloring" friction, and improved ergonomics—is clear and accelerating.
Rust 1.0 was released in 2015, establishing the language's foundational commitments to memory safety without garbage collection, zero-cost abstractions, and "fearless concurrency" enforced at compile time rather than discovered at runtime [1][18]. Since 1.0, four major capability additions have dominated the language's evolution: the try operator (?), const generics, generic associated types (GATs), and async/await. Notably, three of these four are classified as "effects"—a category of language feature that introduces both expressive power and interoperability complexity [2].
Rust has been adopted in operating systems, web browsers, embedded systems, and, most relevant to this report, high-performance networking infrastructure [13][19]. The language's ownership and type systems are the primary mechanism for managing both memory safety and concurrency problems, with the borrow checker catching entire classes of concurrency errors at compile time [18].
Rust's approach to async programming is distinctive. Before version 1.0, the language included green threads and coroutines; these were removed to preserve zero-cost abstractions and C-level performance characteristics [6]. The result is an async model with no implicit runtime: programs must explicitly choose and configure an executor. This design decision—choosing zero-cost abstraction over runtime convenience—has had profound downstream consequences for the ecosystem.
Rust's async model operates through the Future trait. When a future is dropped, its cleanup logic runs automatically through the Drop trait, which is how cancellation is implemented [6]. This approach to cancellation is both powerful and a source of subtle bugs, particularly when resources must be cleaned up asynchronously—a gap that the ongoing async Drop work is designed to address [5].
The Rust async runtime landscape is dominated by a small number of production-grade runtimes, with a long tail of specialized or experimental alternatives:
Future trait to async/await. It powers a substantial fraction of Rust-based networking infrastructure globally.The Rust Project operates through a system of working groups, project goals, and roadmaps. The 2024 roadmap identified four high-level goals: more precise analyses with less rigamarole, easier self-expression, improved async support, and more usable dyn Trait [1]. In 2025H1, the project is working toward 40 project goals, with 3 designated as flagship goals—of which async parity is one [5]. The governance structure means that async improvements must navigate multiple teams (language team, compiler team, library team) and are subject to the RFC process, which creates both rigor and latency in feature delivery.
The most significant 2024H2 async language milestone was the stabilization of async closures [5]. Previously, closures that needed to be async required workarounds, typically involving async move blocks passed to higher-order functions, with non-obvious lifetime implications. Stable async closures reduce boilerplate and align the closure and function experience more closely.
One of the longest-standing gaps in async Rust is the inability to declare async fn directly in trait definitions. RFC #2739, opened to centralize discussion on this feature, identified it as "the absolute highest priority extension after [the] initial MVP proposal" [25]. The feature is technically blocked by the need for generic associated types (GATs) and existentials in traits [25].
Current 2025H1 work is advancing this front in two ways:
async-trait crate [5]. The async-trait crate currently has broad adoption but introduces heap allocation (boxing futures) and other runtime costs; a language-native solution would eliminate these.Synchronous Drop is insufficient for resources that require async cleanup (e.g., flushing a network buffer before closing a socket). An early-stage experiment to support async Drop in the compiler was landed in 2025H1 [5]. This is currently compiler-internal experimentation and not yet exposed as a stable language feature. The conceptual challenge is that Drop runs in a synchronous context in Rust's current model; threading async semantics through the drop mechanism requires deep type system and compiler work.
Pin<&mut T> is a core primitive for async programming in Rust—it is required to safely poll futures. However, working with pinned references is notoriously ergonomic-unfriendly, requiring explicit pinning, reborrowing, and careful lifetime annotations. An experimental implementation of autoreborrowing for pinned references was landed in 2025H1, alongside other pin ergonomics improvements [5]. While still experimental, this addresses a consistent developer complaint about the mechanical friction of working with low-level async primitives.
iter! MacroGenerators are a natural complement to async/await—they share the same underlying coroutine machinery and are essential for ergonomic stream/iterator implementations. In 2025H1, productive conversations occurred with the language team on generators, and an experimental implementation of a builtin iter! macro implementing unpinned generators was landed [5]. This represents a meaningful step toward first-class generator support, though it remains experimental.
Return Type Notation is needed to express bounds on the futures returned by async trait methods, particularly for Send bounds. Progress on RTN has been slowed by technical debt in the Rust compiler's type system [5]. This is a blocking issue for some production use cases where multi-threaded runtimes require Send futures but trait definitions cannot currently express this constraint cleanly.
The "function coloring" problem—the incompatibility between async and sync code that forces developers to write two versions of every utility function—is fundamentally a polymorphism problem [11]. In Rust's current model, an async fn and a regular fn are different types, and you cannot abstract over the difference without trait bounds, boxing, or code duplication.
This manifests concretely: popular crates like reqwest require Tokio as a runtime dependency [9]. Libraries must choose a runtime at authoring time, and changing that decision later breaks downstream consumers.
The Rust Effects Initiative is working on a more principled solution: extending Rust's effect system to support effect polymorphism. Rust has shipped an effect system since version 1.0—the try operator (?), const generics, GATs, and async/await are all manifestations of it [2]. The initiative aims to make effects (including async) first-class, composable, and usable in generic contexts.
A presentation at RustConf 2023 (September 13th, Albuquerque, New Mexico) titled "Extending Rust's Effect System" outlined this direction [2]. The vision includes the ability to write code that is generic over whether it is async or sync—eliminating the need for duplicated sync/async API surfaces.
A proposal for "Async by Default" (inverse coloring) was discussed on Rust Internals, suggesting that the coloring problem could be resolved by making async the default and treating synchronous execution as an optimization or special case [11]. This represents a more radical rearchitecting of the model and is not currently an active language team proposal, but it reflects the ongoing community debate about the right long-term solution.
Tokio has become the de facto asynchronous runtime for high-performance networking in Rust [6]. The TokioConf milestone—the first conference dedicated to the Tokio ecosystem, held in Portland, Oregon, marking ten years since Tokio was first announced—is indicative of Tokio's centrality to the Rust async story [6]. The runtime powers backend services, databases, and proxies at infrastructure scale.
The dominance is driven by ecosystem momentum as much as technical merit [9]. Once reqwest, sqlx, and other foundational crates chose Tokio, the network effects made Tokio the path of least resistance for nearly all new projects.
A key technical difference between Tokio and alternatives: Tokio futures and I/O resources can only run within Tokio itself, because the executor/waker is tightly coupled to Tokio's I/O APIs [8]. This coupling delivers performance but creates portability limitations. Tokio's synchronization primitives (channels, mutexes) are usable in any async environment, but its timers and I/O resources are not.
Tokio requires the runtime to be started and configured explicitly—a design that gives operators control but creates friction for quick experimentation [8]. The #[tokio::main] macro provides a convenience wrapper.
Async-std was designed as an alternative runtime closer to the Rust standard library, aiming to minimize the cognitive distance between sync and async programming [9]. It isolates FFI to I/O APIs to its own thread, allowing futures to run on executors other than async-std itself, including Tokio's [8]. Async-std's resources also implicitly start a runtime when first used, reducing explicit configuration requirements [8].
However, async-std's development has lost momentum. A GitHub issue opened October 2, 2021 (issue #992) explicitly questions why one would choose async-std over Tokio [10]. Known issues include spawning a new thread for every I/O request (issue #731), missing Windows API support, and stuck tasks during file drop operations [9]. With ~1,754 public crate dependents [9], async-std retains a non-trivial footprint but is no longer actively competitive.
Using async-std resources in a Tokio-based project creates two async runtimes simultaneously, incurring "considerable performance cost" [8]. This interoperability failure is a concrete manifestation of the runtime fragmentation problem.
The async WG has recognized executor coupling as a problem that breaks the ecosystem into silos [9]. Consequences include:
reqwest create hard runtime dependencies [9]This fragmentation is a root cause of the ecosystem's difficulty in being navigated by newcomers and contributes to the 3–6 month onboarding time reported by companies building large Rust teams [1].
The official async Rust book remains in draft. Concepts including cancellation semantics, timeouts, and FuturesUnordered have not yet been covered [9]. This documentation gap is significant because cancellation in Rust async is non-obvious—it is implemented through Drop, and the interaction between cancellation and partial async operations is a frequent source of bugs [6].
A recurring developer experience issue is the use of blocking calls (e.g., thread::sleep()) in async contexts, which stalls the executor's thread pool. A proposal to make thread::sleep() panic in async contexts was discussed in Rust Internals [15]. The consensus leaned toward using lints (compile-time warnings) rather than runtime panics, as panics would be too disruptive to existing code bases [15]. Some async runtimes are not optimized for blocking operations and lack built-in detection of this pattern.
When async fn is used in traits, a fundamental tension arises: the function definition must be valid for all types, including those whose resulting future is not Send [14]. Current async fn definitions return impl Future without specifying Send, and auto traits automatically determine whether the result should be Send based on captured data [14]. In trait definitions, this becomes problematic because the trait must express the bound statically.
The niko_matsakis-led discussion on this topic explored the population of developers who want non-Send futures, noting tension between design options that serve single-threaded executors versus multi-threaded ones [14]. This remains an unresolved ergonomic and semantic challenge.
A project goal for 2025H2 addresses ref-counting ergonomics—a problem closely tied to async programming. Working with Arc<T> data requires extensive clone() calls when spawning Tokio tasks, a pattern described by Dioxus Labs as "demoralizing" when managing structs with nearly 30 fields of Arc-wrapped data [24]. Projects including Dioxus, Sycamore, and Leptos have restructured their APIs around implicit runtime arenas specifically to avoid forcing users to call clone [24]. A proposed RFC would make lightweight cloning automatic for ref-counted data structures [24].
A 2022 ACM study (published at ASE '22) established that Rust incurs an average 1.77x performance overhead compared to C [19]. This overhead is primarily due to runtime checks inserted by the compiler and language design restrictions. When those checks are disabled and restrictions loosened, Rust performance is statistically indistinguishable from C [19]. For async workloads, this baseline matters because async runtimes add scheduling overhead on top of language-level costs.
The following performance data for Tokio 2.0 is sourced from a dev.to post and should be treated as low-confidence estimates pending independent verification:
These figures have medium-to-low confidence and are included for directional reference, not as authoritative benchmarks.
A research finding of increasing relevance to the Rust async ecosystem is the emergence of LLM-assisted development for Rust codebases. The Rust-SWE-bench benchmark comprises 500 real-world, repository-level software engineering tasks from 34 diverse Rust repositories [13]. Key findings:
Given that 83% of Rust developers report difficulty with the language and 42% worry about time-to-productivity [13], AI assistance tools are emerging as a structural response to Rust's learning curve, with async semantics being among the hardest areas to master.
| Feature | Status | Notes | Source |
|---|---|---|---|
async/await syntax | Stable | Introduced pre-1.0, stable since 2019 | [2] |
| Async closures | Stable (2024H2) | Stabilized as part of 2024H2 roadmap | [5] |
| Async fn in traits (AFIT) | Partial/Experimental | Requires GATs; dynosaur crate as bridge | [5][25] |
| Dynamic dispatch for async traits | Experimental | dynosaur v0.3.0 proc-macro | [5] |
| Async Drop | Early Experiment | Compiler-internal; not exposed to users | [5] |
| Pin autoreborrowing | Experimental | Compiler experiment landed 2025H1 | [5] |
Generators / iter! macro | Experimental | Builtin iter! macro for unpinned generators | [5] |
| Return Type Notation (RTN) | Slowed | Blocked by compiler type-system technical debt | [5] |
| Effect polymorphism | Design phase | Effects Initiative active; no RFC yet | [2] |
Send bounds on trait async fn | Unresolved | Active language team discussion | [14] |
| Dimension | Tokio | async-std | Notes |
|---|---|---|---|
| Public crate dependents | Dominant (exact figure not reported) | ~1,754 [9] | Tokio likely orders of magnitude larger |
| Runtime startup | Explicit | Implicit (on first use) | [8] |
| I/O executor coupling | Tight (Tokio-only) | Isolated to own thread | [8] |
| Cross-runtime interop | Limited for I/O primitives | Better for pure futures | [8] |
| API philosophy | Diverges from std where needed | Mirrors std API surface | [8] |
| Active development | High | Low/stalled | [10] |
| Conference ecosystem | TokioConf (first dedicated conf) | None | [6] |
| Known open issues | Not reported | Thread-per-I/O, Windows gaps, file drop bugs | [9] |
| Dual-runtime cost | N/A | Considerable performance cost when mixed with Tokio | [8] |
| Flagship Goal | Status | Key Blockers | Source |
|---|---|---|---|
| Async Rust parity with sync Rust | Behind plan | Scope too large for one person; RTN technical debt | [5] |
| (Second flagship goal – not async) | Not detailed in scope | — | [5] |
| (Third flagship goal – not async) | Not detailed in scope | — | [5] |
Note: Only the async parity goal is within scope of this report. The other two flagship goals are not detailed in the findings reviewed.
| Priority | Goal | Async Relevance |
|---|---|---|
| 1 | More precise analyses, less rigamarole | High — borrow checker improvements affect async lifetime handling |
| 2 | Express yourself more easily | High — async closures, generators, effect polymorphism |
| 3 | Improve async support | Direct |
| 4 | Make dyn Trait more usable | High — dynamic dispatch for async trait objects |
Source: [1]
| Metric | Value | Confidence | Source |
|---|---|---|---|
| Rust vs. C average overhead | 1.77x | High (peer-reviewed ACM ASE '22) | [19] |
| Rust vs. C with checks disabled | ~1.0x (indistinguishable) | High | [19] |
| Tokio 2.0 timer CPU reduction | ~40% vs. prior version | Low (unverified dev.to) | [7] |
| Tokio 2.0 vs. Tokio 1.x (RPS) | +12% (echo service) | Low | [7] |
| Tokio 2.0 vs. Tokio 1.x (tail latency) | −7ms | Low | [7] |
| Tokio vs. Actix-web (throughput) | +18% | Low | [7] |
| sqlx query speed (Tokio 2.0 vs. 1.x) | +15% | Low | [7] |
| Single-threaded RPS (Tokio 2.0) | >10M req/s, sub-µs latency | Low | [7] |
| Metric | Value | Confidence | Source |
|---|---|---|---|
| % of Rust developers finding Rust difficult | 83% | Medium | [13] |
| % worried about time-to-productivity | 42% | Medium | [13] |
| Typical onboarding time (large teams) | 3–6 months | High | [1] |
| RustForger resolution rate (Rust-SWE-bench) | 28.6% | High | [13] |
| ReAct agent resolution rate | 21.2% | High | [13] |
| RustForger improvement over baseline | 34.9% | High | [13] |
| Unique tasks solved by RustForger only | 46 | High | [13] |
| Date | Event | Source |
|---|---|---|
| Pre-2015 | Green threads and coroutines removed from Rust | [6] |
| 2015 | Rust 1.0 released | [1] |
| 2015 | Aaron Turon publishes "Zero-cost futures in Rust" | [9] |
| ~2016 | Mio (epoll bindings) → Future trait → Tokio evolution | [6] |
| 2019 | async/await syntax stabilized in Rust | [2] |
| Sept 13, 2023 | "Extending Rust's Effect System" presented at RustConf, Albuquerque | [2] |
| Oct 2, 2021 | async-std issue #992 opened questioning differentiation from Tokio | [10] |
| 2024H2 | Async closures stabilized | [5] |
| 2024H2 | Generator design space exploration begins | [5] |
| 2025H1 | Async Drop compiler experiment landed | [5] |
| 2025H1 | Pin autoreborrowing experiment landed | [5] |
| 2025H1 | iter! macro experiment landed | [5] |
| 2025H1 | Dynosaur v0.3.0 released | [5] |
| 2026 (projected) | TokioConf (10-year Tokio anniversary) | [6] |
The following scenarios project the state of Rust async by end of 2026, based on current trajectory, stated project goals, and identified blockers. These are qualitative projections, not quantitative forecasts.
Assumptions: Current resource levels continue; RTN technical debt is addressed but slowly; async fn in traits reaches stability; the async book is partially completed.
Expected outcomes by end of 2026:
async-trait for the majority of use cases. The dynosaur crate serves as a bridge for dynamic dispatch during the transition period. This eliminates one of the most commonly cited async ergonomics gaps.Drop trait requires careful design work that is likely to take longer than the 2025H1 goal period anticipated.iter! macro or equivalent), but async generators remain experimental. This partially closes the gap between Rust and languages with first-class generator support.async-trait, feature flags, and code duplication as mitigations.Assumptions: Rust Project secures additional resources dedicated to async (analogous to the Ferrocene/safety-critical push that has attracted corporate investment); RTN technical debt is resolved with a focused compiler sprint; community coordination improves.
Expected outcomes by end of 2026:
Send bound control), async Drop, generators, and pin ergonomics all reach stable status within 2025H2–2026H1.async/await stabilization.Send bound ergonomics are solved through RTN or an equivalent mechanism, eliminating a major source of async trait complexity in multi-threaded applications.Assumptions: Key personnel continue to be spread too thin; RFC processes introduce multi-year delays for contentious features; the function coloring debate remains unresolved and community energy fragments.
Expected outcomes by end of 2026:
async-trait for dynamic dispatch use cases. Users face confusing two-path documentation.close() conventions) remain the norm.| Scenario | Estimated Probability | Key Driver |
|---|---|---|
| A (Baseline) | ~55% | Resource constraints continue; incremental progress |
| B (Optimistic) | ~25% | Corporate investment in Rust async; focused team formation |
| C (Pessimistic) | ~20% | Technical debt accumulation; personnel turnover |
Note: These probability estimates are qualitative judgments based on the pattern of progress reported in sources [1][5][25] and should not be interpreted as quantitative forecasts.
6.1.1 Compiler Type-System Technical Debt Return Type Notation progress has been explicitly slowed by technical debt in the Rust compiler's type system [5]. This is not merely a design challenge but a software engineering debt problem—the compiler's internal representations were not designed with RTN in mind, and retrofitting them is labor-intensive. If this debt is not addressed, it becomes a blocker for the entire async-in-traits feature family.
6.1.2 Semantic Complexity of Async Drop
Async Drop interacts with nearly every part of the Rust type system: lifetimes, ownership, Pin, the executor model, and the existing synchronous Drop trait. An early-stage compiler experiment has been landed, but the path from experiment to stable feature is long [5]. Incorrect implementation could introduce subtle unsafety or require breaking changes to the stabilized async Drop surface later.
6.1.3 Effect Polymorphism Scope Effect polymorphism is a language feature with significant academic precedent (Koka, Eff, algebraic effects in functional languages) but limited prior art in systems languages. Designing it to be composable with Rust's existing effect-like features (const, async, try, GATs) without creating a complexity explosion is a substantial research and engineering challenge [2].
6.1.4 Pin Semantic Complexity
Pin<P> was introduced as a minimal viable solution to the self-referential struct problem that futures create. However, its API is notoriously difficult to use correctly, and attempts to improve ergonomics (autoreborrowing, pin! macro) are layering ergonomic improvements on top of a semantic model that many developers find fundamentally unintuitive [5]. There is a risk that incremental ergonomic improvements do not address the root usability problem.
6.2.1 Runtime Lock-in The tight coupling of production Rust code to Tokio creates concentration risk. If Tokio's maintenance degrades, is abandoned, or makes breaking architectural decisions, the downstream impact on the Rust ecosystem would be severe. The lack of a viable alternative runtime means there is no fallback [9].
6.2.2 async-std Abandonment Risk With ~1,754 dependent crates and declining active development [9][10], async-std represents a latent ecosystem liability. If async-std becomes unmaintained, dependent crates must either migrate to Tokio (requiring API surface changes) or take over maintenance. The history of issue #731 (thread-per-I/O) suggests deep architectural problems that would require significant investment to resolve [9].
6.2.3 Documentation Debt The incomplete async book is a compounding risk factor [9]. Each year the book remains in draft, new developers learn async Rust through informal channels (blog posts, Stack Overflow, community Discord), creating inconsistent mental models and proliferating outdated patterns. The book's gaps specifically around cancellation are especially problematic, as cancellation bugs in production systems can be severe.
6.2.4 Function Coloring Fragmentation
As long as the function coloring problem remains unresolved, the Rust async ecosystem will continue to split library development between sync and async variants. Popular crates maintaining both reqwest (async) and ureq (sync) as separate projects is a symptom of this fragmentation [9]. The duplication of effort reduces the total engineering capacity available for feature development.
6.3.1 Scope and Resource Constraints The 2025H1 async parity goal "did not make as much progress as hoped," with the scope of the goal being too large for one person to manage [5]. This is an explicit acknowledgment by the Rust Project that staffing and scope management are limiting factors—not just technical difficulty.
6.3.2 RFC Process Latency The RFC process ensures quality and community input but introduces significant latency. Features like AFIT have been in discussion since before RFC #2739 was opened, and the stabilization path remains multi-year even for features where the design is broadly agreed upon [25]. For a rapidly evolving ecosystem competing with languages that can ship features faster, this latency is a structural disadvantage.
6.3.3 Multi-Team Coordination Overhead Async improvements require coordination across the language team, compiler team, library team, and async WG. Each team has its own RFC process, prioritization, and bandwidth constraints. Async Drop, for example, requires buy-in and implementation work across all these teams simultaneously [5].
6.4.1 Go's Async Model Go's goroutine model—which Rust explicitly chose not to replicate pre-1.0—provides an ergonomically simpler async experience for many use cases. Go's runtime-managed green threads eliminate the function coloring problem entirely, at the cost of less control and higher minimum memory overhead. For developers choosing between Rust and Go for network services, Go's async ergonomics remain a significant advantage [6].
6.4.2 Kotlin Coroutines and Swift Concurrency Both Kotlin and Swift have introduced structured concurrency models (Kotlin Coroutines, Swift's async/await + actors) that provide higher-level async abstractions than Rust currently offers. While neither language targets Rust's performance/safety niche exactly, they demonstrate that principled async models with good ergonomics are achievable in statically-typed systems-adjacent languages.
This report is based on 127 extracted findings from 25 verified sources across 3 rounds of research. Sources were selected to cover: official Rust Project communications (roadmaps, blog posts, RFCs, GitHub issues), community analysis (corrode.dev, Rust Internals forum), ecosystem-specific documentation (Tokio, async-std, crates.io), and third-party analysis (academic papers, developer surveys, industry blog posts).
Primary Sources (Official Rust Project) The highest-confidence findings come from official Rust Project sources:
These sources carry high confidence ratings for factual claims about language status, project goals, and official positions.
Secondary Sources (Community and Industry Analysis)
Academic Sources
Low-Confidence Sources
Throughout this report, findings are rated:
The following information was not available in the source set and represents gaps in this analysis:
async-trait crate is unknown.The source set spans materials from 2021 (async-std issue #992) through materials dated to early 2026 (JetBrains blog post on TokioConf). The JetBrains article dated February 17, 2026 references TokioConf as occurring to mark Tokio's tenth anniversary; this is included as reported but readers should note this source postdates the primary report date (August 2025). The dev.to article on Tokio 2.0 is similarly dated to 2026 and carries a low-confidence rating accordingly.
For current-state analysis, the Rust Blog's July 2025 project goals update [5] is the most temporally precise and authoritative source.
[1] Roadmap 2024 — Rust Language Design Team. lang-team.rust-lang.org. https://lang-team.rust-lang.org/roadmaps/roadmap-2024.html
[2] "Extending Rust's Effect System" — Keyword Generics Initiative Update, February 9, 2024. github.com/rust-lang/keyword-generics-initiative. https://github.com/rust-lang/keyword-generics-initiative/blob/master/updates/2024-02-09-extending-rusts-effect-system.md
[3] Dicklesworthstone/asupersync — Async runtime for Rust. GitHub. https://github.com/Dicklesworthstone/asupersync (referenced in source list; no findings extracted)
[4] "What is the future goal of async Rust?" — Rust Users Forum. users.rust-lang.org. https://users.rust-lang.org/t/what-is-the-future-goal-of-async-rust/104470 (referenced in source list; no findings extracted)
[5] "Project Goals Update — July 2025." Rust Blog. https://blog.rust-lang.org/2025/08/05/july-project-goals-update/
[6] "The Evolution of Async Rust: From Tokio to High-Level Applications." JetBrains Rust Blog, February 17, 2026. https://blog.jetbrains.com/rust/2026/02/17/the-evolution-of-async-rust-from-tokio-to-high-level-applications/
[7] "Unveiled: Tokio 2.0 Dominates Rust Async Runtimes in 2026." dev.to. https://dev.to/myroslavmokhammadabd/unveiled-tokio-20-dominates-rust-async-runtimes-in-2026-5ci8 (Low confidence — user-generated content; performance figures unverified)
[8] "What is the difference between tokio and async-std?" r/rust, Reddit. https://www.reddit.com/r/rust/comments/y7r9dg/what_is_the_difference_between_tokio_and_asyncstd/
[9] "The State of Async Rust: Runtimes." corrode.dev. https://corrode.dev/blog/async/
[10] "Tokio comparison" — Issue #992, async-rs/async-std, GitHub. Opened October 2, 2021. https://github.com/async-rs/async-std/issues/992
[11] "The Case for Inverse Coloring (Async by Default)." Rust Internals Forum. https://internals.rust-lang.org/t/the-case-for-inverse-coloring-async-by-default/23914
[12] "Async/Await series — Page 2." Rust Internals Forum. https://internals.rust-lang.org/t/async-await-series/7092?page=2 (referenced in source list; no findings extracted)
[13] "Evaluating and Improving Automated Repository-Level Rust Issue Resolution." arXiv preprint, 2602.22764v1. https://arxiv.org/html/2602.22764v1
[14] "How often do you want non-send futures?" Rust Internals Forum. https://internals.rust-lang.org/t/how-often-do-you-want-non-send-futures/10360
[15] "Make thread::sleep() panic in async context." Rust Internals Forum — libs. https://internals.rust-lang.org/t/make-thread-sleep-panic-in-async-context/17645
[16] "Rust 1.82 Killed Go: 8.7× Throughput and 72% Less RAM." Medium / Caffeinated Coder. https://caffeinatedcoder.medium.com/rust-1-82-killed-go-8-7-throughput-and-72-less-ram-why-the-benchmarks-forced-a-reckoning-b8c8b855281a (referenced in source list; no findings extracted)
[17] "Could someone clarify if the explanations on concurrency here are correct?" r/rust, Reddit. https://www.reddit.com/r/rust/comments/vpgyv5/could_some_clarify_if_the-explanations-on/ (referenced in source list; no findings extracted)
[18] "Fearless Concurrency." The Rust Programming Language (official book). doc.rust-lang.org. https://doc.rust-lang.org/book/ch16-00-concurrency.html
[19] "Towards Understanding the Runtime Performance of Rust." ACM, ASE '22 (Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering), 2022. https://dl.acm.org/doi/fullHtml/10.1145/3551349.3559494
[20] kiteconnect-async-wasm — crates.io. https://crates.io/crates/kiteconnect-async-wasm (referenced in source list; no findings extracted)
[21] process-lib — crates.io. https://crates.io/crates/process-lib (referenced in source list; no findings extracted)
[22] http-lib — crates.io. https://crates.io/crates/http-lib (referenced in source list; no findings extracted)
[23] notion-cli-rs — crates.io. https://crates.io/crates/notion-cli-rs (referenced in source list; no findings extracted)
[24] "Ergonomic Ref-Counting — 2025H2 Project Goal." rust-lang/rust-project-goals, GitHub. https://github.com/rust-lang/rust-project-goals/blob/main/src/2025h2/ergonomic-rc.md
[25] "Support async fn in trait methods (async/await follow-up)" — RFC Issue #2739. rust-lang/rfcs, GitHub. https://github.com/rust-lang/rfcs/issues/2739
This report was produced through systematic analysis of 25 verified sources and 127 extracted findings. All claims are attributed to numbered sources. Performance data sourced from user-generated content (particularly source [7]) should be independently verified before use in strategic decisions. Findings marked low-confidence reflect limitations in available primary data, not analytical uncertainty about their directional relevance.
You POST a question to /v1/research and get a job ID back immediately. In the background webclaw searches the web, scrapes the best sources, extracts findings, and synthesizes a cited markdown report. You poll GET /v1/research/{id} until the status is completed, then read the report, sources, and findings.
Yes. The report is markdown with inline citations like [1] and [2] that reference the sources array, and each entry in the findings array carries a confidence rating of high, medium, or low based on source authority. Your agent can trace any claim back to the page it came from.
Research is async, so the create call returns in milliseconds. The job itself runs several search and analyze cycles in the background, so a normal run takes a few minutes and a deep run takes longer. Poll the job ID every two to five seconds until status is completed.
Normal mode covers fewer sources and returns a shorter report, which is enough for most questions. Deep mode widens source coverage and produces a long-form synthesis for harder topics. Set "deep": true in the request body to switch modes.
No. Credits are only consumed on successful responses. A standard page is 1 credit; heavier work like JS rendering or protected-site access costs a few extra credits.
One credit pool, every endpoint. Cancel anytime, or self-host the open-source core for free.
Cookies & analytics
We'd like to use analytics to understand how this site is used. Nothing loads or fires until you agree. See our privacy policy for the full list of processors.