Skip to content

Guidelines

Rust code follows standard rustfmt formatting and must pass clippy with -D warnings (all warnings are errors). No additional style configuration is needed — the defaults apply.

Zig code follows Zig standard style. Run zig fmt on changed files.

Commit messages use conventional commits:

PrefixUse for
feat:New functionality
fix:Bug fixes
docs:Documentation changes
refactor:Code restructuring without behavior change
test:Adding or updating tests
perf:Performance improvements
chore:Build, CI, or tooling changes

Every code change needs tests. The rule is simple: if you change behavior, a test must cover it.

  • New features — write tests that exercise the new code paths
  • Bug fixes — add a regression test that fails on the old behavior
  • Refactoring — existing tests must continue to pass; add tests if coverage gaps exist

Run the full test suite before submitting:

Terminal window
cargo nextest run

For Zig changes:

Terminal window
cd zig && zig build test
  1. Create a feature branch from main
  2. Make your changes with tests
  3. Ensure all pre-commit hooks pass (lefthook run pre-commit)
  4. Push your branch and open a pull request
  5. PR title should follow conventional commit format
  6. Wait for CI and code review

Keep PRs focused — one logical change per PR. Large changes should be split into a series of smaller PRs when possible.

Version changes are handled through a guided release workflow. When a version bump is needed, three locations must be updated together:

  1. Cargo.toml — workspace version field
  2. markymark-plugin/.claude-plugin/plugin.json — plugin version (not auto-derived)
  3. Cargo.lock — regenerated by running cargo build after the version change

See the release documentation for the full process.

markymark is licensed under AGPL-3.0-only. All contributions are made under this license. By submitting a pull request, you agree that your contribution is licensed under the same terms.