Skip to main content

Evenflow

Evenflow is an opinionated Rust source linter that runs alongside Clippy. It uses Tree-sitter to check source structure and comments without building your project.

Install and run

Install the Python package (CPython 3.10 or newer):

python -m pip install evenflow

Or install the Rust executable (Rust 1.90 or newer):

cargo install --locked evenflow

Both installations provide the same command:

evenflow check
evenflow check src/ worker/src/
evenflow check . --strict
evenflow check . --format json
evenflow rules

Prebuilt binaries are available from GitHub Releases.

Library usage

Python calls the Rust scanner directly; no subprocess or Rust toolchain is needed when installing a wheel:

import evenflow

report = evenflow.check(["src/"], working_directory="/path/to/project", strict=True)
for diagnostic in report["diagnostics"]:
    print(diagnostic["rule"], diagnostic["message"])

check() returns the JSON report schema as a dictionary, including lint and operational errors. It does not print or change the working directory. Omit paths to scan the working directory. python -m evenflow runs the CLI, and evenflow.main(args) returns its exit status.

Rust callers can depend on the evenflow crate and use evenflow::runner::run(working_directory, paths, strict) to obtain a evenflow::model::Report; report.exit_code() applies CLI exit semantics. The Rust API is not yet stable. Python bindings are optional and are enabled by Maturin; ordinary Cargo builds do not require Python.

GitHub Action

Call Evenflow from another repository's workflow after checking out that repository:

name: Evenflow

on: [push, pull_request]

permissions:
  contents: read

jobs:
  lint:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
      - uses: cmeister2/evenflow@main

The action downloads a prebuilt binary, verifies it against the release's SHA256SUMS, and runs evenflow check with text diagnostics. No Rust toolchain or project build is required. Supported runners are Linux x64, macOS ARM64, and Windows x64; other operating system and architecture combinations fail with an error.

Input Default Meaning
version latest Latest stable release, or an exact bare version such as 0.1.1 without a v prefix.
paths . Files or directories, one per line, relative to working-directory.
working-directory . Directory to scan from, relative to GITHUB_WORKSPACE.
strict true Promote enabled warnings to errors. Set false to respect configured rule severities.
token ${{ github.token }} Token used only for GitHub API reads of releases and assets.

For example, select a release, scan part of a repository, and allow configured warnings:

- uses: cmeister2/evenflow@main
  with:
    version: '0.1.1'
    working-directory: crates/service
    paths: |
      src/
      examples/request.rs
    strict: 'false'

Configuration discovery starts from working-directory using the same evenflow.toml rules as the CLI. The action preserves CLI exit statuses: 0 passes, 1 fails for error-level lint findings, and 2 fails for tool or analysis errors. Its default strict mode also fails on warnings.

The examples use @main because the action has not yet been tagged. For reproducible CI, replace main with a full commit SHA containing the action and set version to an exact release. Pinning the action alone still uses the latest binary unless version is set.

Documentation

Configuration and selection

Evenflow discovers the nearest ancestor of the working directory containing evenflow.toml; that directory becomes the scan root. Without a configuration file, the working directory is the root. Ancestor configurations are not merged, and the target project's Cargo manifest is not required.

exclude = ["src/bindings/**", "src/test_support/**"]
include-tests = false

Set rule levels to off, warning, or error in [rules], using IDs listed by evenflow rules. Omitted rules use their registered defaults. Warnings do not fail a run unless --strict promotes them to errors. Strict mode does not enable disabled rules. Unknown settings, rule IDs, options, and invalid types are errors, even when the affected rule is off. evenflow rules also lists defaults, descriptions, and available options.

check accepts Rust files or directories and defaults to the working directory. It recursively selects .rs files, applies exclusions, deduplicates overlapping inputs, and scans in stable path order. Exclusion globs use / relative to the root; **/ matches zero or more directories. Directory symlinks are not followed, and resolved paths must stay within the root. Explicit missing, unreadable, or non-Rust inputs, and a selection with no files after exclusions, are errors.

Local suppressions

Use a standalone ordinary comment with one rule ID and a non-empty reason. In this template, replace RULE_ID with an ID listed by evenflow rules:

// evenflow: allow(RULE_ID): Explain why this exception is needed.

A directive can precede the body-owning construct or its first executable statement. It suppresses findings for that exact body, not descendants or siblings. Adjacent directives may address different rules. Mentioning evenflow: inside other prose does not activate one.

Malformed, trailing, misplaced, unknown-ID, and unused directives are analysis errors. Directives for known disabled rules are inactive rather than unused; unused checks run only for successfully analyzed files with the rule enabled. Analysis errors and coverage notes cannot be suppressed. Use explicit file exclusions for unsupported source. File-wide and baseline suppressions are not supported.

License

Licensed under either Apache License 2.0 or MIT License, at your option.

Metadata

Release files for evenflow 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evenflow 0.3.0
File Size Uploaded Provenance Actions
evenflow-0.3.0.tar.gz 83.2 kB With provenance Details for evenflow-0.3.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for evenflow 0.3.0
File Interpreter ABI Platform Actions
evenflow-0.3.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details for evenflow-0.3.0-cp310-abi3-win_amd64.whl
evenflow-0.3.0-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details for evenflow-0.3.0-cp310-abi3-manylinux_2_28_x86_64.whl
evenflow-0.3.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details for evenflow-0.3.0-cp310-abi3-macosx_11_0_arm64.whl

Total release size: 4.5 MB

Release files / evenflow-0.3.0.tar.gz

Download URL evenflow-0.3.0.tar.gz
Size 83.2 kB
Tags Source
SHA-256 checksum
How to use checksums
af06945a53fe52dc72c92a0fb85f92b859d319d7e8aaa8fad7e0f4746aa14782
BLAKE2b-256 checksum
How to use checksums
8b21cd5798160472a18727cf41c99613a892d597cf4ef2fa91a2f2f746241249
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / evenflow-0.3.0-cp310-abi3-win_amd64.whl

Download URL evenflow-0.3.0-cp310-abi3-win_amd64.whl
Size 1.5 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
945a2ac5ff01d95e0f55f91f6483391c49fb531687b4990dc12a5006cc72d0e9
BLAKE2b-256 checksum
How to use checksums
09e8f70a893fbc7fce09152131fe4007aa54c900859da09755ff92e833485738
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / evenflow-0.3.0-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL evenflow-0.3.0-cp310-abi3-manylinux_2_28_x86_64.whl
Size 1.6 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
4871f447e5b8415545e9960a5ff5212eeb333b578f4cd6c0714f552e88e1b0b8
BLAKE2b-256 checksum
How to use checksums
4e405c0ca4ae4be2d0f3058309dd7ad9bd476232126726995d9f07b96e08cc4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / evenflow-0.3.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL evenflow-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
Size 1.4 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4bfd457a99afe4260319f09e6b1f4c72e78b35d1ef05bd1fbab90354f99a22f9
BLAKE2b-256 checksum
How to use checksums
da829c2ddf983cd931c7f606222296b9af518304e1d81e84ce7a5fd435557484
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for evenflow 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 4 files in this release have been uploaded with provenance metadata.

Select from 4 files

Attestation for evenflow-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.0 This release

4 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page