Skip to content

S1: Core (Data Format)

Version 1.0.0

This specification defines a file format for storing tasks, projects, and areas as Markdown files with YAML frontmatter. It is deliberately simple and opinionated. All software which implements this standard will be mutually compatible when reading/writing task files on disk.

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.


A lightweight markup language. This specification uses CommonMark as the authoritative Markdown specification.

A human-readable data serialization language. This specification uses YAML 1.2 as the authoritative YAML specification.

A block of YAML metadata at the beginning of a Markdown file, delimited by --- lines.

A link format originating from wiki software, used by tools like Obsidian. The format is:

  • Basic: [[Page Name]]
  • With display text: [[Page Name|Display Text]]
  • With heading: [[Page Name#Heading]]

An international standard for date and time representation. This specification uses:

  • Date: YYYY-MM-DD (e.g., 2025-01-15)
  • DateTime: YYYY-MM-DDTHH:MM or YYYY-MM-DDTHH:MM:SS (e.g., 2025-01-15T14:30 or 2025-01-15T14:30:00). The space-separated form YYYY-MM-DD HH:MM or YYYY-MM-DD HH:MM:SS is also valid.

Datetime values SHOULD be interpreted as local time. Timezone suffixes (Z, +HH:MM, -HH:MM) MAY be present and SHOULD be preserved by implementations, but implementations MAY ignore timezone information when displaying or processing dates.

A reference to another file, expressed as one of:

  • A WikiLink: [[Project Name]]
  • A relative path: ./projects/my-project.md
  • A filename: my-project.md

  1. All files MUST contain valid UTF-8 encoded Markdown, optionally with YAML frontmatter.
  2. If frontmatter is present:
    1. It MUST be valid YAML 1.2.
    2. The file MUST begin with a line containing exactly ---.
    3. The YAML block MUST be terminated with a line containing exactly ---, followed by a newline.
  3. Frontmatter fields MAY appear in any order.
  4. The Markdown body MAY be empty.
  5. Implementations MUST ignore unknown frontmatter fields. This allows users to add custom metadata without breaking compatibility.
  6. All date and datetime values MUST use ISO 8601 format.
  7. All enum values (such as status) are case-sensitive and MUST be lowercase.
  8. Empty or null field values SHOULD be treated as if the field were absent.
  9. Implementations MUST NOT reject files with unrecognized status values. Unknown statuses SHOULD be preserved and MAY be displayed or filtered as the implementation sees fit.
  10. When modifying files, implementations MUST preserve data they don’t explicitly change:
    • Unknown frontmatter fields MUST be preserved.
    • The Markdown body MUST be preserved.
    • YAML formatting (comments, field ordering) SHOULD be preserved where possible.
  11. Implementations MUST provide configuration options so users can specify paths to their tasks_dir, projects_dir, and areas_dir directories. Implementations MUST NOT require these directories to be co-located.
  12. Implementations SHOULD NOT impose filename conventions.

A Task represents a single actionable item.

  • Task files MUST be stored in a designated tasks directory.
  • Task files in subdirectories SHALL NOT be read during normal operation.
  • Implementations MAY move completed or dropped tasks to a tasks/archive subdirectory.
  • Implementations MAY provide separate functionality to query archived tasks.

Any valid filename.

FieldTypeDescription
titlestringThe title of the task.
statusenumOne of: inbox, icebox, ready, in-progress, blocked, dropped, done.
created-atdate or datetimeWhen the task was created.
updated-atdate or datetimeWhen the task was last modified.
FieldTypeDescription
completed-atdate or datetimeWhen the task was completed or dropped. SHOULD be set when status changes to done or dropped.
areafile referenceReference to an Area file.
projectsarray of file referencesReference to a Project file. MUST be an array with exactly one element. Array format is used for compatibility with other systems.
duedate or datetimeHard deadline for the task.
scheduleddateThe date the task is planned to be worked on. Used for calendar-based planning.
defer-untildateHide the task until this date. The task will not appear in active views until this date.
StatusDescription
inboxNewly captured, not yet processed.
iceboxIntentionally deferred indefinitely. Not actionable now, but kept for future consideration.
readyProcessed and ready to be worked on.
in-progressCurrently being worked on.
blockedCannot proceed due to external dependency.
droppedAbandoned. Will not be completed.
doneCompleted successfully.
---
title: Review quarterly report
status: in-progress
created-at: 2025-01-10
updated-at: 2025-01-14
due: 2025-01-15
scheduled: 2025-01-14
projects:
- '[[Q1 Planning]]'
---
## Notes
Key points to review:
- Revenue projections
- Budget allocations
## Meeting Notes
Discussion with finance team on 2025-01-10...

A Project represents a collection of related tasks with a defined end goal.

Project files SHOULD be stored in a designated projects directory, but this is not required.

Any valid filename.

FieldTypeDescription
titlestringThe title of the project.
FieldTypeDescription
areafile referenceReference to an Area file.
statusenumOne of: planning, ready, blocked, in-progress, paused, done.
descriptionstringA short description, SHOULD be under 500 characters.
start-datedateWhen work on the project began or will begin.
end-datedateWhen the project was completed or is expected to complete.
blocked-byarray of file referencesProjects that must be completed before this one can start.
StatusDescription
planningStill being scoped or planned.
readyPlanned and ready to begin.
blockedCannot proceed due to dependency on another project.
in-progressActive work is happening.
pausedTemporarily on hold.
doneCompleted.

If status is absent, implementations SHOULD treat the project as having no defined workflow state and MAY display it in all project views.

---
title: Q1 Planning
status: in-progress
area: '[[Work]]'
start-date: 2025-01-01
end-date: 2025-03-31
description: Quarterly planning and budget review for Q1 2025.
---
## Overview
This project covers all Q1 planning activities...

An Area represents an ongoing area of responsibility (e.g., “Health”, “Finances”, “Client: Acme Corp”).

Area files SHOULD be stored in a designated areas directory, but this is not required.

Any valid filename.

FieldTypeDescription
titlestringThe title of the area.
FieldTypeDescription
statusstringRecommended values: active or archived. See note below.
typestringAllows differentiation between area types (e.g., “client”, “life-area”).
descriptionstringA short description, SHOULD be under 500 characters.

Unlike tasks and projects, areas do not have a workflow-based status. The status field exists solely to allow users to hide old or inactive areas without deleting or moving them.

When displaying areas, implementations SHOULD:

  • Display areas with status: active or with no status field.
  • Hide areas with any other status value (e.g., archived).
---
title: Acme Corp
type: client
status: active
description: Ongoing client relationship with Acme Corporation.
---
## Context
Key contacts, agreements, and background information...

Machine-readable JSON Schema files are available to assist with validation:

These schemas can be used by editors for autocomplete and inline validation, or by implementations for programmatic validation. Conformance with these schemas does not guarantee complete conformance with this specification – some requirements cannot be encoded as JSON schemas.

S2: Implementation Guidance contains additional guidance for implementations.