Home / Guides / Nest
Family Editor panelNest

Families nest inside families, out of sight. Nest opens the matryoshka.

Every loadable family can carry other families inside it — nested, sometimes shared, sometimes never placed, invisible until you open the family itself. Nest lists every loadable family in the model with an honest usage verdict, opens any of them to reveal what nests inside — to any depth — shows how host parameters drive the nested ones, and totals what Revit's own Purge Unused confirms is dead weight.

Revit 2024–2027Read-only until you say writeUnused = confirmed by Revit's Purge UnusedProject and Family Editor
Video guideComing soon on BIMIO’s YouTube
Why Nest exists

Nested-but-unplaced families only exist inside their host.

Opening the family is the only way to see them — Revit's browser and schedules simply cannot.

By hand
  • Open each family in the Family Editor, one at a time, and look.
  • Guess whether a zero-instance family is safe to purge.
  • Trace which host parameter drives a nested family by trial.
  • Type host names into parameters, instance by instance.
With Nest
  • Every loadable family listed in one read-only pass, with a four-state verdict.
  • “Unused” only when Revit's own Purge Unused agrees — never a guess.
  • Host “param” ← nested params, spelled out per nested family.
  • One transaction writes every placed shared instance's host name.
Opening the matryoshka

Scan. Expand. Read the strings. Then decide.

Nest is read-only until the one write you explicitly ask for. It works on a project or on the open family, and its usage verdicts lean on Revit's own purge engine — never a guess.

Open it

Every loadable family, verdict attached, in one scan.

The opening scan is one read-only pass: every loadable family — annotation families included — with one of four verdicts: In use, Referenced, not placed, Unused — or the honest fourth, Can’t tell, when the evidence cannot settle it. Unused is only ever asserted when Revit's own Purge Unused engine agrees, because a family kept alive by a family-type parameter is not junk — and calling it junk once is how a tool loses its word.

New to Revit: a purge conversation that starts from Revit's own evidence.
Nest — the family matryoshkaBIMIO
128 loadable families · 103 in use · 13 referenced-only · 12 unused
Search family or category…Unused onlyAnalyse all (opens families)
Single FlushDoorsIn use
Reception Desk — CustomFurnitureIn use
Door Handle — LeverGeneric ModelsReferenced, not placed
Detail Item — Old DPCDetail ItemsUnused
Title Row — LegacyGeneric AnnotationsReferenced, not placed
Count the tags

A tag is not a family instance — and Nest counts it anyway.

Revit's tags do not derive from FamilyInstance, so a count that walks only family instances reports zero placed for every tag family in the model — and a purge list built on that count would delete the annotation families the drawings are made of. Nest therefore runs four more collectors after the instance pass, one for each tag class Revit models separately: IndependentTag, RoomTag, AreaTag and SpaceTag. The wording it then uses admits what it did: the evidence behind an In use verdict reads “412 placed instances / tags in the project”, never “instances” alone. The four families below are the ones an instance-only count would have condemned.

New to Revit: an annotation family that cannot be mistaken for dead weight.
Nest — the family matryoshkaBIMIO
128 loadable families · 103 in use · 13 referenced-only · 12 unused
Search family or category…Unused onlyAnalyse all (opens families)
Door Tag — StandardDoor TagsIn use
Room Tag — Name + AreaRoom TagsIn use
Area Tag — GrossArea TagsIn use
Space Tag — MechanicalSpace TagsIn use
Expand it

Opening the doll is the only way to see inside.

Expand a family and Nest opens it with EditFamily — the only API that sees nested-but-unplaced families — and reads its whole subtree in one pass, to any depth, opening each shared family once. Every node carries its badges: Shared or not, how many times it is placed in its parent, and the association ratio — 2/5 linked — that says how much of it the host actually drives. The opened documents close without saving.

New to Revit: the nesting tree Revit has no window for.
Nest — the family matryoshkaBIMIO
128 loadable families · 103 in use · 13 referenced-only · 12 unused
Search family or category…Unused onlyAnalyse all (opens families)
Single FlushDoorsIn use
Door Handle — LeverGeneric Models2/5 linked×2SharedIn use
Door Frame — StdGeneric Models3/3 linked×1Not sharedIn use
Fixing PlateGeneric ModelsNot sharedReferenced, not placed
Weaker on purpose

Inside the tree, Nest never says “Unused” — and that is the point.

Opening a family with EditFamily is not a purge query, so no node below a root is ever stamped Unused, however empty it looks. A nested family with no instance placed gets Referenced, not placed the moment Nest finds a host family-type parameter pointing at it — and it finds them by reading every type in the host's type table, not the current one, because those parameters are per-type and a family kept alive by a type nobody has selected today is still mandatory. Where no reference turns up, the verdict stops at Can’t tell and says why: “no placed instance and no host-parameter reference seen here — can't confirm it is unused (a reference may live in geometry or a family we did not open)”. Only the roots, which go through Revit's own Purge Unused, are allowed the harder word.

New to Revit: a nesting verdict that stays inside the evidence it actually has.
Nest — the family matryoshkaBIMIO
Vision Panel — Circular
no instance placed — kept as the value of host parameter “Glazing Option”
No host-associable parameters on this nested family.
Read the links

Which host parameter pulls which string.

Select a nested family and the detail card spells its wiring out: which of its parameters the host drives — TYPE driven by host “Handle Style” → Lever-01 — and which host parameters feed the nested ones. The denominator is honest: only parameters Revit could actually associate are counted, so “2 of 5 linkable” means exactly that. And on a project root family, one link selects every placed instance in the model.

New to Revit: parameter associations as sentences — not trial and error in the Family Editor.
Nest — the family matryoshkaBIMIO
Door Handle — Lever
2 instances placed in the host · 1.2 MB
2 of 5 linkable parameter(s) are driven by the host — 3 more could be linked; the family’s other parameters cannot be associated.
Deepen it

“Analyse all” reads the whole model once — and remembers.

The opt-in sweep opens every loadable family with a cancellable progress dialog, measures each one's real bytes, and persists the structure baseline per project — so the next session, and Lens, already know the tree without opening anything. Cancel mid-sweep and the partial result is kept and said out loud: Analyse cancelled — 61 of 128 families opened.

New to Revit: the whole model's nesting, read once and remembered.
Working…BIMIO
Opening families…
61 of 128Opening “Door Handle — Lever”…
48%
This window will close automatically when finished.Cancel
Clean up

The purge list Revit itself signed off.

The cleanup card totals the truly-unused set — 12 families never used · 4.2 MB once sizes are measured — and Copy unused list puts the names on the clipboard under a header that states its ground truth: “Unused loadable families (safe to purge — confirmed by Revit's Purge Unused):”. Nest never deletes anything; the purge stays your gesture, in Revit, with the evidence in hand.

New to Revit: a purge list you can defend — because Revit wrote half of it.
Nest — the family matryoshkaBIMIO
128 loadable families · 103 in use · 13 referenced-only · 12 unused
Search family or category…Unused onlyAnalyse all (opens families)
Detail Item — Old DPCDetail ItemsUnused1.1 MB
Casework — DeprecatedCaseworkUnused0.9 MB
Logo — Old PracticeGeneric AnnotationsUnused0.6 MB
CLEANUP12 families never used · 4.2 MBCopy unused list
Write it back

One write, offered honestly.

The one thing Nest writes: each placed shared nested instance's direct host, into a text instance parameter you choose — as Family or Family : Type, with the host's id in brackets. Only shared nesting exists as instances that can carry a value, and the card says so before you ask. The preview counts every cell first — Will write 34 value(s) into “Host Family” · 6 already correct · 2 read-only — then one transaction, “BIMIO Misc — Nest”, writes them; a rollback reports that nothing was written.

New to Revit: schedules that can finally say which family each nested part lives in.
Nest — the family matryoshkaBIMIO
WRITE THE HOST INTO PLACED SHARED NESTED INSTANCES
Writes each placed shared nested instance's direct host into a text instance parameter — one transaction, skips reported honestly. Only SHARED nested families exist as instances you can write into; non-shared nesting is baked into its host's geometry and has no instance to carry a value.
ParameterHost FamilyFamilyFamily : Type
Will write 34 value(s) into “Host Family” · 6 already correct · 2 read-only
Write 34 value(s)
Switch models

Change model under the floating window and Nest pauses itself.

Nest floats, so you keep working in Revit while it is open — and the moment you activate a view in another model it notices, before you touch anything. Analyse all, Write and Copy unused list go grey, and the header becomes a plain admission: element ids do not carry across models, so the tree, the counts and the Copy-unused list still describe the scanned model, not this one. That last one is the reason for all of it — the export is headed “safe to purge — confirmed by Revit's Purge Unused”, and that claim must never be made about a model no longer in front of you. The pause is reversible: switch back and the status line reads “Back on the scanned model — Nest resumed.” Re-run Nest from the ribbon on the other model instead, and it closes the paused window and scans the one you are actually in.

New to Revit: a floating window that refuses to describe the wrong model.
BIMIO · NestBIMIO
Which families live inside which — all the way down
Paused: this Nest window was scanned on a different model. Element ids do not carry across models, so it will not read, select or write here — and the tree, counts and Copy-unused list still describe the scanned model, not this one. Switch back to that model to resume, or reopen Nest here.
Search family or category…Analyse all (opens families)
Door Handle — LeverDoors
In use24 placed instances / tags in the project
Vision Panel — CircularWindows
Referenced, not placedno placed instances, but Revit’s Purge Unused keeps it (referenced — e.g. a family-type parameter, legend or schedule)
Ironmongery — Old PullGeneric Models
Unusedno placed instances — Revit’s Purge Unused agrees it is unused
The active model changed — Nest is paused. Switch back to the scanned model to resume, or reopen Nest on the current model.
Copy unused listWrite host namesClose
Everywhere else

Select an element — Nest answers inside Lens.

Nest registers its inspector with the suite at startup, so selecting a family instance in Lens gets the dossier without opening Nest: the structure from the persisted baseline, the usage recomputed live for that selection. And during the deep sweep Mold grades each family Nest opens — Clean, Minor or Needs work — and the grade goes into the baseline, so Lens can put it on one combined line: “nested 3 levels · Mold grade: Minor · Bloat: 42.3 MB”. Nest's own tree never shows it. When an app is absent, its clause simply drops.

New to Revit: the matryoshka's answers, delivered wherever you already are.
Nest, read by the suiteBIMIO
Lensper-element dossier — structure from the baseline, usage live
reads
Moldgrades each family during the sweep — Clean · Minor · Needs work — into the baseline
→ Nest
Bloatprices the unused set with measured megabytes
⇄ Nest

Open the matryoshka before you purge it.

Nest sits on the Family Editor panel of the BIMIO tab, beside Mold — and works on projects too. Scan, expand, and clean up with Revit's own evidence. Revit 2024–2027, full trial, no card.

← PreviousMold