Weavegraph
Graph-driven, concurrent agent workflow framework with versioned state, deterministic barrier merges, and rich diagnostics.
Weavegraph is a modern Rust framework for building complex, stateful workflows using graph-based execution. It's designed for AI agents, data processing pipelines, and any application requiring sophisticated state management with concurrent node execution.
โจ Key Features
- ๐ Concurrent Graph Execution: Bounded-concurrency scheduler with dependency resolution and versioned barrier synchronization
- ๐ Rich Message System: Type-safe message construction with role-based messaging for AI workflows
- ๐ฏ Versioned State Management: Channel-based state with snapshot isolation and deterministic merges
- ๐จ Comprehensive Error Handling: Structured error propagation with beautiful diagnostics via
mietteandthiserror - ๐ Built-in Observability: Rich tracing spans and event streaming for monitoring and debugging
- ๐พ Flexible Persistence: SQLite checkpointing with automatic schema management, plus in-memory options
- ๐ญ Conditional Workflows: Dynamic routing and edge conditions based on runtime state
- ๐ง Developer Experience: Extensive examples, comprehensive docs, and ergonomic APIs
๐ Quick Start
Add Weavegraph to your Cargo.toml:
[]
= "0.1"
Basic Example
use ;
use async_trait;
// Define a simple greeting node
;
async
๐ Core Concepts
Messages
Messages are the primary communication primitive with convenient constructors:
use Message;
// Use convenience constructors (recommended)
let user_msg = user;
let assistant_msg = assistant;
let system_msg = system;
// For custom roles
let function_msg = new;
// Complex cases with builder pattern
let complex_msg = builder
.role
.content
.build;
State Management
Versioned state with channel isolation and snapshot consistency:
use VersionedState;
// Simple initialization
let state = new_with_user_message;
// Rich initialization with builder
let state = builder
.with_user_message
.with_system_message
.with_extra
.build;
Graph Building
Declarative workflow definition with conditional routing:
use GraphBuilder;
let graph = new
.add_node
.add_node
.add_node
.add_edge
.add_conditional_edge
.set_entry_point
.build?;
๐ง Examples
The repository includes comprehensive examples demonstrating different patterns:
# Basic node patterns and message handling
# Advanced patterns: error handling, conditional routing, data transformation
# Error handling and pretty diagnostics
Demo Applications
Historical demo applications showcase evolution of capabilities:
# Basic graph execution patterns (examples/demo1.rs)
# Direct scheduler usage and barrier synchronization (examples/demo2.rs)
# LLM workflows with Ollama integration (examples/demo3.rs)
# Advanced multi-step workflows (examples/demo4.rs)
Note: Demo3 requires Ollama running at http://localhost:11434 with models like gemma3. Use the provided docker-compose.yml to set up Ollama:
๐๏ธ Architecture
Weavegraph is built around several core modules:
- [
message] - Type-safe message construction and role-based messaging - [
state] - Versioned state management with channel isolation - [
node] - Node execution primitives and async trait definitions - [
graph] - Workflow graph definition and conditional routing - [
schedulers] - Concurrent execution with dependency resolution - [
runtimes] - High-level execution runtime and checkpointing - [
channels] - Channel-based state storage and versioning - [
reducers] - State merge strategies and conflict resolution - [
event_bus] - Event streaming and observability infrastructure
๐ Observability & Debugging
Tracing
Rich tracing integration with configurable log levels:
# Debug level for weavegraph modules
RUST_LOG=debug
# Error level globally, debug for weavegraph
RUST_LOG=error,weavegraph=debug
Event Streaming
Built-in event bus for monitoring workflow execution:
use ;
// Custom event handling for testing
let event_bus = with_sink;
let runner = with_bus;
// Events include node starts/completions, state changes, errors
Error Diagnostics
Beautiful error reporting with context and suggestions:
// Automatic error context and pretty printing
๐พ Persistence
SQLite Checkpointing
Automatic state persistence with configurable database location:
use SqliteCheckpointer;
let checkpointer = new.await?;
let runner = with_checkpointer;
Database URL resolution order:
WEAVEGRAPH_SQLITE_URLenvironment variable- Explicit URL in code
SQLITE_DB_NAMEenvironment variable (filename only)- Default:
sqlite://weavegraph.db
In-Memory Mode
For testing and ephemeral workflows:
let runner = new; // Uses in-memory state
๐งช Testing
Run the comprehensive test suite:
# All tests with output
# Specific test categories
Property-based testing with proptest ensures correctness across edge cases.
๐ Production Considerations
Performance
- Bounded concurrency prevents resource exhaustion
- Snapshot isolation eliminates state races
- Channel-based architecture enables efficient partial updates
- SQLite checkpointing supports failure recovery
Monitoring
- Structured event streaming for observability platforms
- Rich tracing spans for distributed tracing
- Error aggregation and pretty diagnostics
- Custom event sinks for metrics collection
Deployment
- Docker-ready with provided compose configuration
- Environment-based configuration
- Graceful shutdown handling
- Migration support for schema evolution
๐ Project Background
Weavegraph originated as a capstone project for a Rust online course, developed by contributors with Python backgrounds and experience with LangGraph and LangChain. The goal was to bring similar graph-based workflow capabilities to Rust while leveraging its performance, safety, and concurrency advantages.
While rooted in educational exploration, Weavegraph has evolved into a production-ready framework with continued active development well beyond the classroom setting.
๐ค Contributing
We welcome contributions! Please see our contributing guidelines for details.
Areas we're particularly interested in:
- Additional persistence backends (PostgreSQL, Redis)
- Enhanced AI/LLM integration patterns
- Performance optimizations
- Documentation improvements
- Example applications
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.