VDC Plugins for Revit
A commercial suite of about 10 Revit add-ins for construction teams, and the licensing and subscription system behind it.
Problem
VDC Plugins is sold by subscription, so two things have to work together: tools that run reliably inside Revit, and a licensing system that only lets users with access in.
My role
I'm the lead developer of the add-in suite, and I contribute to UtahBIM's subscription app and storefront. I work with UtahBIM as a contractor through Upwork.
Approach
- Add-ins. About 10 tools in C# on .NET 8, for Revit 2025 and 2026, shipped in one Inno Setup installer.
- Licensing gate. Every tool goes through a shared per-tool gate that blocks unless access is confirmed. Tools from another developer were brought onto the same structure and gate, with fixes along the way.
- Ports and rules. Logic that lived in Dynamo and Python was ported to C#. Slope checks follow IPC Table 704.1, with the tolerance documented.
- Web side. Each plugin has a slug in a registry. Stripe handles organisation and personal subscriptions, and webhooks follow each subscription's lifecycle by its ID, which closed gaps where access had leaked. The storefront has a free-trial flow and installer downloads, and deploys with Docker and Prisma.

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
AccessDecision decision;
try
{
decision = TheToolkitGate.Evaluate(AppSlug, commandData.Application.MainWindowHandle);
}
catch (Exception ex)
{
// Anything unexpected inside the gate blocks the command (fail closed).
decision = AccessDecision.Blocked("The license check failed unexpectedly.\n\n" + ex.Message);
}
if (decision.Outcome != GateOutcome.Allowed)
{
TheToolkitGate.ExplainDecision(decision, CommandDisplayName);
message = decision.ShortSummary(CommandDisplayName);
return Result.Cancelled;
}
return ExecuteCommand(commandData, ref message, elements);
}Outcome
VDC Plugins is a commercial product, sold at vdcplugins.com.
