pyRevit v6.5.2 Link to heading

Highlights Link to heading

  • Admin installer & configuration — unified install-scope detection, automatic migration of split AppData/ProgramData configs, and aligned CLI / Revit / C# loader behavior (#3449 @jmcouffin, #3452 @jmcouffin)
  • WinGet distribution pipeline — automated manifest generation and submission after each published release; machine-scope admin installers only (#3447 @jmcouffin, plus winget pipeline hardening on develop)
  • CLI TEMP path resolution — fixes pyrevit clone / image deployment when TEMP is stored as unexpanded %LOCALAPPDATA%\Temp (#3453 @jmcouffin)
  • get_families() rewrite — faster collector-based lookup, full system-family coverage, duplicate fix (#3445 @Denver-22, #3448 @Denver-22)

Admin Installer & Configuration Link to heading

  • Install scope detection — active config path derived from install location (Program Files → %PROGRAMDATA%); legacy install_all_users marker kept as fallback (#3452 @jmcouffin)
  • Single source of truthPyRevitInstallScope.GetActiveConfigFilePath() shared by CLI, C# loader, and Python userconfig.py (#3452 @jmcouffin)
  • Config migration on upgrade — merges missing clones and extension sections from per-user AppData into ProgramData when an admin install finds a split config (#3449 @jmcouffin, #3452 @jmcouffin)
  • C# loader extension gating — respects disabled=true and default_enabled=False with no INI section, matching Python loader semantics (#3452 @jmcouffin)
  • Installer post-install — admin installs seed opt-out extension defaults; per-user installs run elevated as the launching user for clone registration and attachment (#3452 @jmcouffin)
  • CLI improvementspyrevit env shows install scope and active config; shipped-clone resolution for enable/disable; new configs seedshippeddefaults command (#3452 @jmcouffin)
  • Bool parsing fix — JValue-safe parsing in PyRevitExtensionDefinition for reliable extension seeding (#3452 @jmcouffin)

WinGet Pipeline Link to heading

  • Automated WinGet manifestswinget.yml runs after each published GitHub release; submits PRs to winget-pkgs for pyRevit.pyRevit and pyRevit.pyRevit.CLI (#3447 @jmcouffin)
  • Machine-scope installers only — manifest URLs point to admin (machine-scope) signed installers; per-user installers remain on GitHub Releases only
  • elevationProhibited handling — stripped from generated manifests before submit (WinGet validation VM runs as administrator-capable account)
  • CI reliabilitywingetcreate installed before manifest jobs; skip redundant submit -r when replace and submit versions match (#3447 @jmcouffin)

CLI & Path Resolution Link to heading

  • Recursive env expansion — new CommonUtils.ExpandEnvironmentPath and GetUserTempDirectory resolve nested %VAR% tokens (#3453 @jmcouffin)
  • Clone / deploy fixes--dest and local image paths expanded in DeployFromImage / DeployFromRepo; replaces raw GetEnvironmentVariable("TEMP") across clone, extensions, and runner code paths (#3453 @jmcouffin)
  • Fallback — uses Path.GetTempPath() when expansion still leaves unresolved % tokens (#3453 @jmcouffin)
  • Unit testsCommonUtilsPathTests covers %LOCALAPPDATA%\Temp staging scenario (#3453 @jmcouffin)

Revit API & Core Library Link to heading

  • get_families() overhaul — families retrieved directly via collector; finds all system families (including non-editable); 2–4× faster (#3448 @Denver-22)
  • Duplicate families fix — families no longer duplicated once per FamilySymbol (#3445 @Denver-22)

CI/CD & Release Pipeline Link to heading

  • Tag CI version preservation — release tag builds keep the committed build number (+HHMM suffix) instead of re-stamping (#0e606afbe)
  • Notify job — captures GitHub release URL from publish step; idempotent Chocolatey push; notify-only dispatch when release job is skipped
  • Issue notifications — linked issues receive release URL after successful publish

Full PR List Link to heading

PRTitleAuthor
#3445Fix duplicate families in get_families()@Denver-22
#3447Install wingetcreate before WinGet manifest update job@jmcouffin
#3448Rewrite get_families() — collector-based, faster, all system families@Denver-22
#3449Configuration migration for admin installs@jmcouffin
#3452Fix config split, C# loader extension gating, installer/CLI discovery@jmcouffin
#3453Expand TEMP and env paths for clone/image deployment@jmcouffin

Contributors Link to heading

@jmcouffin, @Denver-22, @ChrisCrosley


Downloads Link to heading

:small_blue_diamond: See Assets section below for all download options

pyRevit Link to heading

pyRevit CLI (Command line utility) Link to heading

WinGet (after manifest PRs merge) Link to heading

  • winget install pyRevit.pyRevit
  • winget install pyRevit.pyRevit.CLI