Skip to main content

Deterministic, CI-native performance regression engine

Project description

https://raw.githubusercontent.com/flameiq/flameiq-core/main/assets/flameiq-logo.png

PyPI Python Versions License

Deterministic, CI-native performance regression and evolution engine.

Make performance a first-class, enforceable engineering signal — without requiring any SaaS platform, cloud account, or vendor dependency.

pip install flameiq-core
flameiq init
flameiq baseline set --metrics benchmark.json
flameiq compare --metrics current.json --fail-on-regression

Why FlameIQ?

Performance regressions are rarely caught in code review. They accumulate silently across hundreds of commits — a 3 ms latency increase here, a 2% throughput drop there — until they become expensive production incidents.

FlameIQ brings the same engineering discipline to performance that type checkers bring to correctness: automated, deterministic, CI-enforced.

Design Principles

Principle

What it means

Deterministic

Same input → same output, always. No flakiness.

CI-native

Exit codes, JSON output, works in any pipeline.

Offline-first

No network calls. No telemetry. Air-gap ready.

Language-agnostic

Provider plugin system. Any tool, any language.

Statistically grounded

Optional Mann-Whitney U test with effect size.

Auditable

Math documented in /specs. No black boxes.

Vendor-neutral

No cloud lock-in. Your data stays local.

Extensible

Stable plugin SDK. Easy to add new providers.

Installation

pip install flameiq-core

Requires Python 3.10+. No system dependencies.

Quick Start

Step 1: Initialise

cd my-project
flameiq init

Step 2: Write a FlameIQ v1 metrics file

{
  "schema_version": 1,
  "metadata": {
    "commit": "abc123",
    "branch": "main",
    "environment": "ci"
  },
  "metrics": {
    "latency": {
      "mean": 120.5,
      "p95": 180.0,
      "p99": 240.0
    },
    "throughput": 950.2,
    "memory_mb": 512.0
  }
}

Step 3: Set a baseline

flameiq baseline set --metrics benchmark.json

Step 4: Compare on every PR

flameiq compare --metrics current.json --fail-on-regression

Step 5: Generate an HTML report

flameiq report --metrics current.json --output report.html

GitHub Actions Integration

- name: Install FlameIQ
  run: pip install flameiq-core

- name: Restore baseline cache
  uses: actions/cache@v4
  with:
    path: .flameiq/
    key: flameiq-${{ github.base_ref }}

- name: Run benchmarks
  run: python run_benchmarks.py > metrics.json

- name: Check for regressions
  run: flameiq compare --metrics metrics.json --fail-on-regression

Exit Codes

Code

Meaning

0

Pass — no regression detected

1

Regression — metric(s) exceeded threshold

2

Configuration / baseline error

3

Metrics file invalid or unreadable

Python API

from flameiq.schema.v1.models import PerformanceSnapshot
from flameiq.core.comparator import compare_snapshots
from flameiq.core.models import RegressionStatus
from flameiq.storage.baseline_store import BaselineStore

store = BaselineStore()
baseline = store.load_baseline()

current = PerformanceSnapshot.from_dict({
    "schema_version": 1,
    "metadata": {"commit": "def456"},
    "metrics": {"latency": {"p95": 185.0}, "throughput": 940.0},
})

result = compare_snapshots(baseline, current)

if result.status == RegressionStatus.REGRESSION:
    for reg in result.regressions:
        print(f"  REGRESSION: {reg.metric_key} {reg.change_percent:+.2f}%")
else:
    print("All metrics within threshold.")

# Machine-readable JSON
import json
print(json.dumps(result.to_dict(), indent=2))

Configuration

flameiq.yaml (created by flameiq init):

thresholds:
  latency.p95:   10%
  latency.p99:   15%
  throughput:    -5%
  memory_mb:      8%

baseline:
  strategy: rolling_median
  rolling_window: 5

statistics:
  enabled: false
  confidence: 0.95

provider: json

Documentation

Full documentation: https://flameiq-core.readthedocs.io

Contributing

Contributions are welcome. Please read CONTRIBUTING.rst and open an issue before starting significant work.

License

Apache License 2.0. See LICENSE.

“FlameIQ” is a trademark of the FlameIQ project. Use of the name or logo to endorse derived products requires written permission. Contact: Angufibo Lincoln <angufibolinc@gmail.com>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flameiq_core-1.0.1.tar.gz (73.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flameiq_core-1.0.1-py3-none-any.whl (47.5 kB view details)

Uploaded Python 3

File details

Details for the file flameiq_core-1.0.1.tar.gz.

File metadata

  • Download URL: flameiq_core-1.0.1.tar.gz
  • Upload date:
  • Size: 73.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for flameiq_core-1.0.1.tar.gz
Algorithm Hash digest
SHA256 3a286f224102f22b31b8eb8a72380a62c00d772823855f9d2e11ef8060480473
MD5 510d8a42fbbdf409777179ce7cdf879b
BLAKE2b-256 45fb02955074ce57c471a83a2dcbeb10e06f27d2b55344dad39626aa1ba66f9d

See more details on using hashes here.

File details

Details for the file flameiq_core-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: flameiq_core-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 47.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for flameiq_core-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea34d1e223acebca8746968410008f55a803b7c36ef236468079d6c5327e5fa2
MD5 c0828e1726eb5eb42a38b5fad5d4a3cc
BLAKE2b-256 8a5b3055819ad2301f5fe57160bc7dc17324ef801184973cb16bd85027f23355

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page