Thank you for your interest in contributing to z8run! This document explains how to get involved, whether you want to fix a bug, add a feature, improve documentation, or build a plugin.
- Code of Conduct
- Getting Started
- Project Structure
- Development Setup
- How to Contribute
- Commit Convention
- Pull Request Process
- Writing Plugins (WASM)
- Frontend Contributions
- Reporting Bugs
- Suggesting Features
This project follows our Code of Conduct. By participating, you agree to uphold it. Please report unacceptable behavior to hello@z8run.org.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/z8run.git cd z8run - Add the upstream remote:
git remote add upstream https://github.com/z8run/z8run.git
z8run/
├── crates/
│ ├── z8run-core # Flow engine, DAG scheduler, built-in nodes
│ ├── z8run-storage # SQLite / PostgreSQL persistence
│ ├── z8run-runtime # WASM plugin sandbox (wasmtime)
│ └── z8run-api # REST + WebSocket server (Axum)
├── bins/
│ └── z8run-cli # CLI binary (serves the editor with --features embed-ui)
├── frontend/ # React + TypeScript visual editor
└── Cargo.toml # Workspace root
- Rust 1.91+ (see
rust-toolchain.tomlfor the pinned version) - Node.js 20+ and
npm(for frontend work) - Optional: Docker and Docker Compose (for containerized development)
- Optional:
wasm-packor a WASM target if working on plugins
cp .env.example .envEdit .env and set at minimum:
Z8_JWT_SECRET- required for PostgreSQL (generate withopenssl rand -base64 32)POSTGRES_PASSWORD- if using Docker with PostgreSQL
For local development with SQLite, the defaults work out of the box.
# Build all crates
cargo build
# Run tests
cargo test --workspace
# Run the server in development mode
cargo run --bin z8run -- servecd frontend
npm install
npm run devdocker compose -f docker-compose.yml -f docker-compose.build.yml up -dThis uses docker-compose.build.yml as an override to build images locally instead of pulling from GHCR.
# Rust
cargo fmt --all
cargo clippy --workspace -- -D warnings
# Frontend
npm run check
npm run check:fixAll CI checks must pass before a PR can be merged.
- Look for issues labeled
good first issueif you are new to the project. - Issues labeled
help wantedare open for anyone to work on. - Comment on the issue to let maintainers know you are working on it.
git checkout -b feat/my-new-feature # new feature
git checkout -b fix/bug-description # bug fix
git checkout -b docs/improve-readme # documentationz8run follows Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer]
| Type | When to use |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation only changes |
refactor |
Code change that is not a feature or fix |
test |
Adding or updating tests |
chore |
Build process, tooling, dependencies |
perf |
Performance improvement |
Examples:
feat(core): add retry policy to HTTP Request node
fix(storage): handle concurrent writes on SQLite
docs: update Quick Start section in README
- Ensure your branch is up to date with
main:git fetch upstream git rebase upstream/main
- Make sure all tests pass and there are no clippy warnings.
- Open a Pull Request against the
mainbranch. - Fill in the PR template -- describe what changed and why.
- Link any related issue (e.g.,
Closes #42). - A maintainer will review your PR. Please respond to review comments within a reasonable time.
- Once approved and CI is green, a maintainer will merge it.
z8run supports plugins compiled to WebAssembly. To create one:
- Implement the z8run plugin interface (see
crates/z8run-runtimefor the ABI spec). - Compile your plugin to
wasm32-wasi:cargo build --target wasm32-wasi --release
- Install the plugin using the CLI:
Or place the
z8run plugin install ./target/wasm32-wasi/release/my_plugin.wasm
.wasmfile in thedata/plugins/directory and usez8run plugin scanto register it. - Add tests and documentation for your plugin nodes and capabilities.
The frontend lives in frontend/ and is built with React, TypeScript, React Flow, Zustand, and Tailwind CSS.
- Node definitions are in
frontend/src/lib/ - The editor canvas and node palette are in
frontend/src/features/ - State management uses Zustand stores in
frontend/src/stores/
When adding a new built-in node, update both the backend crate (z8run-core) and the frontend node definition.
Please open an issue and include:
- z8run version (
z8run info) - Operating system and architecture
- Steps to reproduce
- Expected vs. actual behavior
- Relevant logs or screenshots
For security vulnerabilities, do not open a public issue -- see SECURITY.md instead.
Open a GitHub Discussion or an issue with the enhancement label. Describe the use case and the problem it solves.
- GitHub Discussions: z8run/z8run/discussions
- Email: hello@z8run.org
We appreciate every contribution, big or small. Thank you!