Deterministic, CI-native performance regression engine
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flameiq_core-1.0.2.tar.gz.
File metadata
- Download URL: flameiq_core-1.0.2.tar.gz
- Upload date:
- Size: 72.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
526dd908f1c4fbfc401a6f036b3086bc3cf1f9f69ee9ac9cc1f771f02815ddc5
|
|
| MD5 |
65bd2c51dc252835279d7e68f1931068
|
|
| BLAKE2b-256 |
e1b9cc68714a77b98db80a35f8da8e473e6e4e6e46e5310c7e406340574325ff
|
Provenance
The following attestation bundles were made for flameiq_core-1.0.2.tar.gz:
Publisher:
release.yml on flameiq/flameiq-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flameiq_core-1.0.2.tar.gz -
Subject digest:
526dd908f1c4fbfc401a6f036b3086bc3cf1f9f69ee9ac9cc1f771f02815ddc5 - Sigstore transparency entry: 1056923078
- Sigstore integration time:
-
Permalink:
flameiq/flameiq-core@3a136d38bade2dc54893e818cbf3aa4c1af74718 -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/flameiq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3a136d38bade2dc54893e818cbf3aa4c1af74718 -
Trigger Event:
push
-
Statement type:
File details
Details for the file flameiq_core-1.0.2-py3-none-any.whl.
File metadata
- Download URL: flameiq_core-1.0.2-py3-none-any.whl
- Upload date:
- Size: 47.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc199df123e28d912e3c418bbb02725cffe5fad90598308bd7c8aa0b2b61d090
|
|
| MD5 |
cc14c61d3e27ef0e5b70b954feb8f31b
|
|
| BLAKE2b-256 |
9e614f0388fc3c2cde81c127230eb0075d9957a99a9d598bd0d103239673c70c
|
Provenance
The following attestation bundles were made for flameiq_core-1.0.2-py3-none-any.whl:
Publisher:
release.yml on flameiq/flameiq-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flameiq_core-1.0.2-py3-none-any.whl -
Subject digest:
dc199df123e28d912e3c418bbb02725cffe5fad90598308bd7c8aa0b2b61d090 - Sigstore transparency entry: 1056923081
- Sigstore integration time:
-
Permalink:
flameiq/flameiq-core@3a136d38bade2dc54893e818cbf3aa4c1af74718 -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/flameiq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3a136d38bade2dc54893e818cbf3aa4c1af74718 -
Trigger Event:
push
-
Statement type: