1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Phase 0: Foundation Laid — Tesseras</title>
<meta name="description" content="The foundation crates for Tesseras are now in place — core domain types, cryptographic primitives, SQLite storage, and a working CLI.">
<!-- Open Graph -->
<meta property="og:type" content="article">
<meta property="og:title" content="Phase 0: Foundation Laid">
<meta property="og:description" content="The foundation crates for Tesseras are now in place — core domain types, cryptographic primitives, SQLite storage, and a working CLI.">
<meta property="og:image" content="https://tesseras.net/images/social.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:site_name" content="Tesseras">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Phase 0: Foundation Laid">
<meta name="twitter:description" content="The foundation crates for Tesseras are now in place — core domain types, cryptographic primitives, SQLite storage, and a working CLI.">
<meta name="twitter:image" content="https://tesseras.net/images/social.jpg">
<link rel="stylesheet" href="https://tesseras.net/style.css?h=21f0f32121928ee5c690">
<link rel="alternate" type="application/atom+xml" title="Tesseras" href="https://tesseras.net/atom.xml">
<link rel="icon" type="image/png" sizes="32x32" href="https://tesseras.net/images/favicon.png?h=be4e123a23393b1a027d">
</head>
<body>
<header>
<h1>
<a href="https://tesseras.net/">
<img src="https://tesseras.net/images/logo-64.png?h=c1b8d0c4c5f93b49d40b" alt="Tesseras" width="40" height="40" class="logo">
Tesseras
</a>
</h1>
<nav>
<a href="https://tesseras.net/about/">About</a>
<a href="https://tesseras.net/news/">News</a>
<a href="https://tesseras.net/releases/">Releases</a>
<a href="https://tesseras.net/faq/">FAQ</a>
<a href="https://tesseras.net/subscriptions/">Subscriptions</a>
<a href="https://tesseras.net/contact/">Contact</a>
</nav>
<nav class="lang-switch">
<strong>English</strong> | <a href="/pt-br/news/phase0-foundation/">Português</a>
</nav>
</header>
<main>
<article>
<h2>Phase 0: Foundation Laid</h2>
<p class="news-date">2026-02-14</p>
<p>The first milestone of the Tesseras project is complete. Phase 0 establishes the
foundation that every future component will build on: domain types,
cryptography, storage, and a usable command-line interface.</p>
<h2 id="what-was-built">What was built</h2>
<p><strong>tesseras-core</strong> — The domain layer defines the tessera format: <code>ContentHash</code>
(BLAKE3, 32 bytes), <code>NodeId</code> (Kademlia, 20 bytes), memory types (Moment,
Reflection, Daily, Relation, Object), visibility modes (Private, Circle, Public,
PublicAfterDeath, Sealed), and a plain-text manifest format that can be parsed
by any programming language for the next thousand years. The application service
layer (<code>TesseraService</code>) handles create, verify, export, and list operations
through port traits, following hexagonal architecture.</p>
<p><strong>tesseras-crypto</strong> — Ed25519 key generation, signing, and verification. A
dual-signature framework (Ed25519 + ML-DSA placeholder) ready for post-quantum
migration. BLAKE3 content hashing. Reed-Solomon erasure coding behind a feature
flag for future replication.</p>
<p><strong>tesseras-storage</strong> — SQLite index via rusqlite with plain-SQL migrations.
Filesystem blob store with content-addressable layout
(<code>blobs/<tessera_hash>/<memory_hash>/<filename></code>). Identity key persistence on
disk.</p>
<p><strong>tesseras-cli</strong> — A working <code>tesseras</code> binary with five commands:</p>
<ul>
<li><code>init</code> — generates Ed25519 identity, creates SQLite database</li>
<li><code>create <dir></code> — scans a directory for media files, creates a signed tessera</li>
<li><code>verify <hash></code> — checks signature and file integrity</li>
<li><code>export <hash> <dest></code> — writes a self-contained tessera directory</li>
<li><code>list</code> — shows a table of stored tesseras</li>
</ul>
<p><strong>Testing</strong> — 67+ tests across the workspace: unit tests in every module,
property-based tests (proptest) for hex roundtrips and manifest serialization,
integration tests covering the full create-verify-export cycle including
tampered file and invalid signature detection. Zero clippy warnings.</p>
<h2 id="architecture-decisions">Architecture decisions</h2>
<ul>
<li><strong>Hexagonal architecture</strong>: crypto operations are injected via trait objects
(<code>Box<dyn Hasher></code>, <code>Box<dyn ManifestSigner></code>, <code>Box<dyn ManifestVerifier></code>),
keeping the core crate free of concrete crypto dependencies.</li>
<li><strong>Feature flags</strong>: the <code>service</code> feature on tesseras-core gates the async
application layer. The <code>classical</code> and <code>erasure</code> features on tesseras-crypto
control which algorithms are compiled in.</li>
<li><strong>Plain-text manifest</strong>: parseable without any binary format library, with
explicit <code>blake3:</code> hash prefixes and human-readable layout.</li>
</ul>
<h2 id="what-comes-next">What comes next</h2>
<p>Phase 0 is the local-only foundation. The road ahead:</p>
<ul>
<li><strong>Phase 1: Networking</strong> — QUIC transport (quinn), Kademlia DHT for peer
discovery, NAT traversal</li>
<li><strong>Phase 2: Replication</strong> — Reed-Solomon erasure coding over the network,
repair loops, bilateral reciprocity (no blockchain, no tokens)</li>
<li><strong>Phase 3: Clients</strong> — Flutter mobile/desktop app via flutter_rust_bridge,
GraphQL API, WASM browser node</li>
<li><strong>Phase 4: Hardening</strong> — ML-DSA post-quantum signatures, packaging for
Alpine/Arch/Debian/FreeBSD/OpenBSD, CI on SourceHut</li>
</ul>
<p>The tessera format is stable. Everything built from here connects to and extends
what exists today.</p>
</article>
</main>
<footer>
<p>© 2026 Tesseras Project. <a href="/atom.xml">News Feed</a> · <a href="https://git.sr.ht/~ijanc/tesseras">Source</a></p>
</footer>
</body>
</html>
|