These notes apply to coding agents (Claude/Codex/Devin/etc.) contributing to this repo. Agent-assisted contributions are welcome, but should be supervised and reviewed by a human before merge.
StreamKit is a self-hostable media processing server (Rust). A single binary
(skit) runs pipelines as a node graph (DAG) — via a web UI, YAML, or
WebSocket API. Two modes: dynamic (real-time, hot-reconfigurable) and
oneshot (stateless batch processing). See agent_docs/architecture.md for
the full architecture.
| Directory | Purpose |
|---|---|
apps/skit/ |
Server binary — HTTP/WS handlers, config, auth, plugins |
apps/skit-cli/ |
CLI client binary (streamkit-client) |
crates/core/ |
Shared traits/types — ProcessorNode, Pin, Packet, NodeRegistry |
crates/engine/ |
Pipeline executor — graph builder, oneshot engine, dynamic actor |
crates/nodes/ |
Built-in nodes: audio::, video::, transport::, core::, containers:: |
crates/api/ |
YAML pipeline parsing, WebSocket protocol, TS type generation |
crates/plugin-{native,wasm}/ |
Plugin host adapters (FFI and WASM) |
sdks/plugin-sdk/ |
Plugin SDKs for Rust, Go, and C |
ui/ |
React 19 web UI (Vite + Bun) |
plugins/native/ |
Official ML plugins (Whisper, Kokoro, NLLB, etc.) |
samples/ |
Example pipelines (dynamic/ and oneshot/), audio files, images, fonts, Slint files |
tests/ |
Pipeline validation tests (oneshot pipeline smoke tests) |
e2e/ |
Playwright end-to-end tests |
docs/ |
Astro + Starlight docs site (sidebar in docs/astro.config.mjs) |
- Rust (version pinned in
rust-toolchain.toml), tokio, axum, wgpu - UI: React 19, TypeScript, Zustand, Jotai, React Query, Radix UI, React Flow
- Build/tooling:
just(task runner), Bun (UI), sccache (Rust build cache) - Testing:
cargo test(Rust), Vitest (UI), Playwright (E2E) - Platform: Linux x86_64
- Keep PRs focused and minimal.
- Run
just testandjust lintbefore submitting (or explain why you couldn't). - Follow
CONTRIBUTING.md: DCO sign-off (git commit -s), Conventional Commits, SPDX license headers on all new files. - Linting discipline: Do not blindly suppress lint warnings with ignore/exception rules. Refactor instead. If a suppression is truly necessary, include a comment explaining the rationale.
- UI tooling: Use
bun install/bunx/bun run— never npm or pnpm.
| Task | Command |
|---|---|
| All lints | just lint |
| Rust lint only | just lint-skit (fmt + clippy with per-crate feature flags + license check) |
| UI lint only | just lint-ui (prettier + eslint + tsc) |
| All tests | just test |
| Rust tests | cargo test --workspace |
| UI tests | just test-ui |
| Perf regression tests | just perf-ui |
| E2E tests | just e2e-external http://localhost:4545 (requires running server) |
| Unused code check | just knip-ui |
| Build everything | just build |
- Official images:
Dockerfile(CPU) andDockerfile.gpu(GPU) via.github/workflows/docker.yml. - Health endpoint:
/healthz(also/health). - Standard images do not bundle ML models or plugins — mount them at runtime.
Demo images (
Dockerfile.demo, tagged-demo) include bundled models and plugins.
Read the relevant guide before starting work in that area:
| Guide | When to read |
|---|---|
agent_docs/architecture.md |
Understanding crate relationships, data flow, key abstractions |
agent_docs/ui-development.md |
Working on React UI — state management, component patterns |
agent_docs/e2e-testing.md |
Running E2E tests, headless-browser pitfalls |
agent_docs/render-performance.md |
Compositor perf profiling, render regression testing |
agent_docs/adding-plugins.md |
Making a plugin official — full checklist |
agent_docs/common-pitfalls.md |
Known mistakes agents make — read this first if unsure |
agent_docs/skills-setup.md |
Install curated skills.sh packages for React, Playwright, etc. |