Features

Everything metered.
Nothing hidden.

A data science IDE where every operation — from a pandas groupby to a 100-epoch training run — carries an energy receipt.

01

Native Notebook Engine

Not a wrapper around an existing runtime. The notebook engine is built from scratch with energy metering at the kernel level. Every cell execution is instrumented for CPU cycles, memory allocation, and I/O — then converted to picojoules.

exploration.ipynb Cell [1]
# Cell [1] — Load and explore import pandas as pd df = pd.read_csv("clinical_trials.csv") df.describe() # Energy: 2,847 pJ | 124ms | 48.2 MB
model.py LSP active
# Autocomplete, go-to-definition, hover docs # Works across Python, R, Julia, MATLAB, SQL from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier( n_estimators=100, # <-- hover for docs max_depth=10, random_state=42 )
02

Python / R / Julia Intelligence

Full language server support across all six languages. Autocomplete, go-to-definition, hover documentation, inline diagnostics. Switch between Python and SQL cells with zero context loss.

03

Energy per Cell

Every cell execution produces a structured energy receipt: CPU time, memory peak, thread count, rows processed, and total picojoules. Compare cells. Find bottlenecks. Optimize what matters.

Energy Receipt 48,710 pJ
// Per-cell energy receipt cell [7] RandomForest.fit cpu 3,241 ms 48,710 pJ memory 256.8 MB peak threads 8 parallel rows 150,000 train set score 0.947 accuracy
query.sql JouleDB
-- SQL cell: aggregate with energy SELECT drug_name, COUNT(*) AS trials, AVG(efficacy_score) AS avg_efficacy FROM clinical_results GROUP BY drug_name HAVING COUNT(*) > 5 ORDER BY avg_efficacy DESC; -- Energy: 38 pJ | JouleDB native
04

SQL & Graph Queries

SQL, GraphQL, and Cypher cells execute natively against JouleDB. No external database, no network round-trips, no connection strings. Query your dataframes with SQL. Traverse knowledge graphs with Cypher. Every query metered.

05

ML Pipeline Metering

Define named pipelines. Each stage — preprocess, train, evaluate, deploy — gets its own energy receipt. Compare pipeline versions by total picojoules. Set energy budgets that fail the build if exceeded.

pipeline.py 862,597 pJ total
# Full pipeline energy tracking with data.pipeline("drug-discovery-v3") as pipe: pipe.stage("preprocess", preprocess_fn) pipe.stage("train", train_model) pipe.stage("evaluate", eval_metrics) pipe.stage("deploy", deploy_model) # Pipeline receipt: # preprocess: 2,410 pJ # train: 847,200 pJ # evaluate: 12,800 pJ # deploy: 187 pJ / request # total: 862,597 pJ
plot.py 1,204 pJ render
import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(10, 6)) ax.scatter(df["dose"], df["response"], c=df["group"], cmap="viridis") ax.set_xlabel("Dose (mg)") ax.set_ylabel("Response") plt.show() # Render energy: 1,204 pJ | 89ms
06

Data Visualization

Matplotlib, Plotly, ggplot2, Makie.jl — use your preferred library. Every render gets an energy receipt. High-resolution scatter plots on 10M points? Now you know the cost.

07

The Lift Engine

Identify expensive Python cells by their energy receipts. When ready, lift them to Joule for 10-75x energy reduction. The Lift Engine translates pandas idioms to Joule dataframe operations — same logic, same results, dramatically less energy.

lift-comparison 68x reduction
# Python (before lift) result = df.groupby("gene_id").apply( lambda g: g.nlargest(10, "expression") ) # Energy: 34,200 pJ # Joule (after lift) — same logic, 68x less energy # let result = df # .group_by("gene_id") # .apply(|g| g.top_n(10, "expression")) # Energy: 503 pJ
Cascade Levels deterministic
// 16-level deterministic cascade L0 Cache 0 pJ instant L1 Index 2 pJ tantivy L2 Federation 18 pJ multi-source L3 LLM (cheap) 400 pJ escape hatch L4 Verification 50 pJ cross-check ... L10 Deep verify 2,000 pJ multi-model
08

16-Level Cascade

AI assistance through a deterministic cascade. Cache and index first. Federation next. LLM is the escape hatch, not the default. Every level metered. You always know what answered your question and how much energy it cost.

09

Reproducible Environments

Lock files capture not just package versions but energy baselines. Share a notebook and its environment. Recipients see the same results and can compare their energy consumption against the original.

data.lock pinned
# data.lock — reproducible environment [python] version = "3.12.4" packages = [ "pandas==2.2.1", "scikit-learn==1.4.1", "torch==2.2.1", ] [energy] baseline_pj = 14203 target_pj = 187 measured_on = "2026-03-18T14:22:00Z"

Ready to meter your data science?

One install. Every cell, query, and training run — measured in picojoules.

Install Data Why Energy Metering?