Chart · millijoules a run
sum by region, in energy.
neo 1.55 mJ in the energy run. Closest: Polars at 32.8×. Farthest: Spark at 1,518×.
Embed anywhere.
<iframe src="https://n0.is/embed/chart/sum-energy" title="sum by region, in energy" width="100%" height="520" loading="lazy" sandbox="allow-scripts" referrerpolicy="no-referrer" style="border:0;border-radius:12px"></iframe>Every engine's multiple of neo
- neo1×
- Polars32.8× · 50.9 vs 1.55
- DuckDB46.7× · 72.3 vs 1.55
- pandas58.5× · 90.6 vs 1.55
- Spark1,518× · 2,352 vs 1.55
Bars to scale, from zero to the slowest engine. The gray pair is the engine's measurement and neo's in the same run, in mJ.
What this measures
Total the amount column for each of five regions: a grouped sum, the kernel every dashboard runs. Energy is the same run in millijoules: what the machine billed each engine's whole process tree, with its draw at rest subtracted for the seconds of the window. neo's pool is told to rest after the kernel, as the editor tells it.
What neo is held to
The JavaScript loop's result to the bit. A floating-point sum depends on the order it is taken in, and neo is held to the row order's answer whatever it does to get there.
Each side, this kernel only
Polars32.8× neo · neo vs Polars
timed("agg", lambda: df.group_by("region").agg(pl.col("amount").sum()))DuckDB46.7× neo · neo vs DuckDB
timed("agg", lambda: con.execute("SELECT region, sum(amount) FROM t GROUP BY region").fetchall())pandas58.5× neo · neo vs pandas
timed("agg", lambda: df.groupby("region")["amount"].sum())Spark1,518× neo · neo vs Spark
timed("agg", lambda: df.groupBy("region").agg(F.sum("amount")).collect())neo · confidential
neo's kernels, the ports written in-house to beat them, and the techniques behind both stay with the engine. Nothing about how the numbers were made is withheld: the method, the checks every engine had to pass, every number and every place neo is behind are on this page. The engine itself we keep confidential, because we don't want it getting into the wrong hands. The binaries run on request and reproduce every number here.
Measured on Apple M5 Max, 18 cores, 26.4.1, 2026-10-11. Every number here is also on the comparison page of its engine, with how it was taken and the caveats.