This page is intentionally dry. It is the reference list: syntax, accepted values, alternative type names, and reserved names. Use the value types page when you want the explanation behind special forms.

String

Syntax
"..." or '...' or `...`
Accepted values
Any quoted text value.
Alternative type names
string
Reserved names
None

Example

title:string = "Daily note"
Learn moreLearn less

Escapes and quoting

Strings are best for compact text. Use escapes when the delimiter or a control character must live inside the value.

The spec distinguishes ordinary quoted strings from raw backtick strings. Quoted strings support Unicode escapes, but malformed escape sequences fail closed.

Use trimtick/prose when the text is naturally multiline; it keeps source readable without a wall of escape sequences.

quote:string = "She said \"AEON\"."
path:string = "C:\\notes\\today"
line:string = "first\nsecond"

Trimtick / prose

Syntax
> `...`
Accepted values
Multiline text trimmed by an exact space or tab gutter selected from the first nonblank payload line.
Alternative type names
trimtick; prose is the common prose label
Reserved names
prose

Example

body:prose = >`
  Hello
  from AEON
`
Learn moreLearn less

Exact source gutters

Trimticks are multiline strings with indentation trimming and use one > marker. The first nonblank payload line selects a space or tab gutter.

Common indentation is measured as exact source characters. Tabs are never assigned a visual width, and mixed indentation remains valid but may prevent trimming.

body:prose = >`
		Indented with tabs
			with one nested tab.
		Back at the gutter.
`

Number

Syntax
42, 3.14, .5, 1e3, 1_000
Accepted values
Finite numeric literals.
Alternative type names
number, n
Reserved names
int, uint, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, float32, float64

Example

port:number = 8080
Learn moreLearn less

Finite numbers

Numbers cover finite integer and decimal forms. Numeric width and precision are not Core-level semantics.

Underscores are valid only between digits. Canonicalization removes underscore separators and normalizes leading-dot decimals to an explicit zero.

count:number = 42
ratio:number = 3.14
large:number = 1e3
readable:number = 1_000

NaN

Syntax
NaN or -NaN
Accepted values
Explicit not-a-number values.
Alternative type names
nan
Reserved names
None

Example

reading:nan = NaN
Learn moreLearn less

Explicit edge case

NaN is not an ordinary number. Accepted surface forms are exactly NaN and -NaN; +NaN and lowercase aliases are invalid.

Infinity

Syntax
Infinity or -Infinity
Accepted values
Explicit infinite numeric edge values.
Alternative type names
infinity
Reserved names
None

Example

upperBound:infinity = Infinity
Learn moreLearn less

Explicit bounds

Infinity and -Infinity are useful for open-ended bounds, but remain distinct from finite numbers. Strict JSON-profile output must fail closed rather than silently rewriting them.

Boolean

Syntax
true or false
Accepted values
Truth values.
Alternative type names
boolean, bool
Reserved names
None

Example

published:boolean = true
Learn moreLearn less

Narrow truth

Boolean values are lowercase true and false. TRUE is not a boolean token, and quoted "true" is still a string.

Toggle

Syntax
yes, no, on, off
Accepted values
Human-readable toggles where the words matter.
Alternative type names
toggle
Reserved names
None

Example

enabled:toggle = on
Learn moreLearn less

Words carry intent

On/off often reads like operational state. Yes/no often reads like a human answer. AES preserves the lexical value, while JSON materialization maps yes/on to true and no/off to false.

Null

Syntax
!none, !notSet, !notApplicable, !tombstone, !"reason"
Accepted values
Absence with an explicit reason.
Alternative type names
null
Reserved names
!none, !notSet, !notApplicable, !tombstone

Example

middleName:null = !notApplicable
Learn moreLearn less

Absence has reasons

Use reserved null reasons when they fit, and custom quoted reasons when absence has domain-specific meaning.

Custom reasons must decode to a non-empty, non-whitespace string and must not collide with reserved sentinel names.

middleName:null = !none
phone:null = !notSet
fax:null = !notApplicable
oldId:null = !tombstone
review:null = !"awaiting manual review"

Hex

Syntax
#ff00aa
Accepted values
Hexadecimal byte/color-like literals.
Alternative type names
hex
Reserved names
None

Example

brandColor:hex = #ff00aa
Learn moreLearn less

Prefix plus datatype

The # prefix identifies the literal family. The surfaced value is payload-only, while raw preserves the source token. Underscores are visual spacing only and valid only between hex digits.

Radix

Syntax
%1011 with a clarifier such as :radix[2]
Accepted values
Digits interpreted in an explicit base. The GP profile accepts exactly one numeric radix clarifier whose exact value is an integer from 2 through 64. Integral decimal or exponent spellings are accepted; fractional values are not rounded.
Alternative type names
radix
Reserved names
decimal, radix2, radix6, radix8, radix12

Example

bits:radix[2] = %1011
Learn moreLearn less

Base-aware digits

The % prefix carries the digits, while bracket metadata declares the base. Core accepts bases 2 through 64, but lexical acceptance is still separate from base-specific digit validity.

Encoding

Syntax
&QmFzZTY0IQ== with an encoding-name clarifier such as :encoding["base58"]
Accepted values
Encoded inline payloads. The GP profile accepts exactly one string clarifier on encoding, inline, and embed.
Alternative type names
encoding
Reserved names
base64, embed, inline

Example

code:encoding["base58"] = &FFF
Learn moreLearn less

Encoded payloads

The $ prefix makes the payload shape visible. Core accepts standard and URL-safe base64 alphabets; canonical encoding prefers URL-safe output and strips trailing padding.

SANSA address

Syntax
$.path, ?.path, $.items.*.sku, $.items.**
Accepted values
SANSA exact paths and selectors preserved as address literals. Resolution and selector evaluation belong to consumers.
Alternative type names
sansa
Reserved names
None

Example

path:sansa = $.contact.name
selector:sansa = $.inventory.items.*.sku
qualified:sansa = $.result:number|nan

Date

Syntax
2026-, 2026-05, 2026-05-05
Accepted values
Year-, month-, and day-granularity calendar dates without a time of day. Omitted fields remain unasserted rather than defaulting to 01.
Alternative type names
date
Reserved names
None

Example

shipDate:date = 2026-05-05
Learn moreLearn less

Calendar ticks

A date literal is a year-, month-, or day-granularity calendar value without a time of day. Core recognition includes intrinsic calendar validation, including leap-year handling, and does not fill omitted fields.

Time

Syntax
09:, 09:30, 09:30:00.3400Z, 09:30+10:00
Accepted values
Times of day with optional seconds, exact decimal fractional seconds, UTC, or offset information. Core admits seconds 00–60 and preserves arbitrary authored fractional precision; the general-purpose schema restricts these to seconds 00–59 and at most nine fractional digits.
Alternative type names
time
Reserved names
None

Example

opensAt:time = 09:30
Learn moreLearn less

Time of day

A time may be local, UTC, or offset-bearing. Core allows reduced-precision forms such as 09: and 09:30Z, but rejects out-of-range clock values.

DateTime

Syntax
2026-T09:30, 2026-05T09:30Z, 2026-05-05T09:30:00.3400Z
Accepted values
Combined proleptic-Gregorian date and time values. The date may have year, month, or day granularity, and the clock may use reduced precision; omitted fields remain unasserted. Years are four digits from 0001 through 9999, fractional seconds retain their authored scale, and the general-purpose schema admits at most nine fractional digits.
Alternative type names
datetime
Reserved names
wtc for values with temporal context

Example

annualWindow:datetime = 2026-T09:30
published:datetime = 2026-05-05T09:30:00Z
Learn moreLearn less

Date and clock granularity

A datetime may combine a year-, month-, or day-granularity date with a reduced-precision clock. Omitted calendar and clock fields remain unasserted. WTC adds preserved temporal context when a zone or other authority is part of the meaning. Uppercase Z is the UTC marker; lowercase z is rejected as a temporal literal marker.

annualWindow:datetime = 2026-T09:30
monthlyWindow:wtc = 2026-05T09:30&Australia/Melbourne
published:datetime = 2026-05-05T09:30:00Z

WTC

Syntax
datetime&context, such as 2026-T10:10:00&Europe or 2026-01-01T09:10:10&TAI
Accepted values
Date and time values with preserved temporal context after &. Year-, month-, and day-granularity date components are accepted without defaulting omitted fields. Context can select resolver-local rules, a named timezone, a +/ named place, a convention-defined timescale, or a geographic position.
Alternative type names
wtc
Reserved names
local is exact lowercase; UTC, TAI, UT1, TT, and GPS receive timescale meaning under aeon.gp.temporal.v1

Example

annualMeeting:wtc = 2026-T10:10:00&Europe
meeting:wtc = 2026-05-05T09:30&Australia/Melbourne
atomic:wtc = 2026-01-01T09:10:10&TAI

Separator

Syntax
^300x250 with a separator such as :sep["x"]
Accepted values
Separator-shaped literals where the separator has meaning.
Alternative type names
sep
Reserved names
kadot

Example

dimensions:sep["x"] = ^300x250
Learn moreLearn less

Separator grammar

Use sep[...] when the separator character is part of the value grammar. Separator clarifiers are written as quoted strings, for example sep["x"], while multiple separator values share one bracketed list.

Quoted "..." segments inside separator payloads use ordinary AEON string lexical rules, so content like labels or spaces can be carried without becoming raw separator syntax.

Kadot is a reserved subset name for dot-separated numeral lists, but Core only enforces the separator literal family; stricter kadot shape validation belongs to schema/profile layers.

dimensions:sep["x"] = ^300x250
triple:sep["x", "y", "z"] = ^100x200y300z
row:dsv = ^"Name"."Address"."phone"."email"
ip:kadot = ^198.0.126.255

Symbol

Syntax
|approved| or |this has spaces|
Accepted values
Non-empty, single-line atomic symbolic values. String-style escapes are supported, and \| represents a literal pipe.
Alternative type names
symbol
Reserved names
None

Example

stage:symbol = |in review|
Learn moreLearn less

Atomic symbolic values

Symbols use pipe delimiters and remain distinct from strings, even when their decoded payloads contain the same characters. Spaces and quote characters are ordinary payload content.

The payload must be non-empty and single-line. String-style escapes are supported, with \| representing a literal pipe.

Symbol identity compares the decoded payload exactly. Symbols have no intrinsic ordering, and JSON materialization to a string is explicitly lossy.

stage:symbol = |approved|
label:symbol = |in review|
escaped:symbol = |wait\|ready|

Object

Syntax
{ key:type = value } or object<T>
Accepted values
Named bindings grouped together. object<T> is a member-value claim: the object's member values are expected to satisfy T under schema, profile, or consumer validation.
Alternative type names
object, obj, o
Reserved names
envelope

Example

scores:object<number> = {
  alice:number = 10
  bob:number = 12
}

contact:object = {
  name:string = "Bob"
}
Learn moreLearn less

Named structure

Objects create member paths and are the natural shape for records, configuration, and grouped claims. Reserved aliases such as obj, o, and envelope perform the same Core compatibility check.

List

Syntax
[1, 2, 3], [:number = 3], or list<T>
Accepted values
Ordered repeated values. list<T> is an element-value claim preserved by Core and enforced by schema, profile, or consumer validation.
Alternative type names
list
Reserved names
None

Example

scores:list<number> = [3, 4, 5]
Learn moreLearn less

Order and duplicates

Lists preserve order and duplicates. Generic args are optional syntax and are not enforced by Core semantic typing rules.

Tuple

Syntax
(12, 42), (:number = 12, :number = 42), or tuple<T1, T2>
Accepted values
Fixed positions where each slot has a role. tuple<T...> is a positional claim preserved by Core and enforced by schema, profile, or consumer validation.
Alternative type names
tuple
Reserved names
triple

Example

edge:triple<string, string, string> = ("subject", "predicate", "object")
Learn moreLearn less

Position is meaning

Use tuples when each position has a role and the length is part of the contract. AEON Core preserves tuple/list distinction in AST and AES; they must not collapse into one sequence kind.

Node

Syntax
<tag("text")>, binding:node<T>, or <tag:node<T>(...)>
Accepted values
Tagged tree-shaped values. On ordinary bindings, node<T> claims the node value belongs to a profile, domain, or materialization target. On node heads, node<T> claims the expected child-content type.
Alternative type names
node
Reserved names
None

Example

doc:node<html> = <html(
  <body("Hello")>
)>

title:node = <title:node<string>("Hello")>

page:node = <section(
  <title("Hello")>
)>
Learn moreLearn less

Tagged tree values

Nodes carry tagged children and attributes. Empty-node shorthand <tag> is equivalent to <tag()>, and node children use indexed canonical paths rather than becoming top-level bindings.

Clone reference

Syntax
~path.to.value
Accepted values
Copy-intent reference to another value.
Alternative type names
Reference form, not a datatype label
Reserved names
None

Example

name:string = "Alice"
displayName:string = ~name
Learn moreLearn less

Copy intent

Clone references say that this value should use the value at another path. Missing, forward, and self references are illegal in Core, before AEOS gets involved.

Pointer reference

Syntax
~>path.to.value
Accepted values
Pointer-intent reference to another value.
Alternative type names
Reference form, not a datatype label
Reserved names
None

Example

contact:object = {
  name:string = "Bob"
}
primaryContact:object = ~>contact
Learn moreLearn less

Pointer intent

Pointer references preserve alias/pointer intent in AST and AES. JSON interoperability may lose that identity distinction once references are materialized.

View as Markdown