Status : Draft Date : May 2026 License : CC-BY-SA 4.0
- MUST, MUST NOT, SHALL, SHOULD, MAY follow RFC 2119.
- All sequence examples are written 5' → 3' unless otherwise noted.
- All bit-level encodings are little-endian unless otherwise noted.
- Byte-strings are denoted
0xAB(hex), bit-strings0b1010, ASCII strings in"quotes".
AeonScript is structured as seven independent layers, modeled on the OSI reference model:
┌─────────────────────────────────────────────┐
│ L7 — Application (file-type formats) │
├─────────────────────────────────────────────┤
│ L6 — Presentation (compression, crypto) │
├─────────────────────────────────────────────┤
│ L5 — Session (semantic tags) │
├─────────────────────────────────────────────┤
│ L4 — Transport (error correction) │
├─────────────────────────────────────────────┤
│ L3 — Network (PCR random access) │
├─────────────────────────────────────────────┤
│ L2 — Data Link (strand/frame mux) │
├─────────────────────────────────────────────┤
│ L1 — Physical (alphabet, encoding) │
└─────────────────────────────────────────────┘Each layer MUST be independently versionable. A change to L1 (e.g. adding 5-methylcytosine as a 5th symbol) MUST NOT break L5+.
This specification v0.1 fully defines L1, L4, L5. L2, L3, L6, L7 are described at the interface level only and reserved for v0.2+.
A conformant L1 implementation MUST support the canonical 4-letter alphabet:
Σ₄ = { A, C, G, T }It MAY declare support for the extended alphabets:
| Profile | Alphabet | Bits/symbol | Status |
|---|---|---|---|
L1-4 |
{A, C, G, T} | 2.00 | Canonical, MUST support |
L1-5m |
{A, C, G, T, 5mC} | 2.32 | Optional, MAY support |
L1-6 |
{A, C, G, T, 5mC, 5hmC} | 2.58 | Experimental |
The active profile MUST be declared in the L5 session tag (see §4).
| Base | 2-bit code |
|---|---|
| A | 00 |
| C | 01 |
| G | 10 |
| T | 11 |
Bytes are encoded LSB-first into bases. Example:
Byte 0x4A = 0b01001010
└┘└┘└┘└┘
10 10 01 01 (LSB→MSB pairs)
G G C C
→ "GGCC"A conformant decoder MUST parse bases right-to-left within a byte: the first base encodes the least significant bit pair.
To remain synthesizable and sequenceable, an L1-encoded oligo MUST satisfy:
- Homopolymer limit : no run of identical bases > 3.
Example:
AAAAis forbidden.AAAis allowed. - GC content : between 40 % and 60 % over any 50-base window.
- No forbidden motifs : the conformant set MUST include at minimum:
GGGGG(G-quadruplex risk)ATATATATAT(secondary structure risk)- Any motif declared in L5 tag
forbidden_motifs
If raw 2-bit encoding violates a constraint, the encoder MUST apply a mapping permutation (different base assignment per byte) until the constraint is satisfied. The permutation index is encoded as a 2-bit prefix per oligo (24 possible permutations of 4 bases — 4 bits suffice; v0.1 reserves 4 bits and uses the lowest 5 permutations).
A standard AeonScript oligo:
- MUST be between 100 and 300 bases (current synthesis sweet spot)
- SHOULD be 200 bases by default
- The length is declared per-block in the L5 tag
L4 v0.1 mandates Reed-Solomon codes over GF(256) for inner-oligo error correction.
Default parameters:
| Parameter | Value | Meaning |
|---|---|---|
| Symbol size | 8 bits | 1 byte |
| Codeword size (n) | 255 | Max RS block |
| Data size (k) | 223 | Effective payload |
| Parity (n-k) | 32 | Can correct up to 16 errors |
This is the same Reed-Solomon configuration used in CD audio, QR codes, and deep-space communications — chosen for proven reliability and tooling availability.
Encoders MAY declare alternative parameters via the L5 tag field rs_params.
For protection against entire oligo losses (e.g. failed PCR amplification of one oligo), L4 v0.1 SHOULD add a systematic LDPC outer code over groups of N oligos.
Default : 1 parity oligo per 16 data oligos (recovers 1 lost oligo per block).
Reserved for v0.2 — v0.1 reference implementation uses simple repetition (each oligo encoded twice with different keys) as a placeholder.
When the L1 profile uses 5mC, the methylation pattern of cytosines in the oligo MUST encode a 64-bit BLAKE3 hash of the unmethylated oligo bytes.
This provides cross-layer error detection : a silent point mutation will change the unmethylated sequence but not the hash → mismatch detected on decode.
This is AeonScript's most distinctive feature. Every L5 block begins with a semantic tag that describes its own codec.
A semantic tag is an ASCII-encoded structured prefix delimited by pipe characters |:
|<KEY>=<VALUE>;<KEY>=<VALUE>;...|The tag is itself L1-encoded as standard bases (the | and = and ; characters use specific reserved encodings — see §4.5).
Every AeonScript L5 tag MUST include:
| Key | Type | Example | Meaning |
|---|---|---|---|
AEONSCRIPT |
version | 0.1 |
Spec version this block conforms to |
L1 |
profile | L1-4 |
Physical-layer alphabet profile |
L4 |
codec | rs255-223 |
Error correction scheme |
TYPE |
MIME | text/plain |
Payload content type |
LEN |
bytes | 4096 |
Decoded payload length |
ID |
string | 42157 |
Unique block identifier |
| Key | Example | Meaning |
|---|---|---|
ENCRYPT |
aes256-gcm |
Encryption scheme (L6) |
COMPRESS |
zstd |
Compression scheme (L6) |
TIER |
cold |
Storage tier hint |
CHECKSUM |
blake3:abc123… |
Payload checksum |
AUTHORS |
BnF |
Provenance metadata |
LICENSE |
CC-BY-4.0 |
Content license |
forbidden_motifs |
GGGG,ATAT |
Extra L1 constraints |
rs_params |
n=255,k=200 |
Override RS defaults |
Minimal :
|AEONSCRIPT=0.1;L1=L1-4;L4=rs255-223;TYPE=text/plain;LEN=4096;ID=42157|Cultural-archive use-case :
|AEONSCRIPT=0.1;L1=L1-5m;L4=rs255-223;TYPE=image/jp2;LEN=10485760;ID=BnF-MS-fr-2810;TIER=cold;AUTHORS=BnF;LICENSE=CC-BY-4.0;CHECKSUM=blake3:e3b0c4...|ASCII characters used in tags map to L1 bases via this lookup:
- ASCII byte → 8 bits → 4 bases (per §2.2)
- The special characters
|(0x7C),=(0x3D),;(0x3B) are encoded normally. - The encoder MUST ensure the tag does not violate L1 constraints (§2.3) by inserting padding bases between fields if necessary.
A conformant decoder identifies a tag by:
- Scanning the start of an oligo for a 4-base pattern matching
|(encoded asGGCC, since|=0x7C=0b01111100). - Decoding ASCII until a closing
|is found. - Parsing key=value pairs separated by
;.
- Keys in lowercase are reserved for implementation hints (no compatibility guarantee).
- Keys starting with
x-are vendor extensions (e.g.x-microsoft-cluster=42). - Keys in UPPERCASE are standardized by this spec or its successors.
Layer 2 introduces multiplexing of multiple logical channels onto the same physical oligo. v0.1 reserves the design space; v0.2 will fully specify.
Planned mechanisms:
- Forward strand decodes message A
- Reverse complement decodes message B
- Joint encoding via constraint solver
- Frames 0, +1, +2 each decode independent messages
- Inspired by overlapping ORFs in phage PhiX174
- The L5 tag declares which L2 mode is active
- Decoder chooses correct reading direction/frame
Layer 3 provides random-access semantics, allowing retrieval of specific blocks without reading the entire archive.
- Each block is flanked by a unique 20-base PCR primer pair
- A primer-to-tag-ID index (the "filesystem table") is itself stored as a AeonScript block at a well-known primer address
- v0.2 will specify the index format
- Tags support hierarchical IDs (e.g.
BnF/manuscripts/MS-fr-2810) - Enables semantic queries like "retrieve all blocks where AUTHORS=BnF and TIER=cold"
L6 covers:
- Compression (zstd, brotli, neural codecs)
- Encryption (AES-256-GCM, ChaCha20-Poly1305)
- Sérialisation des MIME types complexes
L7 defines domain-specific extensions:
- AeonScript-PDF : PDF/A archival extension
- AeonScript-FASTA : direct biological sequence storage
- AeonScript-Wiki : Wikipedia article format
- AeonScript-IIIF : cultural heritage image format
A conformant AeonScript encoder MUST, prior to outputting any oligo for synthesis :
- Concatenate all output oligos into a candidate genome string.
- Search the candidate against a hazard database. The minimum reference set is the IGSC (International Gene Synthesis Consortium) Harmonized Screening Protocol lookup.
- If any match exceeding 20 base pairs at 90 % identity is found against pathogen-of-concern entries, the encoder MUST refuse to emit those oligos and MUST log the refusal.
A non-conformant encoder that bypasses this step MUST NOT label its output as "AeonScript-Compliant".
The hazard database is published separately at <TBD>/aeonscript-hazard-db and updated quarterly.
- The spec follows semantic versioning : MAJOR.MINOR.PATCH.
- A change to a wire format → MAJOR bump.
- A new optional feature → MINOR bump.
- A clarification or fix → PATCH bump.
- A decoder MUST support the version it claims, and SHOULD support all earlier minor versions within the same major version.
- Should the methylation hash be BLAKE3 or SHA-3-256? (BLAKE3 chosen tentatively for speed)
- Optimal LDPC block geometry for typical oligo loss rates.
- Standardized primer-pair vocabulary for PCR addressing (need ~10⁶ orthogonal pairs).
- Compression interoperability with neural codecs (which neural codec to standardize?).
- Multi-strand encoding constraint solver: greedy vs SAT-based vs neural-search.
- Should the spec mandate a specific foundation model for AI-native encoding, or just a model-agnostic interface?
This specification builds on prior art including :
- Goldman et al. (2013) — early DNA storage encoding
- Erlich & Zielinski (2017) — DNA Fountain
- Press et al. (2020) — HEDGES error correction
- Microsoft Research / Karin Strauss et al. — cluster codec
- Brixi et al. (2026) — Evo 2 foundation model
We thank the broader DNA storage and bioinformatics communities for decades of foundational work.
This is a living document. Comments and pull requests welcome at /aeonscript.