Rust-native multiplayer game testing with pluggable transports, relay strategies, and network-condition simulation.
  • Rust 96.6%
  • Nix 3.4%
Find a file
2026-06-23 23:03:41 +02:00
.codex-plugin Fold MCP server into fragpipe 2026-05-08 17:34:59 +02:00
.forgejo/workflows chore: simit init scaffolding 2026-06-16 21:12:49 +02:00
examples Add Android device and UI test loops 2026-05-08 16:34:55 +02:00
keys chore: simit init scaffolding 2026-06-16 21:12:49 +02:00
nix chore: simit init scaffolding 2026-06-16 21:12:49 +02:00
skills Fold MCP server into fragpipe 2026-05-08 17:34:59 +02:00
src feat: add remote-host SSH passthrough for cluster-ctl MCP tools 2026-06-23 23:03:41 +02:00
.envrc Update lock for proper NAR hashing, and add direnv definition 2026-06-09 18:46:23 +02:00
.gitignore Initial fragpipe WebRTC harness 2026-05-02 12:27:41 +02:00
.mcp.json Fold MCP server into fragpipe 2026-05-08 17:34:59 +02:00
Cargo.lock Fold MCP server into fragpipe 2026-05-08 17:34:59 +02:00
Cargo.toml Expose fragpipe as a library 2026-05-17 12:39:06 +02:00
feat chore: simit init scaffolding 2026-06-16 21:12:49 +02:00
flake.lock flake.lock: update all inputs 2026-06-20 10:03:50 +02:00
flake.nix Re-export steampipe so consumers reach the cluster harness through fragpipe 2026-05-30 13:16:18 +02:00
README.md chore: simit init scaffolding 2026-06-16 21:12:49 +02:00
simit.toml chore: simit init scaffolding 2026-06-16 21:12:49 +02:00

fragpipe

CI Nix crates.io

Bare-metal multiplayer and Android device test orchestration.

Fragpipe owns local, bare-metal, SSH, and Android-device smoke testing for projects that can expose deterministic command-line launch modes. It does not replace cluster harnesses such as steampipe; those remain better suited for VM, Steam, and tournament orchestration.

WebRTC 1v1

From a Chessbender checkout with fragpipe.toml:

fragpipe webrtc-1v1 --max-runs 1

The flow starts a local listening peer, waits for WEBRTC_JOIN_ADDR=..., rewrites wildcard or loopback listen addresses to a reachable local IP, then starts the remote joining peer over SSH.

Android 1v1

android-1v1 starts a desktop listening peer and launches an Android joining peer from a configured APK:

fragpipe android-1v1 --config examples/chessbender.toml --max-runs 1

The Android config controls whether fragpipe boots an emulator or uses a physical device selected by adb_serial. The APK build command is project specific; fragpipe only runs it, installs the APK, pushes the rendezvous file, captures logcat, and records per-run artifacts.

Android UI

android-ui launches the configured full app, waits briefly for startup, asserts that the Android display is landscape, captures a screenshot, and stores logcat plus a JSON report:

fragpipe android-ui --config examples/chessbender.toml --max-runs 1

Use android-doctor to validate SDK, adb, APK, target, package, and activity configuration before running a loop:

fragpipe android-doctor --config examples/chessbender.toml

MCP and Codex Plugin

Fragpipe also ships a fragpipe-mcp binary plus Codex plugin metadata. The MCP server exposes the same fix-loop surface for native WebRTC, Android WebRTC, Android UI, Android doctor, and cross-platform matrix runs.

Run the packaged MCP server with:

nix run git+ssh://git@codeberg.org/caniko/fragpipe.git#fragpipe-mcp

The plugin manifest lives at .codex-plugin/plugin.json, the MCP server config lives at .mcp.json, and fix-loop skills live under skills/.