ev-sim is Cornell Electric Vehicles' autonomous-driving simulation platform, built for reproducible development and testing across interactive and headless workloads.
- Deterministic simulation: a shared fixed-step kernel powers browser and headless execution with seeded resets, reproducible state, and trajectory hashing.
- Parallel autonomy/RL: isolated headless environments run through a gRPC supervisor with Python Gymnasium / Stable-Baselines3 integration and shared-memory sensor transport.
- Vehicle & sensor simulation: LiDAR, camera, IMU/GNSS/odometry, physics, telemetry, binary logging/replay, scenario authoring, and ROS-oriented integration.
Note
This is currently in alpha. The API is not stable, and the documentation is incomplete. Please reach out to the maintainers if you want to contribute or use this project.
You need Node.js 20 or later - download it from nodejs.org.
curl -fsSL https://raw.githubusercontent.com/cornellev/ev-sim/main/install.sh | bashThe installer writes the clone to ./ev-sim.
To start up the app, run these commands:
cd ev-sim
npm run devThe app uses port 3000 when PORT is unset.
Open http://localhost:3000 in a browser.
This command installs ev-sim into a chosen directory.
The --start flag runs the app when that command finishes.
curl -fsSL https://raw.githubusercontent.com/cornellev/ev-sim/main/install.sh | bash -s -- --dir ~/ev-sim --startIf ev-sim is already on this computer, run these commands:
npm install
npm run devThe app opens on Simulation. Press Escape to open the workspace switcher.
- Simulation. Run vehicles, sensors, and scenarios.
- Environment Editor. Edit environments and scenes.
- Vehicle Editor. Create and inspect vehicle manifests.
- Run Configuration. Edit simulation manifests.
- Scenarios. Create test scenarios.
- Experiment Suite. Experiment with scenarios.
- Headless Runs. Queue and monitor server runs.
- Scripting Canvas. Build simulation logic with blocks.
- Bindings. Bind scripts to signals.
- Replay. Inspect recorded simulations.
- Analysis. Graph live data.
- Logs. Organize recorded simulations.
The switcher also has a Plugins pane. Use that pane to install a simulator package.
The Analysis workspace graphs signals from a live run or a recorded log.
The headless runner includes a CLI and a worker. The Python package is a client of that runner. This repository builds both as internal artifacts. This repository does not publish them on npm or on PyPI.
npm run dist:headlessThat command writes an npm tarball, a Python wheel, a Python sdist, a compatibility manifest, and SHA-256 checksums.
You can download the Internal headless candidate artifact from the manual workflow.
Install that artifact when you do not need the app.
Release rules are in Headless release and CI gates.
Jetson steps are in Jetson deployment.
In this repository the runner command is ./bin/cev-sim.js.
Command details are in Headless CLI.
The Headless Runs workspace queues server runs.
The same workspace monitors those runs.
The Python package is a Gymnasium client and a Stable-Baselines3 client for the JavaScript supervisor. Adapter details are in Python adapter.
This repository is a Cursor Agent Plugin.
The plugin files are plugin.json, mcp.json, and skills/cev-sim/.
An import gives the agent the cev-sim skill.
Cursor invokes that skill automatically.
An import also registers the MCP endpoint http://localhost:3000/mcp.
The transport is Streamable HTTP.
Import does not run the app.
Run npm run dev or npm start before MCP discovery.
The server id is cev-sim.
Load the plugin in one of these ways:
- Import the Git URL of this repository in Cursor.
- From the Cursor CLI, run
agent --plugin-dir /path/to/this/repo. - Copy or symlink this repository into
~/.cursor/plugins/local/cev-sim. Reload the Cursor window.
MCP setup without the plugin is in MCP Server.
Run the bundle validator:
node skills/cev-sim/scripts/validate.mjsA simulator package is not the agent plugin.
Each package has its own plugin.json.
Open the Plugins pane to install a package.
You can also run cev-sim-plugin.
The package contract is in Plugin API.
- Documentation index
- Getting started
- Architecture
- Development workflow
- Environment editor
- Earth import
- Simulation
- Visual scripting
- Script bindings
- Vehicle manifests
- Run manifests
- Headless CLI
- Python adapter
- Headless release and CI gates
- Jetson headless deployment
- Plugin API
- Telemetry, logging, replay, and analysis
- ROS integration
- MCP Server
- Assets
- Troubleshooting
CommonRoad scenarios are not in this repository.
Download them from https://gitlab.lrz.de/tum-cps/commonroad-scenarios.
Put the scenarios folder in public/.
The local path is public/scenarios.
Example browser path:
/scenarios/recorded/NGSIM/Peachtree/USA_Peach-1_1_T-1.xml
Asset rules are in Assets.
The Apache License 2.0 covers this repository. It also covers the headless npm artifact and the Python package.



