# Sub-records and task progress

_Break work into subtasks, organize parent records, and track completion._

Canonical: https://snoze.dev/help/sub-records/

Use sub-records to break a task into smaller pieces without moving them into a
separate database. Every child is a normal record with its own properties and
page. It has the same database access rules as its parent.

## Enable sub-records

Open your database's **Workshop**, choose **Relations**, then turn on
**Sub-records** and select **Save sub-record settings**. You need permission to
edit the database structure.

Snoze creates a **Parent** property and a reciprocal **Sub-records** property.
You can also choose an existing optional one-to-many relation within the same
database. The relation must have no default values and use **detach** as its
deletion behavior. A database managed by an integration must first be duplicated
into a native database.

## Add, move, and open subtasks

In a table or list, open a row's **Sub-record actions** menu and choose **Add
sub-record**. Fill in its title and required properties. You can also add a
child from the **Sub-records** section of an open record.

Use the arrow beside a parent to expand or collapse its children. Open a child
as you would any other record. When a collection has more results, use **Load
more** to see them.

Choose **Move under…** to search for a different parent, or **Make top-level**
to remove the current parent. Moving a record carries its descendants with it.
Each record can have one parent in the same database. A record cannot become
its own ancestor, and a hierarchy can contain up to 32 levels.

## Choose how progress is calculated

In the sub-record settings, choose a checkbox, status, or select **Completion
property**. For status and select properties, choose which options mean
completed. A checked checkbox means complete.

**Progress includes** offers two choices:

- **Direct children only** counts the records immediately below a parent.
- **Leaf tasks at every level** counts descendants that have no active children,
  so intermediate parent records do not count twice.

For example, if Design contains two completed subtasks and Build contains one
unfinished subtask, their parent's leaf progress is **2/3**. Its direct-child
progress depends on the completion properties of Design and Build themselves.

Progress never changes a parent's status automatically. Without a completion
property, Snoze shows the number of children. Archived branches do not count;
filters that hide a child do not remove it from progress.

## Use different views

Tables and lists start nested. **View settings → Display → Nest sub-records** saves
the display choice for that view. Editing this choice requires permission to edit the view.
Boards, galleries, calendars, timelines, and relation views remain flat.

When a descendant matches a nested view's filters, its ancestors remain visible
with a **Context** label. Progress appears on table and list rows, board and
gallery cards, timeline labels, and expanded calendar cards.

## Delete, archive, and duplicate

Deleting a parent normally preserves its children and removes their parent link.
**Delete subtree…** is a separate permanent action: review the number of affected
records and type the parent's title to confirm. It includes archived descendants
and supports up to 1,000 records at once. If the subtree changes, review it again.

Archiving preserves links. Active children of an archived parent appear at the
top level until the parent is restored. Duplicating an individual record creates
a top-level copy. Duplicating the database with its records copies the hierarchy
and its completion settings.

## Turn nesting off

Disable **Sub-records** and save the settings. Links remain intact, and the
one-parent, cycle, and depth rules still apply. The designated parent and child
properties stay protected from deletion or structural changes.

To remove a completion property or an option used to mean completed, first choose
a different completion rule in the sub-record settings.