Skip to content

Filter by isEditable

Revit families fall into two groups: loadable families that can be opened and edited in the Family Editor, and system families (walls, floors, ceilings, etc.) that exist only within the project and cannot be extracted or edited externally.

The isEditable flag makes this distinction explicit: true means the family can be opened in the Family Editor, false means it cannot. System families are not read-only — they can still be modified within the project — but they cannot carry shared parameters or custom type data in the same way loadable families can.

Restricting scope to isEditable = true keeps rules focused on loadable families and avoids false positives on system family content that was never intended to carry the validated data.


The pattern

(
  $familyIds := $[
    type = "Family"
    and values.isEditable = true
  ].id;

  $[
    type = "FamilySymbol"
    and parent.id in $familyIds
  ].{
    "id": id,
    "type": type,
    "name": name,
    "assemblyCode": values.assemblyCode
  }
)

Where isEditable lives

isEditable is a property of the Family object — the top-level definition, not the type or instance:

{
  "id": 617348,
  "type": "Family",
  "name": "Door wooden",
  "values": {
    "isEditable": true,
    "isInPlace": false,
    "familyPlacementType": "OneLevelBasedHosted"
  }
}

It is not available on FamilySymbol or FamilyInstance. To use it, you must filter at the Family level first and then traverse down via parent.id.


What gets excluded

Setting isEditable = true excludes:

  • System families (walls, floors, roofs, ceilings, stairs) — exist only within the project, cannot be opened in the Family Editor
  • In-place families — modelled directly in the project, not as a separate .rfa file

These families can still be used and modified within Revit, but they do not support the same shared parameter bindings and custom type data as loadable families. Rules that validate loadable family content will always produce false positives on them.


Combining with other conditions

isEditable is typically the first condition in a chain, combined with category.type and a category list:

(
  $familyIds := $[
    type = "Family"
    and values.isEditable = true
    and values.isInPlace = false
  ].id;

  $CategoryInclusion := ["OST_Doors", "OST_Windows"];

  $symbolIds := $[
    type = "FamilySymbol"
    and parent.id in $familyIds
    and values.category.label in $CategoryInclusion
  ].id;

  $[type = "FamilyInstance" and parent.id in $symbolIds].{
    "id": id,
    "type": type,
    "name": name,
    "mark": values.mark
  }
)

This is the full production-grade scope: editable, non-in-place, correct category, correct object level.