drewcrawfordapps.com

Selected work

Five projects, one theme: the boundary

Every project below lives where two worlds meet — Rust and Swift, CPU and GPU, engine and app, model and product. That seam is where correctness gets hard and where I do my best work.

A commercial iOS SDK over a quarter-million lines of C++

For a cloud application-streaming platform, I was the sole author of the iOS SDK ecosystem: a Swift 6 strict-concurrency SDK with UIKit and SwiftUI surfaces over the client's 256,000-line C++ engine, consumed by partner apps as xcframeworks through a ~45-release train.

  • From-scratch Metal compositor with a zero-copy CVPixelBuffer video path; hardware H.264 decode and camera-uplink encode via VideoToolbox — soft real time, where a dropped frame is user-visible.
  • Early production adopter of Swift's native C++ interop; migrated the SDK to Swift 6 strict concurrency within weeks of the toolchain shipping.
  • ThreadSanitizer-driven race hunt across the upstream C++ transport layers: ~30 tracked fixes carried as out-of-tree patches, no fork.
  • Playable-ads SDK with SKAdNetwork attribution powering the company's flagship commercial product; embedded with partner teams to accelerate integration.

wasm-bindgen: #4 contributor to the ecosystem's foundation

Sixteen merged PRs (~6,100 lines) to the library every Rust-in-the-browser project depends on — fourth by commits in the period, behind only the three core maintainers.

  • Re-architected the headless test logging pipeline from an O(n²) full-buffer protocol to append-only streaming: a measured >400× speedup on Chrome, with CodSpeed continuous benchmarking so it can't silently regress.
  • Root-caused a cross-browser Atomics.waitAsync wake race in the wasm threads executor into a deterministic one-shot reproduction.
  • Implemented Node.js multithreading instantiation (initSync) across ESM and CJS.

Vectropolis: one Rust codebase, four platforms and a browser

A city-builder in technical preproduction whose entire foundation is self-authored: wgpu-based GPU middleware, cross-platform windowing and input (Win32, AppKit, Wayland, browser canvas), vendor-neutral async executors, and a declarative UI layer — shipping public demos on Windows (x64/ARM64), macOS, Linux, and the browser via WebGPU.

  • Every citizen individually simulated — no pocket cars, no teleporting freight.
  • The stack is published: images_and_words, app_window, app_input, some_executor and ~35 more crates.

botmafia.games: 52 LLMs, lying to each other in production

An AI social-deduction game integrating 52 models across providers: streaming robustness, prompt-cache economics, cost governance, and a bootstrapped statistical leaderboard ranking models by deception and deduction skill.

  • Paired with a suite of agent tooling: 16 published skills for Claude Code, and a remote debugger designed for LLM coding agents.

An executor-agnostic async ecosystem, from first principles

A ~40-crate ecosystem addressing async Rust's runtime lock-in problem: vendor-neutral executor traits with cancellation, task-locals, and priorities; hand-written futures; lock-free primitives with minimized memory orderings — all CI-tested in real browsers under wasm32 threads, because "works on tokio on Linux" isn't the same as "works."

Your hardest layer probably looks like one of these.

Tell me which one. One paragraph is plenty.