Bring standard development ecosystems into CAD/BIM hosts — without replacing them.
The development platform for BIM and CAD. Run scripts and add-ins in the live session, test them in-process, and let AI assistants work with your open model, all from one add-in.
- Run code — CPython¹, IronPython², C#
.csx, F#.fsx, and compiled .NET.dll³ - Debug — breakpoints in VS Code or PyCharm for CPython and IronPython, your IDE for .NET code
- Test in the host — pytest, NUnit, TUnit and MSTest inside a real Revit or AutoCAD session
- Connect AI — MCP for Cursor, Claude, GitHub Copilot, Codex and more, extensible with your own Python or C# toolsets
- See what happens — color-coded logs with stack traces, plus 3D geometry preview in Revit
¹ CPython 3.14 with inline dependencies (PEP 723 + Pixi) · ² pyRevit-compatible · ³ hot reload
| Host | Versions | Run code | Test | AI (MCP) | Geometry preview |
|---|---|---|---|---|---|
| Revit | 2022–2027 | ✓ | ✓ | ✓ | ✓ |
| AutoCAD, Civil 3D, Plant 3D | 2022–2027 | ✓ | ✓ | ✓ | — |
Other AutoCAD-based products load the same add-in. Plant 3D embeds its own CPython, so it uses the host's Python version and installs packages with uv from PyPI.
1. Install. Download RevitDevTool-Setup.exe from Releases and run it. It installs for the current user and needs no administrator rights.
2. Write a script. Create hello_script.py in an empty folder. Dependencies go in the header:
# /// script
# dependencies = ["polars"]
# ///
import polars as pl
from Autodesk.Revit import DB
doc = __revit__.ActiveUIDocument.Document
walls = DB.FilteredElementCollector(doc).OfClass(DB.Wall)
df = pl.DataFrame({"name": [w.Name for w in walls]})
print(df.group_by("name").len())3. Run it. Open the RevitDevTool panel in Revit (or the DevTools panel in AutoCAD), add the folder, click the script, and read the output in the Trace panel. Dependencies install on first run.
Next: run your first script.
Full guides live on the documentation site.
| I want to… | Read |
|---|---|
| Install and run a first script | Installation · First script |
| Choose a script runtime | Execution Overview |
| Use Python packages | Python Dependencies |
| Debug Python in VS Code or PyCharm | Attach Debugger |
| Write tests that run in the host | Testing Overview |
| Connect an AI assistant | MCP Protocol |
| Customize logging and 3D preview | Log Level · Geometry Visualization |
| Fix a problem | Troubleshooting · Known Limitations |
| Sample | Contents |
|---|---|
samples/PythonDemo/commands |
Data analysis (Polars), WebView2 dashboard, logging formats, 3D geometry preview, scikit-learn, shapely, trimesh |
samples/PythonDemo/mcp_toolset |
Custom MCP toolset in Python |
samples/CSharpDemo · CSharpScriptDemo · FSharpScriptDemo |
.NET add-in, C# script and F# script |
samples/McpToolsetDemo · RevitMcpToolSet |
Custom MCP toolsets in C# |
samples/DevTools.NUnit.SampleTests and its TUnit / MSTest siblings |
In-host .NET tests |
Walkthroughs: Examples.
Contributions are welcome. Start with the repository documentation map, which separates product behavior, architecture and contributor workflow. Keep shared platform code in DevTools.* and host-specific code in RevitDevTool or AcadDevTool.
git clone https://github.com/trgiangv/RevitDevTool.git
cd RevitDevTool
# stop the host, then build and deploy
scripts/build-host.ps1 -HostApp Revit -Year 2025
# or build the solution without touching a running host
dotnet build RevitDevTool.slnx -c "Debug.Autodesk.2025"Requires the .NET SDK pinned in global.json. Configurations run from Debug.Autodesk.2022 to Release.Autodesk.2027. More: Build From Source.
- RevitLookup — DirectContext3D implementation reference
- RevitDevTool (original) — project inspiration
- RevitAddinManager — add-in hot reload patterns
- pyRevit and RevitPythonShell — Python scripting in Revit
- RevitToolkit — Revit context for test projects
- Pixi — package management
- Python.NET — Python and .NET bridge
MIT — see LICENSE.