Open source projects
The Rust crates, upstream contributions, and reference applications I develop for the AWS serverless community.
Crates
lambda-appsync
A Rust framework for implementing AWS AppSync Direct Lambda resolvers with complete type safety and compile-time validation. Automatically generates Rust types from your GraphQL schema, routes operations to the correct handlers, and enforces the AppSync error contract.
- Type generation from GraphQL schema via procedural macro
- Automatic operation routing (Query, Mutation, Subscription)
- Typed error handling conforming to the AppSync protocol
- Multi-mode authentication support (API key, Cognito, IAM, OIDC)
- Compatible with the official Rust Lambda runtime (aws-lambda-rust-runtime)
awssdk-instrumentation
Out-of-the-box OpenTelemetry instrumentation for AWS Lambda functions using the AWS SDK for Rust. Automatically emits traces, metrics, and structured logs for every AWS API call. When paired with the X-Ray exporter I contributed to opentelemetry-rust-contrib, traces flow natively into the AWS observability ecosystem.
- Automatic OpenTelemetry traces for all AWS SDK calls
- Latency and error rate metrics per service and operation
- Optional AWS X-Ray exporter (via my opentelemetry-rust-contrib contribution)
- Zero-config: a single macro instruments everything
- Compatible with any Rust Lambda runtime
dynamodb-facade
An ergonomic, typed facade over the AWS SDK DynamoDB client for Rust. Eliminates manual key maps, expression strings, pagination loops, and batch chunking — while enforcing correct usage at compile time through typestate builders and a schema encoded in the type system.
- Zero-boilerplate item wiring via declarative macros (table, attribute, and index definitions as zero-sized types)
- Composable, typed condition and update expression builders — no `#name` / `:value` juggling
- Typestate operation builders: supplying a sort key to a table without one, setting a condition twice, and similar misuses are compile-time errors
- Auto-paginating query & scan (collect or stream) and auto-chunked, retrying batch writes
- First-class single-table (mono-table) design support
Contributions
opentelemetry-rust-contrib
A ~18k-line upstream contribution to the OpenTelemetry Rust Contrib project, adding AWS X-Ray support to the OpenTelemetry Rust ecosystem. This work is what awssdk-instrumentation's X-Ray exporter is built on; it currently ships via a temporary published crate (opentelemetry-aws-temporary-fork) pending upstream merge of PR #549.
- X-Ray span and trace exporter, mapping OpenTelemetry semantics to the X-Ray data model
- X-Ray daemon client for UDP delivery to the local X-Ray agent
- Stdout client for tracing from environments without a daemon (CloudWatch Logs ingestion, local debugging)
Demos
yak-mania
A multiplayer economy game showcasing the full RustySL stack end-to-end on AWS. Built on AppSync with Rust Lambda direct resolvers powered by lambda-appsync, a single-table DynamoDB backend accessed through dynamodb-facade, and instrumented with awssdk-instrumentation — all fronted by a SvelteKit static site on CloudFront and deployed through CodePipeline V2.
- Rust Lambda direct resolvers on AppSync with batching and subscriptions
- Dedicated sub-stack comparing six Lambda instrumentation strategies side by side (4 Python, 2 Rust)
- Single-table DynamoDB design with Cognito auth and X-Ray tracing
benchmark-game
An interactive clicking game that benchmarks four AppSync resolver implementations in real time: Rust Lambda, Python Lambda, JavaScript resolver, and VTL resolver. The Rust resolver is built with lambda-appsync and dynamodb-facade, and the project doubles as a reference deployment for both crates.
- Four-way resolver benchmark (Rust / Python / JS / VTL) driven by player clicks
- Vue.js frontend on CloudFront, CodePipeline deployment, Cognito auth
- Load-test CLI (simulate_players) for synthetic benchmarking
demo-rust-lambda
The first demo: a head-to-head comparison of Rust and Python AWS Lambda functions exposed through parallel API Gateways, benchmarked on CPU-bound workloads (Ackermann, prime numbers). The published results show Rust at roughly 50× faster, 33× cheaper, and 4× less memory-hungry than Python on the same tasks.
- Two parallel API Gateways, one Rust runtime and one Python, sharing a DynamoDB backend
- CPU workloads designed to stress cold-start and warm-execution paths
- CloudWatch Log Insights queries for reproducible measurement, results published as a public spreadsheet