# How do I write and change rules?

Every row of the IDS editor's table is one rule, one requirement and the elements it is checked on. Write a new rule in the top row and choose Add rule, and click any cell of a rule to change it. Group, filter and hide columns to find your way in a long list.

Updated 1 November 2026

## Write a rule, step by step

1. Look at the top row of the table. It writes a new rule and starts on **All elements**, so nothing in it needs fixing before you begin.
2. Choose the **Applies to** cell. It opens small: a search, **All elements** first, then the categories of the loaded model with their counts (the common ones, such as Walls and Doors, without a model). Tick a category to limit the rule to it.
3. Fill in the **Property set**, **Property**, **Data type**, **Value** and **Need** cells one after another with Tab. Each opens only its own editor under it.
4. Choose **Add rule**, or press Ctrl Enter. The rule joins the table. The top row keeps its categories, conditions and property set, ready for the next property of the same set.
5. To change a rule, choose one of its cells, or move to it with Tab and press Enter. A change is made as you go, and **Undo** (or Ctrl Z) takes it back.
6. Choose **Keys**, by the heading, for the keys of the table.

## The columns

The columns say a rule in order: **Applies to**, **Property set**, **Property**, **Data type**, **Value** and **Need**. Each column's header counts its values, such as how many property sets the IDS uses. Less used columns wait under **Columns**: **Only those with**, **Instructions**, **Spec**, and **Phase** when the IDS has phases.

- **Applies to** lists the element categories by plain name, with their IFC classes, and under them what the rule is limited to. **Browse all categories** opens the whole list by discipline. **+ Only those with** limits the rule to the elements that have a property, an attribute, a classification or a material: each is one line, written under the categories as "with IsExternal = True", and you point at it to see the property set. IDS has no word for "all elements": **All elements** is written as the classes of every element category.
- **Property set** is one text field under the kind of rule: a property set, quantities, name and attributes, a classification, a material, a location, or the class and type. Click the heading to change the kind. Leave the field empty for any set, type a name, or type a pattern such as `Pset_.+`, which gets a small tag. The model's sets come first, then the standard sets of the rule's categories. When a set belongs to a few kinds of element only, such as Pset_WallCommon on **All elements**, one line offers to limit the rule to them.
- **Property** is a field with the properties of the set.
- **Data type** starts at Automatic: the model's type, else the standard's.
- **Value** is a kind and a value on one line. Empty means any value.
- **Need** says Required, Optional (if the element has it, it must match) or Not allowed, with Warning only under them. Optional and Not allowed need a named set.

A cell the editor cannot change, a rare form written by another tool, says why and is written back as it was.

To give one rule's test to many other properties, or one test to a whole property set, see [How do I test many properties?](https://ifcchecker.com/help/ids-many-properties/).

## One rule or one specification

Rules that share their elements and conditions are written into one IDS specification. The **Spec** column numbers them as the file will (S1, S2, and so on), and choosing it lets you name one. A rule moved onto other elements joins the specification already written for them, or starts one of its own.

## Group, filter and hide columns

Group by turns the same rules into groups without changing the IDS: by **IFC class** (as class lists, or each class on its own, where a rule for several classes shows under each, with its counts for that class), by **Property set** or, for a predefined test in stages, by **Phase**. "Then by" adds a second level. Each group's header says how many rules it holds, in how many specifications of the file, and with a model how they do. Its tick chooses all its rules, and "+ New rule in" at its end starts the top row with the group's value.

**Filter** keeps only the rules that fail on the model, warn, have a problem to fix, apply to no element or repeat another. The search finds rules by their classes, sets, properties and values. **Columns** shows and hides columns. The browser remembers how you grouped the table and which columns you showed or hid.

## Keep reading

Next: [How do I change several rules at once?](https://ifcchecker.com/help/ids-several-rules/)

Related:

- [How do I write an IDS in the IDS editor?](https://ifcchecker.com/help/write-an-ids/)
- [How do I change several rules at once?](https://ifcchecker.com/help/ids-several-rules/)
- [How do I see how my rules do on a model?](https://ifcchecker.com/help/ids-live-counts/)

[Workflows and help](https://ifcchecker.com/help/) / [The IDS editor](https://ifcchecker.com/help/collections/ids/)
