Releases
import { Aside, Steps } from ‘@astrojs/starlight/components’;
Current Release
Section titled “Current Release”🚀 v0.2.9 — Dashboard Cache, OOM Fixes & K8s Config Persistence
Section titled “🚀 v0.2.9 — Dashboard Cache, OOM Fixes & K8s Config Persistence”Latest Stable
Release Date: April 21, 2026
✨ Added
Section titled “✨ Added”- Frontend config persistence via K8s Secret: UI-applied settings (
PROMETHEUS_URL,OPENCOST_API_URL,ELECTRICITY_MAPS_TOKEN,BOAVIZTA_API_URL) are now patched into the GreenKube Kubernetes Secret on save, surviving pod restarts andhelm upgrade --reuse-valueswithout manual intervention. A namespacedRole/RoleBindinggrants the service accountget+patchaccess to exactly the GreenKube Secret. - GreenKube favicon: Browser tab now shows the real GreenKube logo (
favicon.ico) instead of the Svelte placeholder SVG. GET /api/v1/metrics/by-namespace: Lightweight endpoint returning CO2e, embodied emissions, energy, and cost aggregated by namespace over a time window, using a dual-tableUNION ALL + GROUP BY— avoids loading full row sets into memory.GET /api/v1/metrics/top-pods: Lightweight endpoint returning the top-N pods by CO2e over a time window. Dashboard donut and top-pods charts now use these endpoints instead of the expensiveGET /metricsroute, eliminating OOM restarts on large time ranges.- GHG Scope 2 / Scope 3 carbon classification: Emissions are now formally categorised per the GHG Protocol Corporate Standard.
- Pre-computed dashboard cache (
metrics_summary+metrics_timeseries_cache): Two new DB tables (migrations0004and0005for PostgreSQL and SQLite) store pre-aggregated KPI scalars and time-series buckets for five fixed windows (24h,7d,30d,1y,ytd). Refreshed hourly by the background scheduler — eliminates full-table scans on every dashboard load. SummaryRefresher: New service computing cluster-wide and per-namespace KPI totals and time-series buckets with adaptive granularity per window (hourly / daily / weekly / monthly).- Dashboard API endpoints:
GET /api/v1/metrics/dashboard-summary— cached KPI scalars, optionally filtered by namespace.GET /api/v1/metrics/dashboard-timeseries/{window_slug}— cached time-series for24h,7d,30d,1y, orytd.POST /api/v1/metrics/dashboard-summary/refresh— on-demand background refresh (HTTP 202).
- Adaptive chart granularity: Dashboard charts automatically select optimal time bucket per window — hourly for
24h, daily for7d/30d, weekly for1y, monthly forytd. - Boavizta fallback with configurable default: When Boavizta does not recognise a cloud provider or instance type,
EmbodiedEmissionsServiceinjects a fallback profile usingDEFAULT_EMBODIED_EMISSIONS_KG(default: 350 kg CO2e) instead of silently using 0 g. Metrics are flaggedis_estimated=Truewith descriptive reasons.
🐛 Fixed
Section titled “🐛 Fixed”- Async K8s Secret patching: In-cluster Secret patch now correctly uses
kubernetes_asyncio(the async client that is installed) instead of the synckubernetespackage. - Elasticsearch optional dependency:
elasticsearchandelasticsearch-dslmoved to an optional extra (pip install greenkube[elasticsearch]). All imports are now lazy, removing heavy transitive dependencies and startup warnings for PostgreSQL/SQLite users. - Electricity Maps not called for OpenStack providers (zone =
nova): The scheduler now falls back to the node’s geographic region when the provider zone (nova) is not a recognised Electricity Maps zone code. Restores carbon-intensity data on OVH, Infomaniak, and similar OpenStack clouds. - Race condition in collection orchestrator: Node collection is now an explicit Phase 1 in
DataProcessor.run()that runs alone before any concurrent collection, preventing K8s API client races and cascade Electricity Maps errors. - Pod CPU utilisation aggregation per node:
CollectionOrchestratorwas averaging pod CPU usage per node across timestamps instead of summing — caused underestimated energy figures on nodes with multiple measured pods. - Chart legends overlapping: ECharts legend layout fixed to prevent label overlap on small viewports.
DEFAULT_ZONEspurious warning:NodeZoneMapperno longer emits a false warning when the zone was correctly resolved via a validDEFAULT_ZONE.
🔄 Changed
Section titled “🔄 Changed”DataProcessor.run()restructured into four explicit phases: Phase 1 (node discovery, sequential), Phase 2 (zone resolution), Phase 3 (parallel metrics + Boavizta), Phase 4 (carbon-intensity prefetch + assembly). Eliminates the previous race condition and the redundant second K8scollect_instance_types()call.CollectionOrchestratorsimplified:NodeCollectordependency removed; node enrichment uses thenodes_infodict passed in from Phase 1.
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.9 |
| Helm Chart | helm repo add greenkube https://GreenKubeCloud.github.io/GreenKube && helm install greenkube greenkube/greenkube -n greenkube --create-namespace |
| Source Code | GitHub Release v0.2.9 |
🚀 v0.2.8 — Security Hardening & SCD2
Section titled “🚀 v0.2.8 — Security Hardening & SCD2”Release Date: April 11, 2026
🔒 Security
Section titled “🔒 Security”- Dockerfile hardening: Builder stage upgraded to
node:22-alpine. Both stages now runapt-get upgradeto patch OS CVEs. The final image runs asgreenkube(UID/GID 10001) with/sbin/nologinshell. - Helm securityContext: Full pod + container hardening on collector and API —
runAsNonRoot,allowPrivilegeEscalation: false,readOnlyRootFilesystem: true,capabilities.drop: [ALL],seccompProfile: RuntimeDefault./tmpserved byemptyDirvolumes (64 MiB each). - PostgreSQL securityContext:
readOnlyRootFilesystem: true,capabilities.drop: [ALL],seccompProfile: RuntimeDefault. Upgraded from17-alpineto18-alpine./var/run/postgresqland/tmpmounted asemptyDirvolumes. - SCRAM-SHA-256:
POSTGRES_INITDB_ARGSnow enforcesscram-sha-256authentication, replacing the legacy MD5 protocol. Liveness and readiness probes added viapg_isready. - ClusterRole least-privilege: Removed
secretsfrom the ClusterRole resource list — eliminates the critical RBAC over-permission (KSV-0041) that allowed reading cluster-wide secrets. - API security headers: New
SecurityHeadersMiddlewareinjects 7 OWASP-recommended headers on every response:X-Content-Type-Options,X-Frame-Options,X-XSS-Protection,Referrer-Policy,Permissions-Policy,Cache-Control, andContent-Security-Policy. CORS now restricted toGET,POST,OPTIONSand explicit headers. - Automated vulnerability scanning (CI): New
security.ymlGitHub Actions workflow — Trivy image scan, Trivy IaC scan (Dockerfile + Helm), Trivy filesystem scan (Python deps), andnpm audit. Runs on every push/PR tomain/devand weekly. SARIF results uploaded to GitHub Security. .trivyignore: Documents 8 upstream-unfixable CVEs with justifications and a quarterly review date.
✨ Added
Section titled “✨ Added”secrets.existingSecretHelm value: Pass a pre-created Kubernetes Secret instead of storing credentials invalues.yaml— recommended for production.- SQLite SCD2 node snapshots:
SQLiteNodeRepositoryimplements Slowly Changing Dimensions Type 2. Anode_snapshots_scdtable stores only rows where tracked columns (instance_type,vcpu,memory_gb,region,provider,zone) actually changed, avoiding write amplification on stable clusters. - Recommendation
scopecolumn:recommendation_historynow includes ascopecolumn (pod,namespace,node) for granularity filtering.pod_nameandnamespaceare nullable for node-scope recommendations. Applied in migration0003. - Configurable connection pool:
DB_POOL_MIN_SIZE(default: 2) andDB_POOL_MAX_SIZE(default: 10) controlasyncpgpool bounds. Exposed asdb.poolMinSize/db.poolMaxSizeinvalues.yaml. - Configurable statement timeout:
DB_STATEMENT_TIMEOUT_MS(default: 30 000 ms) sets per-statement timeout viaserver_settings. Exposed asdb.statementTimeoutMs. - Database indexes (migration 0003): Compound indexes on
combined_metrics(namespace, timestamp),namespace_cache(last_seen),carbon_intensity_history(datetime). - Artifact Hub listing:
Chart.yamlenriched with full Artifact Hub annotations (category, 6 screenshots, links, recommendations, images for amd64 + arm64, maintainers, readme).artifacthub-repo.ymladded for Verified Publisher badge. llms.txt: LLM/AI crawler guidance file (greenkube-website/public/llms.txt) following the llms.txt convention.
🐛 Fixed
Section titled “🐛 Fixed”- Aggregate queries spanning raw + hourly tables:
aggregate_summaryandaggregate_timeseriesnow correctly query bothcombined_metricsandhourly_metrics, preventing gaps between live and archived data. - Infinite aggregated retention by default:
METRICS_AGGREGATED_RETENTION_DAYSdefaults to-1(infinite) for CSRD/ESRS E1 compliance. Set a positive integer to enforce a rolling window. - Frontend npm audit (HIGH): Updated
svelte,vite,rollup,picomatch,devalue, and@sveltejs/kitto resolve all HIGH-severity advisories.
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.8 |
| Helm Chart | helm repo add greenkube https://GreenKubeCloud.github.io/GreenKube && helm install greenkube greenkube/greenkube -n greenkube --create-namespace |
| Source Code | GitHub Release v0.2.8 |
🚀 v0.2.7 — Service Health, CI/CD Gates & Scaleway
Section titled “🚀 v0.2.7 — Service Health, CI/CD Gates & Scaleway”Release Date: April 5, 2026
✨ New Features
Section titled “✨ New Features”Observability & Health:
- Collector health checks: New
HealthCheckServiceperforms periodic connectivity checks against all data sources (Prometheus, OpenCost, Electricity Maps, Boavizta, Kubernetes). Each probe reports status (healthy,degraded,unreachable,unconfigured), latency, resolved URL, and auto-discovery status. GET /api/v1/health/servicesendpoint: Aggregated health status for all data sources with per-service details. Supports?force=trueto bypass the 30-second cache.GET /api/v1/health/services/{service_name}endpoint: Health status for a single named service.POST /api/v1/config/servicesendpoint: Update service URLs (Prometheus, OpenCost, Boavizta) and the Electricity Maps token at runtime from the frontend.- Frontend service health overview: Settings page displays color-coded health cards (green=healthy, yellow=degraded, red=unreachable, gray=unconfigured) with latency, URL, and auto-discovery status.
- Frontend startup health popup: On first load, if any data source is unreachable or unconfigured, a modal popup alerts the user with inline configuration fields.
- Sidebar health indicators: Per-service health dots for all data sources in the sidebar.
Cloud Provider:
- Scaleway Kapsule support: Detects Scaleway nodes via
k8s.scaleway.com/*labels andnode.spec.provider_id. Supportsfr-par,nl-ams,pl-wawmapped to Electricity Maps zones. PUE profile: 1.37.
CI/CD Integration:
--no-color/NO_COLOR: Disables Rich formatting for clean pipeline logs.--fail-on-recommendationsongreenkube recommend: Exit code 1 when recommendations are found.--fail-on-co2-threshold/--fail-on-cost-thresholdongreenkube report: Enforce carbon/cost policy gates in CI/CD.
Testing:
- Vitest frontend test suite with 133 tests across 8 files covering all JS utilities and Svelte components.
- Total: 771 tests (Python + frontend).
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.7 |
| Helm Chart | helm repo add greenkube https://GreenKubeCloud.github.io/GreenKube && helm install greenkube greenkube/greenkube -n greenkube --create-namespace |
| Source Code | GitHub Release v0.2.7 |
🚀 v0.2.6 — Report Page, PUE Fixes & Sustainability Score
Section titled “🚀 v0.2.6 — Report Page, PUE Fixes & Sustainability Score”Release Date: April 5, 2026
✨ New Features
Section titled “✨ New Features”Report Builder:
- Report page in the web dashboard: New
/reportroute — configure time range (1 h → 1 y), namespace filter, aggregation (hourly/daily/weekly/monthly/yearly) and export format (CSV or JSON). Preview totals before downloading, then trigger a direct browser download. GET /api/v1/report/summary: Preview row count, totals (CO₂e, embodied CO₂e, energy, cost) before downloading.GET /api/v1/report/export: Stream a downloadable CSV or JSON file with correctContent-Dispositionheaders.
Sustainability Score Engine:
SustainabilityScorer: Composite 0–100 score across 7 weighted dimensions:- Resource Efficiency (25%), Carbon Efficiency (20%), Waste Elimination (15%), Node Efficiency (15%), Scaling Practices (10%), Carbon-Aware Scheduling (10%), Stability (5%)
- New Prometheus gauges:
greenkube_sustainability_score{cluster}andgreenkube_sustainability_dimension_score{cluster, dimension} - Grafana panels: Score gauge, per-dimension bar chart, score timeline, and carbon intensity by zone.
- kube-state-metrics compatible labels on all pod-level metrics.
- Grafana template variables:
clusterandregiondrop-downs for multi-cluster filtering.
🐛 Bug Fixes
Section titled “🐛 Bug Fixes”- PUE fallback:
Config.get_pue_for_provider()now correctly falls back toDEFAULT_PUE(1.3) for unknown nodes instead of applying the configured cloud provider’s profile. CLOUD_PROVIDERdefault: Changed fromawstounknownto avoid silently applying AWS PUE (1.15) on unconfigured clusters.- Settings page: API health dot was always red — fixed condition (
status === 'ok').
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.6 |
| Source Code | GitHub Release v0.2.6 |
🚀 v0.2.5 — CI/CD Refactor & OVH Support
Section titled “🚀 v0.2.5 — CI/CD Refactor & OVH Support”Release Date: April 4, 2026
🔄 Changed
Section titled “🔄 Changed”- CI/CD: Replaced monolithic
ci-cd.ymlwith three focused workflows:ci.yml,dev-build.yml,release.yml. - Docker tags: Development images tagged
dev-<sha>/dev-latest; release images use semver +latest. - Release process: Production builds only triggered by
vX.Y.Zgit tags — no more mutable version tags. - GitHub Releases: Automated releases with extracted changelog notes on each tag push.
🐛 Bug Fixes
Section titled “🐛 Bug Fixes”- Helm:
pre-install-checkuses a dedicatedServiceAccountcreated viapre-installhook — fixes race condition on fresh installs. - Helm:
post-install-hookuses its own hook lifecycle — prevents “serviceaccount not found” errors. - OVH zone mapping:
topology.kubernetes.io/zone=novaignored; numeric suffixes stripped (GRA11→GRA) before CSV lookup. - OVH provider detection: Nodes with
node.k8s.ovh/typelabel correctly identified as providerovh.
✨ Added
Section titled “✨ Added”- OVH region mapping: Extended with all uppercase trigrams and new-API long-form region IDs (
eu-west-par,eu-west-gra,eu-central-waw,ca-east-bhs,us-east-vin,ap-southeast-sgp,ap-southeast-syd,ap-south-mum…).
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.5 |
| Source Code | GitHub Release v0.2.5 |
🚀 v0.2.4 — Helm Fixes & SQL Performance
Section titled “🚀 v0.2.4 — Helm Fixes & SQL Performance”Release Date: March 30, 2026
🐛 Bug Fixes
Section titled “🐛 Bug Fixes”- Helm:
ServiceMonitorandNetworkPolicydisabled by default — fresh installs no longer fail on clusters without the Prometheus Operator. - Helm: Added
pre-install-checkhook that validates Prometheus Operator CRD presence with a clear actionable error message. - Grafana: Wrapped cluster overview stat panels with
sum()to prevent duplicate series. - Recommendation history: Skip node-level recommendations when saving — prevents integrity errors.
- Container startup: Fixed
greenkube starthanging due to buffered stdout.
⚡ Performance
Section titled “⚡ Performance”- SQL-level aggregation for
/api/v1/metrics/summaryand/api/v1/metrics/timeseries: 10–20× faster for large datasets. - Non-blocking dashboard recommendations: Recommendations loaded asynchronously.
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.4 |
| Source Code | GitHub Release v0.2.4 |
🚀 v0.2.3 — Grafana, Demo Mode & Observability
Section titled “🚀 v0.2.3 — Grafana, Demo Mode & Observability”Release Date: March 29, 2026
✨ New Features
Section titled “✨ New Features”- Grafana dashboard: Pre-built
dashboards/greenkube-grafana.jsonwith KPIs, time-series, namespace breakdown, node utilization, grid intensity, and recommendations panels. - Prometheus integration: ServiceMonitor, NetworkPolicy, and Prometheus RBAC templates in the Helm chart.
- Demo mode:
greenkube demogenerates 7 days of realistic sample data (22 pods, 5 namespaces) in a standalone SQLite instance. - Database migration system: Automated schema migration runner with versioned scripts for PostgreSQL and SQLite.
- API security: Bearer-token authentication (
GREENKUBE_API_KEY), configurable CORS origins, rate limiting. - DataProcessor refactor: Monolithic processor split into
CollectionOrchestrator,MetricAssembler,NodeZoneMapper,PrometheusResourceMapper,CostNormalizer,HistoricalRangeProcessor,EmbodiedEmissionsService. - Dependency injection: Replaced global singletons with explicit lifecycle management.
- 476+ unit tests (up from 323).
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.3 |
| Source Code | GitHub Release v0.2.3 |
🚀 v0.2.2 — Full-Stack FinGreenOps Platform
Section titled “🚀 v0.2.2 — Full-Stack FinGreenOps Platform”Release Date: February 2026
This release transforms GreenKube from a CLI tool into a full-stack monitoring platform.
✨ New Features
Section titled “✨ New Features”- Modern SvelteKit web dashboard with real-time charts (ECharts)
- FastAPI REST API with full OpenAPI documentation
- Interactive per-pod metrics table with sort, search, and export
- Node inventory with capacity visualization
- 9-type recommendation engine (zombie, rightsizing, autoscaling, carbon-aware, etc.)
- PostgreSQL as default backend (StatefulSet in Helm), Elasticsearch for scale
- Service auto-discovery for Prometheus and OpenCost
- Multi-architecture Docker images (amd64 + arm64)
- Historical range reports (daily/monthly/yearly)
- Embodied emissions via Boavizta API
- 293+ unit tests, Ruff + Gitleaks pre-commit hooks, GitHub Actions CI/CD
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Docker Image | docker pull greenkube/greenkube:0.2.2 |
| Source Code | GitHub Release v0.2.2 |
🌱 v0.1.0 — Initial Release
Section titled “🌱 v0.1.0 — Initial Release”Release Date: August 2025
The first public release of GreenKube, establishing the core carbon tracking capabilities.
✨ Features
Section titled “✨ Features”- CLI-based carbon reporting for Kubernetes workloads
- Prometheus integration for CPU metrics collection
- Energy estimation using Cloud Carbon Footprint methodology
- Carbon emission calculation with configurable grid intensity
- Support for AWS, GCP, Azure cloud providers
- SQLite storage backend, CSV and JSON export
- Helm chart for Kubernetes deployment
- Basic zombie pod and rightsizing recommendations
📦 Downloads
Section titled “📦 Downloads”| Asset | Link |
|---|---|
| Source Code | GitHub Release v0.1.0 |
Upgrade Guide
Section titled “Upgrade Guide”From v0.2.x to v0.2.8
Section titled “From v0.2.x to v0.2.8”-
Update the Helm repository:
Terminal window helm repo update -
Review security changes: The ClusterRole no longer includes
secrets. If your deployment depended on this, adjust accordingly. SCRAM-SHA-256 replaces MD5 for PostgreSQL — existing clusters upgrading the PostgreSQL StatefulSet to18-alpineshould run the providedscripts/pg_upgrade_17_to_18.shmigration script first. -
Upgrade the release:
Terminal window helm upgrade greenkube greenkube/greenkube \-f my-values.yaml \-n greenkube -
Verify the upgrade:
Terminal window kubectl get pods -n greenkubekubectl port-forward svc/greenkube-api 8000:8000 -n greenkube# Open http://localhost:8000 → check Settings page for service health
From v0.1.x to v0.2.x
Section titled “From v0.1.x to v0.2.x”-
Update the Helm repository:
Terminal window helm repo update -
Review your
values.yaml— New options for database backend, API settings, recommendation thresholds, and Prometheus query tuning. -
Upgrade the release:
Terminal window helm upgrade greenkube greenkube/greenkube \-f my-values.yaml \-n greenkube -
Verify the upgrade:
Terminal window kubectl get pods -n greenkubekubectl port-forward svc/greenkube-api 8000:8000 -n greenkube
Versioning
Section titled “Versioning”GreenKube follows Semantic Versioning:
- MAJOR (x.0.0) — Breaking changes
- MINOR (0.x.0) — New features, backwards compatible
- PATCH (0.0.x) — Bug fixes, backwards compatible
Release Channels
Section titled “Release Channels”| Channel | Description | Docker Tag |
|---|---|---|
| Stable | Current tested release | greenkube/greenkube:0.2.8 |
| Latest | Most recent stable | greenkube/greenkube:latest |
| Dev | Development builds (unstable) | greenkube/greenkube:dev-latest |