Thanks for your interest in contributing! tinyflows is a Rust-native, host-agnostic workflow engine, licensed GPL-3.0-or-later.
- Skim the design guides in the project wiki.
- Read the coding standards below — they're the standard every change is held to.
- For anything non-trivial, open an issue first (use the issue templates) so we can agree on the approach.
Install Rust 1.85 or newer via rustup, then:
cargo build # build
cargo test # unit + doc tests (mocks auto-available)
cargo test --all-features # exercise the `mock` feature tooCI runs the following on every push and PR — run them yourself first, and make sure they're all green:
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo clippy --all-targets --all-features -- -D warnings
cargo build --all-targets --all-features
cargo test --all-featuresThe non-negotiables:
- Host-agnostic: never hard-code an LLM/tool/HTTP/persistence vendor — outside- world effects go through a capability trait, not a direct dependency.
- No
unsafe(#![forbid(unsafe_code)]). - Document every public item (
#![warn(missing_docs)]), with runnable examples where practical. - No panics (
unwrap/expect/panic!) on paths reachable from user input; return a typedResulterror instead. - Declarative model — no embedded scripting; code runs only via the sandboxed
codecapability. - Keep dependencies minimal, justified, additive, and GPL-compatible.
- Small, focused commits with an imperative subject ("Add X", "Fix Y"); the body
explains why. Reference issues (
Fixes #123) where relevant. - Branch from
main, open a PR againstmain, and fill in the PR template. - Update docs alongside behavior/API changes; record design decisions as an ADR in the project's decision log.
- Keep PRs reviewable — separate large refactors from behavior changes.
By contributing, you agree that your contributions are licensed under GPL-3.0-or-later, consistent with the rest of the project. Don't add code or dependencies under an incompatible license.
Please do not open a public issue for security-sensitive reports. Instead, contact the maintainers privately so a fix can be prepared before disclosure.