Skip to content

Commit 441b383

Browse files
joseph-isaacsclaude
authored andcommitted
update
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent f4209d0 commit 441b383

1 file changed

Lines changed: 16 additions & 84 deletions

File tree

docs/specs/editions.md

Lines changed: 16 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
# Editions
22

3-
An **edition** is a named grouping of encodings: it records exactly which encodings a Vortex
4-
file may contain, and when each encoding joined the set. The current edition,
5-
[`core2026.07.0`](#core2026070), groups the 32 encodings the default file writer emits today.
3+
Vortex defines an evergrowing set of serializable array encodings, once written this can be read back by any future
4+
version of vortex.
5+
**Editions** are used to keep track of these encodings and talk about groups of encodings.
66

7-
Editions make compatibility concrete. Because every edition is published and frozen, "written
8-
under `core2026.07.0`" says precisely which encodings a reader must support — and every Vortex
9-
release supports every edition published before it, so files written under an edition remain
10-
readable, and queryable, by all future versions of Vortex.
7+
The edition `core2026.07.0` (coming soon) is the first such edition containing all encodings currently
8+
enabled by the writer.
9+
Editions are additive so an edition that comes after a previous one contains all the encodings from the previous one
10+
and more.
11+
The writer can be configured with a set of different editions (e.g. `core2026.07.0` and `unstable2026.05.0` all stable
12+
encoding released before July 2026 and all unstable encodings from May 2026).
1113

12-
Editions constrain writing, not reading: a reader needs no configuration and always
13-
understands every published edition. The only time an edition surfaces on the read path is in
14-
the error described next.
14+
Editions can be used to constrain your minimum required vortex reader, since latest version over vortex across all
15+
editions is the earliest version of vortex required to read that file.
1516

1617
## Resolving an unknown-encoding error
1718

@@ -28,8 +29,9 @@ it does not support. Find the encoding ID in the [registry](#edition-registry) b
2829

2930
## Writing with an edition
3031

31-
By default the writer targets the latest `core` edition — there is nothing to configure, and
32-
every file you write carries the read-forever guarantee. If a file would contain an encoding
32+
The default the writer targets a `core` edition lagging the latest vortex release by a few version giving delay before
33+
writing the latest vortex encodings to disk.
34+
Every file you write carries the read-forever guarantee. If a file would contain an encoding
3335
outside the targeted edition, the write fails immediately; edition violations never surface as
3436
someone else's read error later.
3537

@@ -42,13 +44,9 @@ Two knobs exist when the default is not what you want:
4244
and may emit any encoding in their union; each encoding belongs to exactly one family.
4345

4446
You can also opt out of editions entirely to write custom or experimental encodings. Doing so
45-
is an explicit choice that gives up the portability guarantee — only readers that know your
47+
is an explicit choice that gives up the standardization guarantee — only readers that know your
4648
encodings can read those files.
4749

48-
Compression presets (the default writer, the compact preset, CUDA-oriented presets) choose
49-
*within* the targeted edition, so switching presets never changes which readers can read a
50-
file.
51-
5250
## How editions change
5351

5452
A published edition is frozen — its encoding list never grows or shrinks. New encodings are
@@ -57,72 +55,6 @@ edition; each encoding's registry entry records the edition it joined in. In the
5755
encoding may be *deprecated*, meaning writers stop emitting it — but readers keep decoding it
5856
indefinitely, so deprecation never invalidates existing files.
5957

60-
Editions are also distinct from the file format version (the `u16` tag in the file's
61-
end-of-file marker): the format version describes the structure of the file container, the
62-
edition describes which encodings may appear inside it.
63-
6458
## Edition registry
6559

66-
| Edition | Status | Frozen on | Encodings |
67-
|---|---|---|---|
68-
| [core2026.07.0](#core2026070) | current | 2026-07 | 32 |
69-
| [core2026.10.0](#core2026100) | draft || 32 |
70-
71-
The registry is verified continuously: real `.vortex` files written by previous releases are
72-
re-read and checked against known-good values, and published editions are pinned by tests so
73-
no code change can silently alter a frozen set. The guarantee assumes a default-feature build
74-
of Vortex; disabling default cargo features (e.g. `zstd`) removes the corresponding decoders.
75-
76-
### core2026.07.0
77-
78-
| | |
79-
|---|---|
80-
| **Status** | current |
81-
| **Frozen on** | 2026-07 |
82-
| **Required Vortex release** | the first release that includes this edition |
83-
| **Encodings** | 32 |
84-
85-
| Encoding ID | Since |
86-
|---|---|
87-
| `fastlanes.bitpacked` | core2026.07.0 |
88-
| `fastlanes.delta` | core2026.07.0 |
89-
| `fastlanes.for` | core2026.07.0 |
90-
| `fastlanes.rle` | core2026.07.0 |
91-
| `vortex.alp` | core2026.07.0 |
92-
| `vortex.alprd` | core2026.07.0 |
93-
| `vortex.bool` | core2026.07.0 |
94-
| `vortex.bytebool` | core2026.07.0 |
95-
| `vortex.chunked` | core2026.07.0 |
96-
| `vortex.constant` | core2026.07.0 |
97-
| `vortex.datetimeparts` | core2026.07.0 |
98-
| `vortex.decimal` | core2026.07.0 |
99-
| `vortex.decimal_byte_parts` | core2026.07.0 |
100-
| `vortex.dict` | core2026.07.0 |
101-
| `vortex.ext` | core2026.07.0 |
102-
| `vortex.fixed_size_list` | core2026.07.0 |
103-
| `vortex.fsst` | core2026.07.0 |
104-
| `vortex.list` | core2026.07.0 |
105-
| `vortex.listview` | core2026.07.0 |
106-
| `vortex.masked` | core2026.07.0 |
107-
| `vortex.null` | core2026.07.0 |
108-
| `vortex.pco` | core2026.07.0 |
109-
| `vortex.primitive` | core2026.07.0 |
110-
| `vortex.runend` | core2026.07.0 |
111-
| `vortex.sequence` | core2026.07.0 |
112-
| `vortex.sparse` | core2026.07.0 |
113-
| `vortex.struct` | core2026.07.0 |
114-
| `vortex.varbin` | core2026.07.0 |
115-
| `vortex.varbinview` | core2026.07.0 |
116-
| `vortex.variant` | core2026.07.0 |
117-
| `vortex.zigzag` | core2026.07.0 |
118-
| `vortex.zstd` | core2026.07.0 |
119-
120-
Not included, because they are experimental and their serialized forms may still change:
121-
`vortex.onpair`, `vortex.zstd_buffers`, `vortex.patched`, `vortex.piecewise-sequence`, and
122-
everything behind the `unstable_encodings` feature flag. Writing them requires opting out of
123-
the edition.
124-
125-
### core2026.10.0
126-
127-
The draft staging area for the next `core` edition: no guarantee until frozen, contents may
128-
change freely. No changes relative to [core2026.07.0](#core2026070) yet.
60+
Coming soon..

0 commit comments

Comments
 (0)