The reference table for anyone writing code against Revit, or deciding which version to learn on.
Revit releases and their .NET target
| Revit | Released | .NET target (TargetFramework) |
ElementId |
|---|---|---|---|
| 2021 | Apr 2020 | .NET Framework 4.8 — net48 |
int |
| 2022 | Apr 2021 | .NET Framework 4.8 — net48 |
int |
| 2023 | Apr 2022 | .NET Framework 4.8 — net48 |
int |
| 2024 | Apr 2023 | .NET Framework 4.8 — net48 |
long |
| 2025 | Apr 2024 | .NET 8 — net8.0-windows |
long |
| 2026 | Apr 2025 | .NET 8 — net8.0-windows |
long |
| 2027 | Apr 2026 | .NET 10 — net10.0-windows |
long |
Two hard breaks in that table:
- 2024 → 2025 is the .NET Framework → modern .NET jump. Everything needs recompiling, and some APIs and third-party dependencies changed.
- 2023 → 2024 is the
ElementId.IntegerValue(int) →ElementId.Value(long) change. This broke a large number of add-ins and scripts, and it's why pyRevit needed an int64 fix for newer releases.
An add-in built against the wrong .NET target silently fails to load. No error dialog, no message — your ribbon button simply isn't there. Check the Revit journal for the load exception.
Multi-targeting one project
The standard pattern: one .csproj producing a DLL per Revit version, with conditional
compilation for the API differences.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>
<UseWPF>true</UseWPF>
<LangVersion>latest</LangVersion>
<Configurations>Debug R23;Debug R24;Debug R25;Debug R26;Debug R27</Configurations>
</PropertyGroup>
<!-- Pick the Revit API version per configuration, and define a symbol for it -->
<PropertyGroup Condition="$(Configuration.Contains('R23'))">
<RevitVersion>2023</RevitVersion>
<TargetFramework>net48</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2023</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('R27'))">
<RevitVersion>2027</RevitVersion>
<TargetFramework>net10.0-windows</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2027</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autodesk.Revit.SDK" Version="$(RevitVersion).*"
PrivateAssets="all" ExcludeAssets="runtime" />
</ItemGroup>
</Project>ExcludeAssets="runtime" / Copy Local = false matters: never ship RevitAPI.dll
alongside your add-in. Revit loads its own.
Then guard the API differences:
public static long AsLong(this ElementId id)
{
#if REVIT2023 || REVIT2022 || REVIT2021
return id.IntegerValue;
#else
return id.Value;
#endif
}The same shape handles DisplayUnitType → UnitTypeId (changed in 2021) and the
ForgeTypeId migration.
The community convention for the .addin manifest and DLL layout is one folder per
version:
%AppData%\Autodesk\Revit\Addins\2026\MyAddin.addin → ...\bin\2026\MyAddin.dll
%AppData%\Autodesk\Revit\Addins\2027\MyAddin.addin → ...\bin\2027\MyAddin.dllDynamo
Dynamo ships inside Revit, and its version is tied to the Revit release. The relevant break is the same .NET one:
- Dynamo 2.x — .NET Framework, Revit 2024 and earlier.
- Dynamo 3.x — .NET 8+, Revit 2025 and newer.
Consequence for packages: once a package migrates to .NET 8 for Dynamo 3.x, it stops loading in older Dynamo. Many popular packages now publish separate versions. Check the package's stated compatibility against your Revit release before you build a workflow on it.
Revit 2027's move to .NET 10 was reported as bringing faster and more reliable Dynamo execution.
pyRevit
pyRevit tracks Revit releases quickly. As of writing, the current stable line is 6.4.0 (released April 2026), which includes Revit 2027 support including addin-path and ADC v2027 fixes; Revit 2026 support landed in the 5.1.0 line.
Practical notes:
- Install the release that lists your Revit version. The installer offers per-version options.
- pyRevit uses
net48for Revit 2024 and earlier andnet8.0-windowsfor 2025–2026, matching the table above; 2027+ requires the .NET 10 target. - pyRevit bundles both IronPython and CPython engines and lets you choose per script. IronPython talks to the .NET API frictionlessly; CPython gets you the real package ecosystem (numpy, pandas, requests) at the cost of a bridge for .NET calls.
- Check the pyRevit release notes rather than assuming — it moves faster than Revit does.
What shipped recently, and whether it matters
Revit 2026 (April 2025)
- Accelerated Graphics as a tech preview — GPU-driven navigation; accelerated view activation time improved by an average of 27%.
- Toposolid enhancements for sculpting and grading complex site conditions.
- Wall creation from a closed room-bounding area, and walls created by selecting existing wall and column segments.
- Duplicate layers in Edit Assembly for walls, floors, roofs, ceilings.
- Worksharing optimized for WAN — meaningfully faster syncs for distributed teams.
- ReCap Mesh plugin for large reality-capture datasets without killing performance.
Revit 2027 (April 2026)
- Accelerated Graphics out of tech preview — now production-supported, and compatible with graphic overrides, transparency, halftone, and linked models. This is the concrete win of the release; reported walkthrough playback improvements are large.
- AI Assistant (tech preview) — an in-Revit chat panel that can answer product questions, query the model, and automate tasks via prompts. Includes an MCP client; Autodesk has stated intent to support local and cloud MCP servers, but the Revit MCP server is announced rather than shipped.
- Rule-based numbering tool.
- Tag leader control points — start/end grips on all tag leaders, with snapping to elements.
- Extended Properties for connected data; AEC Data Model updates remain tech preview.
- .NET 10, with reported Dynamo execution improvements.
- Forma Industry Cloud workflows, Issues integration, IFC export improvements, and embodied carbon tracking.
What this means for learning
Nothing in the last three releases changes the fundamentals. Categories, families, parameters, views, schedules, and worksharing have been stable for a decade. If your firm is on Revit 2022, everything in this bootcamp applies except Toposolid (use Toposurface + Building Pad) and the accelerated graphics settings.
For automation, the version does matter, and it's the .NET row of the table above that matters most.
Choosing a version to learn on
- Match your team. File format compatibility is one-way and absolute; a 2027 file will never open in 2026.
- Otherwise, newest you're licensed for. Accelerated graphics alone makes recent releases noticeably nicer to work in.
- Check your add-ins first if you depend on any. pyRevit and the big Dynamo packages are usually current within weeks; in-house tools often aren't.
- Avoid upgrading a project mid-stream. Upgrading is one-way, and it must happen for the whole team and every linked model at once.
Sources
Version and feature details above are drawn from Autodesk's release documentation and release announcements, the pyRevit release notes, and the DynamoRevit changelog. Where a feature is a tech preview, that's stated — Autodesk's previews sometimes change substantially before they ship.