Beta These tools are in active development. Try them out and share your feedback.
Open Source · MIT License

Building energy modeling in Python and TypeScript

Open-source tooling for EnergyPlus, built on one object model in two languages. Around it: an MCP server your AI agent can drive, a visual web editor, and an engine build that runs simulations in the browser.

8.9–26.1 EnergyPlus versions
4000x Faster lookups
17k+ Weather stations
37 AI tools via MCP
Solar Alt 42.3°
Azimuth 187.2°
Surf Temp 24.7 °C
Wind 3.2 m/s
Heat Flux +12.4 W/m²
Envelope ΔT 6.8 K

Two languages.
One object model.

The same ideas — O(1) lookups, a live reference graph, IDF and epJSON treated as one format — expressed once for Python and once for TypeScript. Pick the runtime, not the compromise.

Python

Scripting, batch runs, AI agents, editor tooling
Python
Core Library

idfkit

A fast, modern Python toolkit for EnergyPlus with O(1) lookups, automatic reference tracking, and zero dependencies.

  • O(1) dictionary-based object indexing
  • Live cross-object reference graph
  • IDF + epJSON dual format support
  • 3D geometry & thermal calculations
  • Sync, async & batch simulation
  • EnergyPlus 8.9 through 26.2
pip install idfkit
View on GitHub
MCP Server
AI Integration

idfkit-mcp

An MCP server that exposes building energy modeling to AI agents. Let Claude author, validate, and simulate EnergyPlus models.

  • 37 MCP tools for full workflow
  • Schema discovery & validation
  • Model authoring & modification
  • Weather station integration
  • Simulation execution & results
  • stdio & HTTP transport modes
uvx idfkit-mcp
View on GitHub
VS Code
Editor Extension

idfkit-lsp

Language Server and VS Code extension for intelligent idfkit editing. Autocomplete, hover docs, signature help, and AST-based type inference.

  • Object type & field autocomplete
  • Inline hover documentation
  • Signature help for doc.add() calls
  • AST-based type inference
  • VS Code extension included
  • Python 3.10+ / pygls
pip install idfkit-lsp
View on GitHub
Reference
E+ Documentation

idfkit-docs

Interactive EnergyPlus Input/Output reference documentation. Browse object types, fields, and constraints — all searchable and hyperlinked.

  • Searchable object type reference
  • Field-level docs with units & constraints
  • Hyperlinked cross-references
  • Built with Zensical
docs.idfkit.com
Claude / Codex
Agent Plugin

idfkit-plugin

A Claude Code and Codex plugin bundling idfkit's MCP server with skills, agents, and slash commands for building energy modeling.

  • Bundled MCP server & tools
  • Purpose-built skills & agents
  • Slash commands for common tasks
  • Hooks for simulation workflows
  • Claude Code + Codex compatible
  • One-command install
/plugin install idfkit
View on GitHub

JavaScript & TypeScript

Node, browsers, workers and edge runtimes
npm
TypeScript SDK

@idfkit/core

A sibling to the Python library rather than a transliteration of it. A synchronous core with async edges, so the same code runs in Node, a browser, a worker, or at the edge.

  • 858 generated interfaces per version
  • Real accessors, not a Proxy
  • Renames rewrite every reference
  • epJSON field names, verbatim
  • 760 example files round-trip byte-clean
  • ~36k objects/sec parse, write, re-parse
npm i @idfkit/core @idfkit/schemas
npm
The Simulation Engine

@idfkit/engine

Loader, worker and output parsers for EnergyPlus version 26.1.0 software compiled to WebAssembly. Verified to reproduce a native build, not to approximate one.

  • Agrees with native to 3.5e−9
  • Runs off the main thread, in a worker
  • ESO, MTR, RDD, ERR and SQL parsers
  • HVACTemplate expansion built in
  • Single-threaded — no COOP/COEP
  • Engine version = package version
npm i @idfkit/engine @idfkit/engine-assets
npm
Climate Data

@idfkit/weather

Search the TMYx station index and pull weather files browser-side. The archive is unzipped in the page and handed straight to the engine, with no server in the path.

  • 17,292 sites, 69,638 records
  • Index is 1.7 MB gzipped, fetched lazily
  • EPW and DDY from one request
  • ASHRAE climate zone per station
  • Degree days separate each 15-year window
  • rewriteUrl hook for your own proxy
npm i @idfkit/weather

Or run the simulation
on the page.

@idfkit/engine packages EnergyPlus version 26.1.0 software compiled to WebAssembly. A model built with @idfkit/core can be solved in the browser, without a server.

Loads the live demo from shoebox.idfkit.com. About 10 MB of engine on first visit, cached afterwards — then every solve is local.

A one-zone model authored with @idfkit/core and solved by @idfkit/engine. Drag a slider and it re-solves a design day in about 50 ms — fast enough that there is no Run button. Pick a weather site and it fetches the EPW and DDY in the browser and runs all 8,760 hours in about 0.7 s.

Open the demo in its own tab

Worst divergence from a native build: 3.5e−9 over 3.79 million data points. No COOP/COEP headers required. HVACTemplate objects expand unchanged.

idfkit Envelop.
Energy modeling, in your browser.

A full editor built on the same stack as everything above — visual HVAC design, 3D geometry, and in-browser simulation. No install, no server.

Web App · Free
  • Visual HVAC node-graph editor
  • Interactive 3D geometry viewer
  • Schedule editor with day/week/year views
  • Simulates in-browser on @idfkit/engine
  • Import/export IDF & epJSON
  • Dark mode & responsive design
Launch idfkit Envelop Zero installation · Just open your browser

Built for performance.
Designed for humans.

Legacy tools hold you back. idfkit is built from the ground up for speed, correctness, and developer experience.

4,000x faster

O(1) dictionary-based lookups vs linear scans. On a 1,700-object IDF, idfkit is 4,000x faster than eppy.

Reference tracking

Automatic live graph of cross-object relationships. Rename a zone and every reference updates instantly.

Zero dependencies

Core library uses only the Python standard library. Optional extras for pandas, plotting, and cloud storage.

3D geometry

Built-in Vector3D and Polygon3D classes. Calculate surface areas, zone volumes, and coordinate transforms natively.

~17,300 weather stations

Search by location or coordinates. Download EPW and DDY files. Inject design days automatically.

AI-native

MCP server with 37 tools lets AI agents author, validate, and run energy simulations autonomously.

Simulation in the browser

An EnergyPlus build compiled to WebAssembly runs in a worker on the page, with no install or server. Its results match a native build to within 3.5e−9.

Every version, 8.9 to 26.1

Both libraries bundle the schemas for 17 EnergyPlus releases. A model is read and written against the version it declares.

Typed from the schema

858 interfaces generated per version, so a misspelled field is a compile error rather than a silent run-time surprise. All 17 versions ship in ~1 MB gzipped.

Intelligent code editing

Autocomplete, hover docs, signature help, and AST-based type inference for IDF files in VS Code.

Conformance, not fixtures

The test corpus is the EnergyPlus example set. All 760 files parse, write and re-parse to a deeply equal document — 290,313 objects, zero round-trip differences.

Interactive documentation

Searchable, hyperlinked EnergyPlus I/O reference with field constraints and cross-references — all in the browser.

Up and running
in seconds.

quickstart.py
# Install
pip install idfkit

# Load a model
from idfkit import load

model = load("building.idf")

# O(1) lookup by name
zone = model["Zone"]["Office_Floor_1"]

# Automatic reference tracking
zone.name = "Main_Office"
# ^ All referencing objects update automatically

# Run simulation
results = model.simulate()
print(results.summary())
quickstart.ts
// Install
npm install @idfkit/core @idfkit/schemas

import { loadIdf, saveIdf } from '@idfkit/core/node';
import type { TypeMap } from '@idfkit/core/types/v26-1';
import { createEnergyPlus } from '@idfkit/engine';

const doc = await loadIdf<TypeMap>('building.idf');

// Typed and autocompleted, from the schema
for (const zone of doc.all('Zone')) {
  console.log(zone.name, zone.ceiling_height);
}

// Renaming rewrites every reference to the old name
doc.require('Zone', 'SPACE1-1').name = 'Open Office';

await saveIdf(doc, 'renamed.idf');

// Optional: simulate with EnergyPlus compiled to WebAssembly
const ep = await createEnergyPlus({ assetBaseUrl: '/energyplus' });
const result = await ep.run({ idf, epw });
claude_desktop_config.json
// Add to your Claude MCP config
{
  "mcpServers": {
    "idfkit": {
      "command": "uvx",
      "args": ["idfkit-mcp"]
    }
  }
}

// Then ask Claude:
// "Create an office building model
//  with 3 zones and run an annual
//  simulation for Denver, CO"
No installation needed
# Envelop runs entirely in your browser

1. Open Envelop in any modern browser
2. Import an IDF or start from scratch
3. Design HVAC systems visually
4. Edit schedules with intuitive UI
5. View 3D geometry in real-time
6. Simulate with in-browser EnergyPlus

# Powered by @idfkit/engine (WebAssembly)
# No server required
# Works offline once the engine is cached

Help shape the future
of energy modeling.

All tools are in active beta. We'd love for you to try them and let us know what's working and what isn't.

idfkit

Core Python library

Report an Issue

idfkit-mcp

AI integration via MCP

Report an Issue

idfkit-lsp

VS Code extension

Report an Issue

idfkit-docs

Reference documentation

Report an Issue

idfkit-plugin

Claude / Codex agent plugin

Report an Issue

Have a feature request or general feedback?