What's new
A log of new features, improvements, and fixes — most recent first.
Email capture on onboarding — add your contact email during the GitHub App install flow (step 0). EmitCI stores it and automatically populates your billing address when the app is installed, so trial-ending alerts and anomaly emails reach you from day one.
Trial-ending email banner — a dismissible banner appears on the dashboard when your trial has 7 or fewer days left and no email is on file. Enter your email inline to receive the trial-ending reminder without navigating to Settings.
Missed anomaly email banner — if EmitCI detected anomalous CI runs during your trial but couldn't send an alert because no email was on file, a red banner now appears on the dashboard listing the missed count. Enter your email to re-enable anomaly alerts going forward.
Notification prefs email gate — the Email Notifications section in Settings → Notifications now shows an orange 'No email on file' card before the toggles when no email address has been saved. Enter your address inline to unlock the weekly digest, anomaly alert, and budget alert toggles without leaving the page.
Email capture on GitLab and External CI onboarding — the email address card is shown on step 0 of the GitLab and External CI onboarding flows, giving users who don't install the GitHub App a way to provide a contact email before they finish setup.
Stripe checkout pre-fills the email field with your billing address from EmitCI (if set), removing a friction step at upgrade time.
Date range picker redesigned — the dashboard date filter is now a dropdown (calendar icon + label + chevron) replacing the previous pill buttons. Labels are now full words ('Last 7 days', 'Last 30 days', 'Last 90 days') for clarity. Enterprise plans see additional options: Last 180 days and Last year.
CDP JSON export — GET /reports/export/cdp maps EmitCI data to CDP Climate questionnaire sections C6.1 (Scope 1), C6.3 (Scope 2), C6.5 (Scope 3), and C7 (emissions targets if SBTi targets are configured). Available on Team and Enterprise plans. Download from Reports → Compliance Exports.
EcoVadis JSON export — GET /reports/export/ecovadis maps to the EcoVadis Environment theme: E1.1 (GHG management policy), E1.2 (Scope 1 & 2 CO₂ tCO₂e), E2.1 (Scope 3 CO₂ tCO₂e). Available on Team and Enterprise.
SECR JSON export — GET /reports/export/secr produces UK Streamlined Energy and Carbon Reporting data: Scope 1 + 2 tCO₂e, intensity ratio tCO₂e/£1M revenue, and YoY comparison. Accepts optional annual_revenue_gbp query parameter. Available on Team and Enterprise.
TCFD / IFRS S2 JSON export — GET /reports/export/tcfd covers all four TCFD pillars: Governance (board oversight of climate risk), Strategy (transition and physical risk scenarios), Risk Management (carbon risk identification process), and Metrics & Targets (Scope 1/2/3 totals + carbon intensity). Available on Team and Enterprise.
XBRL / iXBRL export — GET /reports/export/xbrl produces an inline XBRL xHTML file tagged with ESRS E1 taxonomy elements: esrs:GrossScope1GHGEmissions, esrs:GrossScope2GHGEmissions, esrs:GrossScope3GHGEmissions, esrs:TotalGHGEmissions. Required for digital CSRD filing on the European Single Access Point (ESAP). Enterprise only.
Scenario Modeling ('What If') — interactive carbon reduction modeler at Insights → Scenario. POST /scenario/calculate accepts five levers: green_shift_pct (shift builds to low-carbon grid windows), ci_optimize_pct (eliminate runner waste), ai_model_switch (lower-carbon AI model), runner_reduction_pct (reduce total run count), renewable_pct (add RECs). Returns baseline vs projected CO₂, per-lever savings breakdown, estimated cost saving, and trees equivalent. Three presets (Minimal / Moderate / Aggressive) available via GET /scenario/presets. Save a scenario as a carbon target in one click. Team and Enterprise.
SBTi Target Tracking — create, monitor, and delete carbon reduction targets at Insights → Targets. Supported frameworks: SBTi 1.5°C (42% by 2030), SBTi Well-below 2°C (30% by 2030), Paris Aligned (50% by 2035), or Custom. Each target shows: linear reduction trajectory vs actual, on-track/off-track badge, achieved vs required reduction bars, years remaining, and gap-to-close in kgCO₂e. CRUD via /targets endpoints. Team and Enterprise.
CSRD Double Materiality Assessment — step-by-step assessment of 8 ESRS sustainability topics at Insights → Materiality: E1 Climate Change, E2 Pollution, E3 Water & Marine Resources, E4 Biodiversity, E5 Circular Economy, S1 Own Workforce, S2 Workers in Value Chain, G1 Business Conduct. Each topic rated 1–5 on financial materiality (impact on company finances) and impact materiality (impact on people/environment) axes. Topics with either score ≥ 3 are flagged material. Results visualised on a 2D scatter chart. CSRD requires both axes per ESRS 1 §4. Team and Enterprise.
Spend-based Scope 3 Category 1 Purchases — declare supplier spend by category on the Emissions page (Purchased Goods & Services card). Categories: cloud services (0.168 kg CO₂/$), software licences (0.092), hardware equipment (0.450), professional services (0.085), office supplies (0.320), marketing (0.072), travel & accommodation (0.186), utilities (0.550). Uses EPA USEEIO v2.0 factors. Supports manual entry or CSV upload. Totals roll into the Emissions page grand total. Endpoints: GET/POST /scope3/purchases, POST /scope3/purchases/upload. Team and Enterprise.
ESG Copilot — section-aware AI assistant on the Emissions page. Click 'Get help with this section' next to Scope 3.1 Purchased Goods & Services to open the side panel. The copilot knows which GHG categories you have and haven't filled, suggests what data you need ('You haven't entered business travel yet — typically 10–30% of tech company emissions'), and explains where to find it. Uses POST /assistant/esg-guide. Team and Enterprise.
Emissions page grand total now includes Scope 3.1 purchased goods spend. The summary strip Hardware + SaaS tile reflects the combined total of hardware lifecycle, SaaS tools, and supplier purchases.
Nav Insights dropdown: Targets (/insights/targets), Scenario (/scenario), and Materiality (/materiality) added as dedicated navigation entries.
AI Training Runs carbon tracking — report GPU compute carbon for model fine-tuning and training jobs via POST /api/v1/ingestion/ai-training. Accepts provider, model, gpu_type, gpu_count, compute_hours, region. Returns estimated operational CO₂ (Scope 3 Cat 1: energy × grid intensity) and embodied CO₂ (Scope 3 Cat 2: GPU manufacturing lifecycle, amortized over 3-year lifetime). Both figures are labeled as research-based estimates.
Embodied GPU Carbon (Scope 3 Category 2) — hardware manufacturing lifecycle CO₂ is now amortized per training query for 18 GPU types (H100, A100, V100, T4, L40S, Mi250X, etc.) based on Boavizta database and IEA manufacturing studies. Formula: embodied_g = gpu_kg × 1000 × gpu_count × compute_hours / 26,280 h lifetime. Uncertainty ±50% (labeled in dashboard). This is the first CI tooling product to surface Scope 3 Cat 2 GPU embodied emissions per training job.
ESG Report v1.3.0 — AI training operational CO₂ (Scope 3 Cat 1) and embodied GPU CO₂ (Scope 3 Cat 2) now appear in the ESG PDF: separate table rows in the training section, a new 'AI GPU Embodied CO₂ (Scope 3 Cat 2)' key metrics row, and combined_co2_kg includes all AI components. JSON schema updated to v1.3.0 with a new '3.2_ai_gpu_embodied' GHG category block.
AI Compliance fields — AI inference events now carry CSRD/GHG Protocol compliance metadata: ghg_scope (3), ghg_category (3.1), csrd_reference (ESRS E1-6 §AR 46), reporting_year, and audit_hash (SHA-256 of all event fields for tamper-evidence). Training events additionally include a 3.2_ai_gpu_embodied category field. All compliance fields are returned by the /analytics/ai-usage endpoint and included in ESG JSON export.
ESG PDF training section header updated to 'AI Model Training Runs (Scope 3 Categories 1 & 2)' to correctly reflect that training carbon now covers both operational energy (Cat 1) and embodied hardware (Cat 2). Training table adds Embodied CO₂ (kg) column.
Jenkins multi-instance support — connect multiple Jenkins instances (URLs) to a single EmitCI installation. Each instance is polled independently on its own 5-minute cycle. Instance state (last_build_id, last_polled_at, backfill_done) is tracked per-URL so one slow instance never blocks others. Useful for organisations with separate Jenkins instances per team or product line.
Network egress carbon events — EmitCI now tracks data transfer emissions from CI jobs. Network egress is measured and stored per run as a separate Scope 3 emission source. Calculated using DEFRA 2023 data transfer emission factors (kgCO₂e per GB). Appears in the run detail panel alongside runner compute and AI inference.
Idle runner overhead tracking — CI machines consume energy even when idle (OS processes, monitoring daemons, hypervisor overhead). EmitCI now estimates and surfaces idle runner overhead as a separate cost and carbon line item. Helps quantify the true cost of over-provisioned runners and runner warm pools.
Security warnings — EmitCI now emits structured security warnings for anomalous patterns detected during ingestion: unusual token spike (>10× baseline), unrecognised AI provider, malformed run attribution, and suspicious API call frequency. Warnings appear in the run detail panel with a severity level and recommended action. Available on all plans.
Multi-platform onboarding — Google and email sign-in users now get a guided 'Choose your CI platform' flow instead of the GitHub App install screen. Supports Bitbucket Pipelines (workspace slug + App Password), Azure DevOps (org/project + PAT), CircleCI (personal API token), and Jenkins (URL + username + API token). Each platform includes inline credential instructions and a security summary.
Onboarding correctly routes by auth provider: GitHub → GitHub App install, GitLab → GitLab pipeline polling, Google/email → CI platform selector. No more dead-end 'Install GitHub App' screen for non-GitHub users.
After connecting a non-GitHub CI platform, users can immediately add a second platform (e.g. Bitbucket + CircleCI) before proceeding to the dashboard.
Google sign-in — 'Continue with Google' is now available on the login page. Works with any Google or Google Workspace account. If your Google email matches the billing email on an existing account (GitHub or GitLab sign-in), EmitCI automatically links both methods to the same account — no duplicate installation created.
Auditor share links — share a read-only, time-limited ESG report URL with external auditors. No account required for the recipient. Links expire after 30, 60, or 90 days and can be revoked instantly. Every access is timestamped and counted for your audit trail.
Optional PIN protection for share links — toggle 'Require PIN to view' to add a 4–8 digit numeric PIN. PIN is hashed server-side (PBKDF2-HMAC-SHA256, 200k iterations) and never stored in plain text. The PIN is displayed once after link creation for the sender to share via a separate channel.
PIN rate limiting and lockout — 5 wrong attempts per IP per 15 minutes triggers a 15-minute IP block. 10 total wrong attempts permanently locks the link. Each attempt shows remaining count. Locked links require reissue.
Reissue share links — revoke a locked, expired, or lost-PIN link and create a replacement in one click. Same report parameters, new URL, optional new PIN.
EU/UK VAT collection — Stripe Tax is now enabled. VAT is automatically calculated and collected at checkout based on the customer's billing country (20% UK, 19–27% EU). Business customers can enter their VAT number for reverse-charge zero-rating. Tax invoices generated automatically by Stripe.
AI inference carbon tracking — measure the CO₂ footprint of OpenAI, Anthropic, Google, Cohere, and Mistral API calls made during CI. Carbon is estimated using research-based per-model energy factors (Patterson et al. 2022, MLPerf v4.0) × provider grid intensity. All figures are labeled as estimated in the dashboard.
emitci-ai Python SDK — pip install emitci-ai. Wrap openai.OpenAI() or anthropic.Anthropic() with tracker.wrap_openai() / tracker.wrap_anthropic(). Usage is intercepted transparently after each API call and reported in a background thread — zero latency impact on CI. Manual reporting also available via tracker.report(provider, model, input_tokens, output_tokens).
emitci/report-ai@v1 GitHub Action — composite action that posts AI usage to EmitCI after any CI step that calls an AI API. Inputs: token (EMITCI_TOKEN), provider, model, input_tokens, output_tokens, api_calls. Outputs: co2_grams, energy_kwh. Never blocks CI — non-zero exit codes from the report step are suppressed.
POST /api/v1/ingestion/ai-usage — REST endpoint for manual AI usage reporting. Accepts Bearer token (EMITCI_TOKEN) or session cookie. Returns estimated co2_grams, energy_kwh, and the normalized model name. Supports batch reporting (api_calls field).
GET /analytics/ai-usage?days=30 — new analytics endpoint returning total AI CO₂ vs runner CO₂ for the period, breakdown by model (call count, tokens, co2_grams), and breakdown by repo. AI carbon is expressed as a percentage of total pipeline carbon.
AI carbon in run analytics — run detail and run list views now include ai_co2_grams, ai_energy_kwh, and has_ai_inference fields. Per-event AI inference breakdown (provider, model, tokens, source) shown in the run step detail panel.
Opt-in log scanning — installations can enable ai_log_scan_enabled in Settings to have EmitCI scan job logs post-ingestion for AI usage patterns (OpenAI prompt_tokens/completion_tokens, Anthropic input_tokens/output_tokens). Detected usage is automatically attributed to the run. Never blocks ingestion.
DB migration 100 — new ai_inference_events table (provider, model, call_type, input/output tokens, co2_grams, energy_kwh, source) linked to installations and workflow runs. ai_log_scan_enabled flag added to installations.
Emissions page (/scope3) — full GHG inventory in one place: Scope 1 (direct), Scope 2 (electricity), and Scope 3 (cloud, CI/CD, hardware, SaaS) with a grand-total summary strip, by-layer stacked bars, by-provider breakdown, and YoY badge vs locked base year. Access restricted to Manager and Admin roles.
Scope 1 & Scope 2 manual declarations — declare direct emissions (office gas, vehicles, generators) and purchased electricity (annual kWh + grid factor). Supports multi-year filings: each year is stored independently with UNIQUE(installation_id, reporting_year) so FY2025 and FY2026 records coexist without overwriting.
Third-party assurance tracking — each Scope 1 and Scope 2 declaration now records assurance level (none / limited / reasonable), provider name, engagement date, and reference number per reporting year. Assurance fields are exported into CDP C6.1c and C6.3e Verification columns automatically.
SaaS tool emissions card — declare SaaS spend (Slack, GitHub, Jira, Datadog, etc.) and EmitCI converts to monthly CO₂ using DEFRA 2023 spend-based factors (0.14 kgCO₂e/USD). Totals roll into the Emissions page grand total.
Base year locking — set a GHG Protocol base year; EmitCI locks that period from deletion by the data retention sweep and shows YoY % change badge on the Emissions page. Closed periods are immutable once locked.
Compliance exports: Methodology PDF (ReportLab, covers GHG boundary, data sources, emission factor table, calculation formulas, uncertainty bounds), CSRD CSV (ESRS E1-6 aligned, all Scope 1/2/3 categories with completeness statements), CDP Excel workbook (C6.5 format, C6.1c/C6.3e Verification columns populated from assurance data). All three gated to Team+ plans.
SB 253 company profile — declare annual revenue, California nexus, and GHG boundary method (operational control / financial control / equity share). EmitCI computes SB 253 applicability server-side and shows a 7-item readiness checklist with filing deadline strip (colour-coded: red = past due, amber = upcoming).
Resource tag filtering — cloud resources now store AWS cost allocation tags, GCP labels, and Azure tags in a JSONB column. Tag key/value dropdowns on the Emissions page filter by-layer and by-provider breakdowns.
CO₂ unit labels standardised to full GHG Protocol notation: gCO₂e, kgCO₂e, tCO₂e, ktCO₂e (was abbreviated g/kg/t/kt which was ambiguous).
Nav Insights dropdown: 'Scope 3' entry renamed to 'Emissions' to reflect full Scope 1, 2 & 3 coverage. URL /scope3 unchanged.
8 new cost-reduction rules: duplicate_trigger (push + pull_request double-billing), branch_sprawl (>35% non-main branch runs), low_deploy_ratio (CI:deploy > 30:1), dead_steps (steps completing in <3 s), artifact_bloat (upload steps >45 s), windows_runner_tax (Windows runners without Windows-specific tooling), tight_timeout (timeout >4× observed max runtime), matrix_redundancy (4+ version values in a matrix dimension).
suboptimal_runner_region rule — detects self-hosted runners operating in a high-carbon cloud region when a lower-carbon alternative exists in the same provider-continent group at identical cost. Shows CO₂ saving only (no dollar change). Includes a static intensity table for 60+ AWS, Azure, and GCP regions with continent-scoped groupings to avoid cross-continent latency recommendations. Explicit disclaimer: based on 12-month grid averages (IEA/Ember 2024); real-time intensity varies.
Recommendations management page (/recommendations) — all findings across every repository in one place, grouped by repo. Tabs for Open / Resolved / Dismissed. Mark individual recommendations resolved or dismissed; re-open any time. The savings headline in the dashboard widget now links to this page.
ingestion.py now propagates branch, workflow_name, run_attempt, and job duration_seconds into run dicts, enabling the new branch_sprawl, low_deploy_ratio, and duplicate_trigger rules to access these fields.
Docs: Recommendations section updated with all 17 rule IDs (was 11), a new Managing Recommendations subsection covering the /recommendations page, and Tier 2 rules expanded with the 3 new YAML rules.
7 new cost-reduction recommendation rules: Slow test suite detection (sharding opportunity when avg test step > 20 min), Poor cache key quality (flags hashFiles('package.json') instead of lockfile), Unconditional deploy job (deploy jobs in PR workflows without branch guards), Monorepo path filter gaps (monorepo workflows missing paths: filters), Test parallelization opportunity (test step dominates > 70% of job duration), macOS → Linux opportunity (macOS runners without iOS/Swift tooling), and Matrix explosion detection (matrix builds with ≥ 15 combinations).
Self-Hosted Break-Even Calculator — a new dashboard card that estimates how many months until a self-hosted EC2 spot instance ($0.015/hr) pays off vs GitHub-hosted runners, based on your last 30 days of usage. Only shows when you're not already on self-hosted.
Test Suite Growth Projection — a new dashboard card that fits a linear trend to your weekly test step durations and projects cost 60 days ahead. Shows when your test suite is growing faster than 30 seconds/week, so you can act before costs compound.
Dollar estimates now populated for two previously $0 rules: fail-fast disabled (estimates wasted runner minutes based on matrix size × 20% failure rate) and Docker layer cache (uses actual build step durations from your run history to calculate 60% rebuild savings).
Industry benchmarks (compare endpoint and all-repos leaderboard) now correctly accessible on the Free plan — v2.1 opened benchmarks to all plans but the backend was still enforcing a Starter gate. Fixed.
Quick tips section in recommendations now loads correctly for authenticated users — was sending unauthenticated requests and receiving 401.
Goals widget no longer triggers a 402 Payment Required error for Free plan users — the dashboard now skips the goals/progress fetch for free tier users, eliminating the console error.
Starter plan price raised to $99/mo ($990/yr). Annual subscribers save $198/yr (2 months free). Existing customers are grandfathered at their current price.
Team plan overage rate raised to $1.50 per 1,000 runs (was $0.80). Included quota remains 100,000 runs/month.
Free plan now includes 10 automated AI reviews per month — EmitCI-initiated code-reviewer comments on energy-anomaly PRs, powered by Claude Haiku. The same smart filters apply: runs under 1 Wh are skipped, and the same commit SHA is only reviewed once per month.
Free plan now includes industry benchmarks & runner recommendations — compare your CO₂/run against anonymised peers in the same language and runner category, and get ranked, specific runner right-sizing suggestions. Previously a Starter+ feature.
Pricing page, FAQ, and comparison table updated to reflect new free tier capabilities.
Pricing update: Enterprise plan base price raised to $3,000/mo (was $2,000), included runs reduced to 300k/mo (was 2M) so overage kicks in at realistic usage levels. Enterprise overage rate reduced to $0.40/1k runs (was $0.50). ESG Reports add-on raised to $299/mo (was $149) to better reflect the value delivered vs ESG consulting costs.
Green Windows widget now works for customers who supply their own Electricity Maps API key (BYOK) — previously the dashboard always showed 'coming soon' even when a customer key was configured, because the backend only checked the platform-level environment variable.
Green Windows key resolution now follows a priority chain: customer BYOK key (Settings → Integrations → Electricity Maps) takes precedence over the platform key. Both /forecast and /forecast-all endpoints updated.
Green Windows widget is now hidden entirely when no Electricity Maps key is available (platform or BYOK) — the 'coming soon' placeholder no longer appears in the dashboard.
Docs: new Enterprise section covering multi-org support, configurable retention (up to 5 years), extended backfill, SSO+SCIM, IP allowlisting, MSA+DPA, SOC 2, SLA tiers (P1/P2/P3), annual invoicing, and priority runner classification — all with setup instructions and contact paths.
FAQ: Enterprise plan description updated to reflect the full feature set. New entries added for: what Enterprise includes beyond Team, multi-org support, SOC 2 / security questionnaire, invoice billing, and the 99.9% uptime SLA.
FAQ and docs data retention updated: Enterprise now shows 'up to 5 years (configurable)' instead of the previous fixed '2 years'.
Docs quickstart: backfill note updated to mention Enterprise extended backfill (up to 2 years of history).
Enterprise plan expanded with procurement and compliance features — multi-org support, IP allowlisting, custom MSA + DPA, SOC 2 Type II report on request, 99.9% uptime SLA (P1 <4h), 90-day API deprecation notice, annual invoicing with PO numbers, extended backfill (up to 2 years), and priority runner classification (<1 hour).
SSO / SAML now includes SCIM provisioning (planned) — automatic user lifecycle management synced from Okta, Azure AD, or any SAML 2.0 provider.
Enterprise data retention raised to 'up to 5 years' (configurable) for regulated industries, replacing the previous 2-year hard limit.
Enterprise plan description updated to lead with the compliance and procurement story ('regulated industries, compliance teams, and large engineering orgs') rather than generic ESG language.
Enterprise CTA changed from 'Contact Sales' to 'Book a Demo' — links to /enterprise inquiry page. Both the plan card and comparison table bottom row updated.
Mid-month plan upgrade resets run counter immediately — free-plan customers who upgrade to a paid plan now receive their full new quota straight away rather than inheriting their free-tier usage for the rest of the month.
Mid-month plan downgrades are now deferred to the next billing period — the new lower-tier plan and quota take effect at renewal, not immediately. Stripe issues a prorated credit for the unused days. Settings → Billing shows a notice with the scheduled change date.
ESG data webhooks — push monthly GHG data automatically to Watershed, Persefoni, Salesforce Net Zero Cloud, or any custom HTTPS endpoint. Configure from Settings → Integrations → ESG Webhooks. Failed deliveries are retried automatically up to 3 times.
Integrations page audited and corrected: Buildkite and AWS CodeBuild (not yet implemented) removed; Jenkins added with correct adapter details; CI platform count corrected to 6; cloud region count updated to 75+.
Integrations page: new Developer Tools section covering GitHub Measure Action, VS Code extension, Chrome extension, and CLI. Slack card updated to document the /emitci slash command.
Docs: ESG data webhooks fully documented under ESG Reports, including supported targets (Watershed, Persefoni, Salesforce Net Zero Cloud, custom) and retry behaviour. ESG webhooks also listed in Exports & data section.
FAQ: mid-month upgrade answer updated to reflect that the run counter now resets to zero immediately on upgrade. New entry added for mid-month downgrades explaining the period-end deferral and prorated Stripe credit.
Developer tools suite — GitHub Measure Action, VS Code extension, Chrome extension, and CLI (npx emitci) are now available on all plans including Free.
DORA Metrics (Team+) — Deployment Frequency, Lead Time for Changes, Change Failure Rate, and MTTR now tracked alongside CO₂/deployment as the 5th DORA metric. Dashboard teaser with upgrade prompt shown to Free and Starter users.
Public leaderboard opt-in (Starter+) — organisations can now opt in to appear on the public efficiency leaderboard, ranked by average CO₂ per run.
Navigation restructured — Leaderboard, Benchmarks, Attribution, and Certification moved under /insights/; Groups moved to /settings/groups; Billing usage moved to /settings/billing; Anomaly detection moved to /analytics/anomalies.
Slack integration — row on pricing page now reflects full scope: budget alerts, weekly digest, and /emitci slash command (Team+).
Enterprise pricing now displays 'from $2,000/mo' on the pricing page and comparison table, replacing the opaque 'Custom' label.
Docs updated: Enterprise data retention corrected to 2 years (was incorrectly listed as 5), supported CI platform count updated to 6, and public leaderboard URL updated to /insights/leaderboard/public.
Free plan run limit corrected to 500 runs/month across pricing page, FAQ, terms, welcome email, and blog — several pages were still showing 1,000.
Starter overage rate raised to $2.50 per 1,000 runs (was $1.50) — pricing page, FAQ, and backend billing config now consistent.
Memory energy modelling — DRAM power now estimated separately per step using per-step utilization profiles (0.10–0.80 of installed memory). Previously memory was excluded from the model entirely.
ARM runner support — ubuntu-24.04-arm, ubuntu-22.04-arm, and ubuntu-latest-arm (AWS Graviton 3, 4 vCPUs, 16 GB) are now recognised out of the box.
Region-specific PUE for AWS (11 regions, 1.10–1.20) and GCP (7 regions, 1.09–1.13) — previously all non-Azure providers used a single provider-level average.
Nightly registry auto-patch — when an unrecognised runner label or cloud region is detected, Claude researches its specs via web search and opens a pull request to add it within 24 hours.
Carbon intensity zone coverage expanded from 14 to 75 cloud regions — eliminating the static fallback for all major Azure, AWS, and GCP regions worldwide.
Updated static carbon intensity data: Germany (350→300 gCO₂/kWh), Australia (660→560 gCO₂/kWh) to match current grid averages.
Windows runners now apply a 10% overhead factor over equivalent Linux runners to account for higher OS idle CPU draw.
macOS-13 runners were misclassified as Apple Silicon — corrected to Intel Cascade Lake (matching GitHub's actual hardware).
macOS-14 and macOS-15 memory was reported as 7 GB — corrected to 14 GB.
API key preview in Settings now shows the last 4 characters only (was first 8, which revealed the provider prefix).
Cloud Carbon Footprint (CCF) SPECpower benchmarks replace estimated TDP values for 46 of 51 runner types — energy estimates are now research-backed per-vCPU values.
Integrations page — full listing of all supported CI platforms, monitoring tools, project management, and compliance exports.
Docs page — comprehensive documentation covering quickstart, methodology, budgets, API, and GDPR.
Changelog page (this page) — visible release history.
Calculator now shows idle–peak watt range per runner with CCF badge for research-backed specs.
/estimate/runners API now returns pretty-printed JSON with min_watts, processor_type, and data_source fields.
Dashboard step breakdown now auto-selects the top repository on load.
Energy trend chart date labels no longer throw on non-string values.
AI-powered runner classification — unknown self-hosted runner labels are automatically classified by Claude/GPT for vCPU count and TDP. Results cached permanently.
Green scheduling advisory — when a run completes during a high-carbon grid window, EmitCI posts an advisory comment suggesting when to schedule future runs.
Anomaly detection — z-score outlier detection flags runs using >2× normal energy. Alerts go to Slack and email.
Datadog integration — stream emitci.energy_kwh and emitci.co2_grams as custom metrics on every run.
PR carbon comments can now be AI-generated (Claude or GPT) on paid plans and BYOK — natural language, context-aware.
Benchmark engine now tracks p25/p50/p75 per language and workflow type.
AI assistant in the dashboard — ask natural language questions about your pipeline carbon data.
BYOK (Bring Your Own Key) — configure your own Anthropic or OpenAI API key in Settings for AI features on any plan.
Linear and Jira integration — high-impact recommendations automatically create issues in your project management tool.
SCI Score — Green Software Foundation Software Carbon Intensity score calculated per run, with A+–F grading.
Rule engine adds three statistical rules: benchmark underperformer, energy trend degradation, and anomalous runs.
Stripe metered billing — Team plan overage runs are automatically reported to Stripe.
Race condition in run counter could double-count the first run after a monthly reset.
Green Time Scheduler — automatically reschedules cron workflows to the lowest-carbon grid window within ±3 hours using Electricity Maps forecast data.
ESG reports — one-click PDF generation mapped to ESRS E1-6 and GHG Protocol Scope 3 Category 3.3. IPCC AR6 GWP values, renewable energy attribution, run-level audit trail. SHA-256 integrity-verified.
Carbon budget merge blocking — when a repo hits 100% of its monthly budget, EmitCI can set a failure commit status on open PRs.
Team management with RBAC — invite members, assign admin/member roles, per-team carbon budgets.
Backfill API — import up to 90 days of historical CI runs after initial install.
Step-level energy breakdown now shows percentage of total workflow energy per step.
Electricity Maps live carbon intensity replaces static averages when API key is configured.
GitHub App — install in one click, no YAML changes. Receives workflow_run events via webhook.
Energy estimation — GreenAlgorithms v2.2 methodology. Energy = TDP × utilization × duration × PUE, with per-region carbon intensity.
Dashboard — per-repo energy trend, step breakdown, SCI grade, CO₂ equivalent metrics.
Optimization recommendations — 6 deterministic rules covering caching, runner sizing, parallelism, path filters, redundant runs, and failing steps.
PR carbon bot — automatic comment on every pull request with CO₂ for the run, biggest emitter step, and top recommendation.
README badge — embeddable SVG showing SCI grade and average CO₂/run, updated hourly.
Public carbon estimator API — POST /estimate and GET /estimate/runners available without authentication.
Support for GitHub Actions, CircleCI, GitLab CI, Azure Pipelines, AWS CodeBuild, Buildkite, and Bitbucket Pipelines.
New releases are announced on our blog and in the product dashboard.