Language reference
This is the practical language reference for Org2 v0.
For the normative draft spec, see spec/v0/SPEC.org.
Spec map
Use this mapping when deciding where behavior is defined:
Core syntax and canonical AST: spec/v0/SPEC.org
Roam semantics (IDs, links, backlinks model): spec/v0/ROAM.org
CLI/editor workflow behavior: Tooling reference
Headings
Syntax: one or more stars, a space, then title text.
Example:
* Project
** Subproject
*** Task
Heading level is the number of stars.
Level skips are accepted in v0.
TODO keywords
Headline TODO states parsed by Org2 workflows:
TODOIN_PROGRESSPROGDONECANCELLED/CANCELED
Example:
* TODO Ship docs
* IN_PROGRESS Implement parser tests
* DONE Publish changelog
Priority cookies
Syntax:
[#A]style cookie after TODO keyword (or at headline start when no TODO keyword).
* TODO [#A] Critical task
Tags
Tags are suffixes at headline end:
:tag:or:tag1:tag2:
* TODO Draft docs :docs:website:
Drawers
Property drawers
Drawer delimiters:
:PROPERTIES:...:END:-
Common keys used by Org2 workflows:
:ID::CUSTOM_ID::EFFORT::ROAM_ALIASES:
:PROPERTIES:
:ID: 123e4567-e89b-12d3-a456-426614174000
:EFFORT: 45
:END:
Generic drawers
Generic
:NAME:...:END:drawers are preserved.
Planning lines
Recognized planning keywords:
SCHEDULED:DEADLINE:CLOSED:
SCHEDULED: <2026-02-21 Sat>
DEADLINE: <2026-02-25 Wed>
CLOSED: [2026-02-20 Fri]
Timestamps
Supported timestamp forms:
Active:
<2026-02-21 Sat>Inactive:
[2026-02-21 Sat]With time:
<2026-02-21 Sat 09:30>Ranges:
<2026-02-21 Sat>--<2026-02-23 Mon>Repeaters (agenda projection):
+1w,++1m,.+2d
Lists
Unordered markers:
-,+,*Ordered markers:
1.,1)Checkboxes:
[ ],[X],[-]Nested lists via indentation.
Links
Supported link forms:
Bracket links:
[[https://example.com][label]]Plain URLs:
https://example.comFile links:
[[file:path/to/file.org]]ID links:
[[id:UUID][label]](roam-style link)Wiki links:
[[Node Title]](roam-style link)
Both ID links and Wiki links are first-class in Org2 roam workflows.
Link abbreviations are supported with built-ins, config, and #+LINK directives.
Built-in abbreviations:
gh:→https://github.com/%sgl:→https://gitlab.com/%syt:→https://www.youtube.com/watch?v%s=wiki:→https://en.wikipedia.org/wiki/%s
You can add/override abbreviations in org2.json:
{
"links": {
"linearTeam": "scarf",
"abbreviations": {
"linear": "https://linear.app/scarf/issue/%s",
"gh": "https://github.example.com/%s"
}
}
}
And define file-local abbreviations with Org-compatible syntax:
Define:
#+LINK: linear https://linear.app/scarf/issue/%sUse:
[[linear:APP-3718][APP-3718]]or[[linear:APP-3718]]
Precedence (highest to lowest):
file-local
#+LINKorg2.jsonlinks.abbreviationsbuilt-ins
Org2 expands abbreviation targets when rendering/exporting and for LSP document-link targets.
Inline emphasis
Bold:
*bold*Italic:
/italic/Underline:
_underline_Strike:
+strike+Verbatim:
=verbatim=Code:
~code~
Blocks
Recognized block forms include:
Source blocks:
#+begin_src ... #+end_srcExample blocks:
#+begin_example ... #+end_exampleQuote blocks:
#+begin_quote ... #+end_quoteVerse blocks:
#+begin_verse ... #+end_verseCenter blocks:
#+begin_center ... #+end_centerComment blocks:
#+begin_comment ... #+end_comment
Syntactic sugar / aliases
Org2 supports a friendlier fenced-code alias for source blocks:
```ts
const x = 1
```
This is treated as syntactic sugar for:
#+begin_src ts
const x = 1
#+end_src
Use whichever form you prefer; both map to source block semantics.
Tables
Pipe table rows:
| a | b |Horizontal separator rows:
|---+---|Table content is parsed and preserved.
Keyword/directive lines
Org2 parses keyword lines in #+KEY: VALUE form.
Commonly used in export/publish:
#+TITLE:#+SUBTITLE:#+AUTHOR:#+DATE:#+DESCRIPTION:#+KEYWORDS:#+LANGUAGE:#+HTML_HEAD:#+ID:
Unknown directives are preserved for round-tripping.
Comments
Line comments: lines beginning with
#.Comment blocks are also supported (see Blocks).
Losslessness goal
Org2 aims for practical round-tripping of supported constructs. When behavior is ambiguous, defer to the current implementation and spec fixtures.