yakmesh 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +637 -0
  2. package/CONTRIBUTING.md +42 -0
  3. package/Caddyfile +77 -0
  4. package/README.md +119 -29
  5. package/adapters/adapter-mlv-bible/README.md +124 -0
  6. package/adapters/adapter-mlv-bible/index.js +400 -0
  7. package/adapters/chat-mod-adapter.js +532 -0
  8. package/adapters/content-adapter.js +273 -0
  9. package/content/api.js +50 -41
  10. package/content/index.js +2 -2
  11. package/content/store.js +355 -173
  12. package/dashboard/index.html +19 -3
  13. package/database/replication.js +117 -37
  14. package/docs/CRYPTO-AGILITY.md +204 -0
  15. package/docs/MTLS-RESEARCH.md +367 -0
  16. package/docs/NAMCHE-SPEC.md +681 -0
  17. package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
  18. package/docs/PRECISION-DISCLOSURE.md +96 -0
  19. package/docs/README.md +76 -0
  20. package/docs/ROADMAP-2.4.0.md +447 -0
  21. package/docs/ROADMAP-2.5.0.md +244 -0
  22. package/docs/SECURITY-AUDIT-REPORT.md +306 -0
  23. package/docs/SST-INTEGRATION.md +712 -0
  24. package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
  25. package/docs/TERNARY-AUDIT-REPORT.md +247 -0
  26. package/docs/TME-FAQ.md +221 -0
  27. package/docs/WHITEPAPER.md +623 -0
  28. package/docs/adapters.html +1001 -0
  29. package/docs/advanced-systems.html +1045 -0
  30. package/docs/annex.html +1046 -0
  31. package/docs/api.html +970 -0
  32. package/docs/business/response-templates.md +160 -0
  33. package/docs/c2c.html +1225 -0
  34. package/docs/cli.html +1332 -0
  35. package/docs/configuration.html +1248 -0
  36. package/docs/darshan.html +1085 -0
  37. package/docs/dharma.html +966 -0
  38. package/docs/docs-bundle.html +1075 -0
  39. package/docs/docs.css +3120 -0
  40. package/docs/docs.js +556 -0
  41. package/docs/doko.html +969 -0
  42. package/docs/geo-proof.html +858 -0
  43. package/docs/getting-started.html +840 -0
  44. package/docs/gumba-tutorial.html +1144 -0
  45. package/docs/gumba.html +1098 -0
  46. package/docs/index.html +914 -0
  47. package/docs/jhilke.html +1312 -0
  48. package/docs/karma.html +1100 -0
  49. package/docs/katha.html +1037 -0
  50. package/docs/lama.html +978 -0
  51. package/docs/mandala.html +1067 -0
  52. package/docs/mani.html +964 -0
  53. package/docs/mantra.html +967 -0
  54. package/docs/mesh.html +1409 -0
  55. package/docs/nakpak.html +869 -0
  56. package/docs/namche.html +928 -0
  57. package/docs/nav-order.json +53 -0
  58. package/docs/prahari.html +1043 -0
  59. package/docs/prism-bash.min.js +1 -0
  60. package/docs/prism-javascript.min.js +1 -0
  61. package/docs/prism-json.min.js +1 -0
  62. package/docs/prism-tomorrow.min.css +1 -0
  63. package/docs/prism.min.js +1 -0
  64. package/docs/privacy.html +699 -0
  65. package/docs/quick-reference.html +1181 -0
  66. package/docs/sakshi.html +1402 -0
  67. package/docs/sandboxing.md +386 -0
  68. package/docs/seva.html +911 -0
  69. package/docs/sherpa.html +871 -0
  70. package/docs/studio.html +860 -0
  71. package/docs/stupa.html +995 -0
  72. package/docs/tailwind.min.css +2 -0
  73. package/docs/tattva.html +1332 -0
  74. package/docs/terms.html +686 -0
  75. package/docs/time-server-deployment.md +166 -0
  76. package/docs/time-sources.html +1392 -0
  77. package/docs/tivra.html +1127 -0
  78. package/docs/trademark-policy.html +686 -0
  79. package/docs/tribhuj.html +1183 -0
  80. package/docs/trust-security.html +1029 -0
  81. package/docs/tutorials/backup-recovery.html +654 -0
  82. package/docs/tutorials/dashboard.html +604 -0
  83. package/docs/tutorials/domain-setup.html +605 -0
  84. package/docs/tutorials/host-website.html +456 -0
  85. package/docs/tutorials/mesh-network.html +505 -0
  86. package/docs/tutorials/mobile-access.html +445 -0
  87. package/docs/tutorials/privacy.html +467 -0
  88. package/docs/tutorials/raspberry-pi.html +600 -0
  89. package/docs/tutorials/security-basics.html +539 -0
  90. package/docs/tutorials/share-files.html +431 -0
  91. package/docs/tutorials/troubleshooting.html +637 -0
  92. package/docs/tutorials/trust-karma.html +419 -0
  93. package/docs/tutorials/yak-protocol.html +456 -0
  94. package/docs/tutorials.html +1034 -0
  95. package/docs/vani.html +1270 -0
  96. package/docs/webserver.html +809 -0
  97. package/docs/yak-protocol.html +940 -0
  98. package/docs/yak-timeserver-design.md +475 -0
  99. package/docs/yakapp.html +1015 -0
  100. package/docs/ypc27.html +1069 -0
  101. package/docs/yurt.html +1344 -0
  102. package/embedded-docs/bundle.js +334 -74
  103. package/gossip/protocol.js +247 -27
  104. package/identity/key-resolver.js +262 -0
  105. package/identity/machine-seed.js +632 -0
  106. package/identity/node-key.js +669 -368
  107. package/identity/tribhuj-ratchet.js +506 -0
  108. package/knowledge-base.js +37 -8
  109. package/launcher/yakmesh.bat +62 -0
  110. package/launcher/yakmesh.sh +70 -0
  111. package/mesh/annex.js +462 -108
  112. package/mesh/beacon-broadcast.js +113 -1
  113. package/mesh/darshan.js +1718 -0
  114. package/mesh/gumba.js +1567 -0
  115. package/mesh/jhilke.js +651 -0
  116. package/mesh/katha.js +1012 -0
  117. package/mesh/nakpak-routing.js +8 -5
  118. package/mesh/network.js +724 -34
  119. package/mesh/pulse-sync.js +4 -1
  120. package/mesh/rate-limiter.js +127 -15
  121. package/mesh/seva.js +526 -0
  122. package/mesh/sherpa-discovery.js +89 -8
  123. package/mesh/sybil-defense.js +19 -5
  124. package/mesh/temporal-encoder.js +4 -3
  125. package/mesh/vani.js +1364 -0
  126. package/mesh/yurt.js +1340 -0
  127. package/models/entropy-sentinel.onnx +0 -0
  128. package/models/karma-trust.onnx +0 -0
  129. package/models/manifest.json +43 -0
  130. package/models/sakshi-anomaly.onnx +0 -0
  131. package/oracle/code-proof-protocol.js +7 -6
  132. package/oracle/codebase-lock.js +257 -28
  133. package/oracle/index.js +74 -15
  134. package/oracle/ma902-snmp.js +678 -0
  135. package/oracle/module-sealer.js +5 -3
  136. package/oracle/network-identity.js +16 -0
  137. package/oracle/packet-checksum.js +201 -0
  138. package/oracle/sst.js +579 -0
  139. package/oracle/ternary-144t.js +714 -0
  140. package/oracle/ternary-ml.js +481 -0
  141. package/oracle/time-api.js +239 -0
  142. package/oracle/time-source.js +137 -47
  143. package/oracle/validation-oracle-hardened.js +1111 -1071
  144. package/oracle/validation-oracle.js +4 -2
  145. package/oracle/ypc27.js +211 -0
  146. package/package.json +20 -3
  147. package/protocol/yak-handler.js +35 -9
  148. package/protocol/yak-protocol.js +28 -13
  149. package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
  150. package/reference/cpp/yakmesh_ypc27.cpp +179 -0
  151. package/sbom.json +87 -0
  152. package/scripts/security-audit.mjs +264 -0
  153. package/scripts/update-docs-nav.js +194 -0
  154. package/scripts/update-docs-sidebar.cjs +164 -0
  155. package/security/crypto-config.js +4 -3
  156. package/security/dharma-moderation.js +517 -0
  157. package/security/doko-identity.js +193 -143
  158. package/security/domain-consensus.js +86 -85
  159. package/security/fs-hardening.js +620 -0
  160. package/security/hardware-attestation.js +5 -3
  161. package/security/hybrid-trust.js +227 -87
  162. package/security/karma-rate-limiter.js +692 -0
  163. package/security/khata-protocol.js +22 -21
  164. package/security/khata-trust-integration.js +277 -150
  165. package/security/memory-safety.js +635 -0
  166. package/security/mesh-auth.js +11 -10
  167. package/security/mesh-revocation.js +373 -5
  168. package/security/namche-gateway.js +298 -69
  169. package/security/sakshi.js +460 -3
  170. package/security/sangha.js +770 -0
  171. package/security/secure-config.js +473 -0
  172. package/security/silicon-parity.js +13 -10
  173. package/security/steadywatch.js +1142 -0
  174. package/security/strike-system.js +32 -3
  175. package/security/temporal-signing.js +488 -0
  176. package/security/trit-commitment.js +464 -0
  177. package/server/crypto/annex.js +247 -0
  178. package/server/darshan-api.js +343 -0
  179. package/server/index.js +3259 -362
  180. package/server/komm-api.js +668 -0
  181. package/utils/accel.js +2273 -0
  182. package/utils/ternary-id.js +79 -0
  183. package/utils/verify-worker.js +57 -0
  184. package/webserver/index.js +95 -5
  185. package/assets/yakmesh-logo.png +0 -0
  186. package/assets/yakmesh-logo.svg +0 -80
  187. package/assets/yakmesh-logo2.png +0 -0
  188. package/assets/yakmesh-logo2sm.png +0 -0
  189. package/assets/ymsm.png +0 -0
  190. package/website/assets/silhouettes/adapters.svg +0 -107
  191. package/website/assets/silhouettes/api-endpoints.svg +0 -115
  192. package/website/assets/silhouettes/atomic-clock.svg +0 -83
  193. package/website/assets/silhouettes/base-camp.svg +0 -81
  194. package/website/assets/silhouettes/bridge.svg +0 -69
  195. package/website/assets/silhouettes/docs-bundle.svg +0 -113
  196. package/website/assets/silhouettes/doko-basket.svg +0 -70
  197. package/website/assets/silhouettes/fortress.svg +0 -93
  198. package/website/assets/silhouettes/gateway.svg +0 -54
  199. package/website/assets/silhouettes/gears.svg +0 -93
  200. package/website/assets/silhouettes/globe-satellite.svg +0 -67
  201. package/website/assets/silhouettes/karma-wheel.svg +0 -137
  202. package/website/assets/silhouettes/lama-council.svg +0 -141
  203. package/website/assets/silhouettes/mandala-network.svg +0 -169
  204. package/website/assets/silhouettes/mani-stones.svg +0 -149
  205. package/website/assets/silhouettes/mantra-wheel.svg +0 -116
  206. package/website/assets/silhouettes/mesh-nodes.svg +0 -113
  207. package/website/assets/silhouettes/nakpak.svg +0 -56
  208. package/website/assets/silhouettes/peak-lightning.svg +0 -73
  209. package/website/assets/silhouettes/sherpa.svg +0 -69
  210. package/website/assets/silhouettes/stupa-tower.svg +0 -119
  211. package/website/assets/silhouettes/tattva-eye.svg +0 -78
  212. package/website/assets/silhouettes/terminal.svg +0 -74
  213. package/website/assets/silhouettes/webserver.svg +0 -145
  214. package/website/assets/silhouettes/yak.svg +0 -78
  215. package/website/assets/yakmesh-logo.png +0 -0
  216. package/website/assets/yakmesh-logo.webp +0 -0
  217. package/website/assets/yakmesh-logo128x140.webp +0 -0
  218. package/website/assets/yakmesh-logo2.png +0 -0
  219. package/website/assets/yakmesh-logo2.svg +0 -51
  220. package/website/assets/yakmesh-logo40x44.webp +0 -0
  221. package/website/assets/yakmesh.gif +0 -0
  222. package/website/assets/yakmesh.ico +0 -0
  223. package/website/assets/yakmesh.jpg +0 -0
  224. package/website/assets/yakmesh.pdf +0 -0
  225. package/website/assets/yakmesh.png +0 -0
  226. package/website/assets/yakmesh.svg +0 -70
  227. package/website/assets/yakmesh128.webp +0 -0
  228. package/website/assets/yakmesh32.png +0 -0
  229. package/website/assets/yakmesh32.svg +0 -65
  230. package/website/assets/yakmesh32o.ico +0 -2
  231. package/website/assets/yakmesh32o.svg +0 -65
  232. package/website/assets/yakmesh32o.svgz +0 -0
@@ -0,0 +1,456 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="tutorials">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" href="../favicon.ico" sizes="32x32">
7
+ <link rel="icon" href="../icon.svg" type="image/svg+xml">
8
+ <link rel="apple-touch-icon" href="../apple-touch-icon.png">
9
+ <title>YAK:// Protocol - YAKMESH Tutorials</title>
10
+ <meta name="description" content="Learn how to use the yak:// protocol to share and retrieve content across the YAKMESH network with cryptographic links.">
11
+
12
+ <link rel="stylesheet" href="../tailwind.min.css">
13
+ <link rel="stylesheet" href="../prism-tomorrow.min.css">
14
+ <link rel="stylesheet" href="../docs.css">
15
+ <style>
16
+ .theme-accent { color: #10b981; }
17
+ .theme-badge { background: rgba(16, 185, 129, 0.2); color: #34d399; }
18
+ .tutorial-card { background: rgba(30, 41, 59, 0.5); border: 1px solid #334155; border-radius: 0.75rem; padding: 1.5rem; margin-bottom: 1.5rem; }
19
+ .tutorial-card:hover { border-color: #10b981; }
20
+ .step-number { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; background: #10b981; color: white; border-radius: 50%; font-weight: bold; margin-right: 0.75rem; }
21
+ .theme-callout { background: rgba(16, 185, 129, 0.1); border: 1px solid #059669; border-radius: 0.75rem; padding: 1.5rem; margin: 1.5rem 0; }
22
+ .warning-callout { background: rgba(245, 158, 11, 0.1); border: 1px solid #d97706; border-radius: 0.75rem; padding: 1.5rem; margin: 1.5rem 0; }
23
+ .info-callout { background: rgba(59, 130, 246, 0.1); border: 1px solid #3b82f6; border-radius: 0.75rem; padding: 1.5rem; margin: 1.5rem 0; }
24
+ </style>
25
+ </head>
26
+ <body class="bg-mountain-900 text-white min-h-screen">
27
+
28
+ <nav class="docs-sidebar" id="sidebar">
29
+ <a href="../index.html" class="sidebar-logo">
30
+ <span class="logo-icon">🏔️</span>
31
+ <span class="logo-text">Yakmesh</span>
32
+ </a>
33
+ <a href="/dashboard" class="sidebar-dashboard-link"><span>📊</span> <span>Dashboard</span></a>
34
+ <ul class="sidebar-nav">
35
+ <li><a href="../index.html"><span>🏠</span> <span>Overview</span></a></li>
36
+ <li><a href="../getting-started.html"><span>🚀</span> <span>Getting Started</span></a></li>
37
+ <li><a href="../tutorials.html"><span>📖</span> <span>Tutorials</span></a></li>
38
+ <li><a href="../yak-protocol.html" class="active"><span class="yak-icon"></span> <span>YAK://</span></a></li>
39
+ <li><a href="../annex.html"><span>🌉</span> <span>ANNEX</span></a></li>
40
+ <li><a href="../nakpak.html"><span>🎒</span> <span>NAKPAK</span></a></li>
41
+ <li><a href="../namche.html"><span>🚪</span> <span>NAMCHE</span></a></li>
42
+ <li><a href="../doko.html"><span>🧺</span> <span>DOKO</span></a></li>
43
+ <li><a href="../sherpa.html"><span>🧗</span> <span>SHERPA</span></a></li>
44
+ <li><a href="../mandala.html"><span>🌐</span> <span>MANDALA</span></a></li>
45
+ <li><a href="../mantra.html"><span>🕉️</span> <span>MANTRA</span></a></li>
46
+ <li><a href="../gumba.html"><span>🛕</span> <span>GUMBA</span></a></li>
47
+ <li><a href="../yurt.html"><span>🏕️</span> <span>YURT</span></a></li>
48
+ <li><a href="../katha.html"><span>💬</span> <span>KATHA</span></a></li>
49
+ <li><a href="../vani.html"><span>🎙️</span> <span>VANI</span></a></li>
50
+ <li><a href="../darshan.html"><span>👁️</span> <span>DARSHAN</span></a></li>
51
+ <li><a href="../stupa.html"><span>🛕</span> <span>STUPA</span></a></li>
52
+ <li><a href="../lama.html"><span>🔮</span> <span>LAMA</span></a></li>
53
+ <li><a href="../mani.html"><span>⏱️</span> <span>MANI</span></a></li>
54
+ <li><a href="../karma.html"><span>☯️</span> <span>KARMA</span></a></li>
55
+ <li><a href="../tattva.html"><span>🔯</span> <span>TATTVA</span></a></li>
56
+ <li><a href="../tribhuj.html"><span>🔺</span> <span>TRIBHUJ</span></a></li>
57
+ <li><a href="../ypc27.html"><span>🔐</span> <span>YPC-27</span></a></li>
58
+ <li><a href="../sakshi.html"><span>👁️</span> <span>SAKSHI</span></a></li>
59
+ <li><a href="../geo-proof.html"><span>🌍</span> <span>PRAMAAN</span></a></li>
60
+ <li><a href="../trust-security.html"><span>🔒</span> <span>SURAKSHA</span></a></li>
61
+ <li><a href="../docs-bundle.html"><span>📚</span> <span>GRANTH</span></a></li>
62
+ <li><a href="../api.html"><span>📡</span> <span>API</span></a></li>
63
+ <li><a href="../adapters.html"><span>🔌</span> <span>Adapters</span></a></li>
64
+ <li><a href="../studio.html"><span>🎨</span> <span>Studio</span></a></li>
65
+ <li><a href="../quick-reference.html"><span>📋</span> <span>Quick Ref</span></a></li>
66
+ </ul>
67
+ </nav>
68
+
69
+ <button class="sidebar-toggle" id="sidebarToggle" title="Toggle sidebar">
70
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
71
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 19l-7-7 7-7m8 14l-7-7 7-7" />
72
+ </svg>
73
+ </button>
74
+
75
+ <div class="sidebar-overlay" id="sidebarOverlay"></div>
76
+
77
+ <main class="docs-main" id="mainContent">
78
+ <div class="docs-content">
79
+
80
+ <!-- Breadcrumb -->
81
+ <div class="mb-6">
82
+ <a href="../tutorials.html" class="theme-accent hover:underline">← Back to Tutorials</a>
83
+ </div>
84
+
85
+ <!-- Page Header -->
86
+ <div class="mb-8">
87
+ <div class="flex items-center gap-3 mb-2">
88
+ <span class="text-4xl">🐃</span>
89
+ <h1 class="text-4xl font-bold">YAK:// Protocol</h1>
90
+ <span class="theme-badge text-xs px-2 py-1 rounded-full">10 min</span>
91
+ </div>
92
+ <p class="theme-accent text-lg">Share content with cryptographic links that work everywhere</p>
93
+ <p class="text-mountain-300 mt-2">
94
+ The yak:// protocol lets you create permanent, content-addressed links to your files and folders.
95
+ These links are cryptographically verifiable and work across the entire YAKMESH network.
96
+ </p>
97
+ </div>
98
+
99
+ <!-- What is YAK Protocol -->
100
+ <div class="theme-callout mb-8">
101
+ <h3 class="font-bold text-lg mb-3">🐃 What is yak://?</h3>
102
+ <p class="text-mountain-300 mb-4">
103
+ The <code class="bg-mountain-800 px-2 py-1 rounded theme-accent">yak://</code> protocol is YAKMESH's
104
+ content-addressing system. Unlike regular URLs that point to a server location, yak:// links
105
+ point to the <strong>content itself</strong>.
106
+ </p>
107
+ <ul class="text-mountain-300 space-y-2">
108
+ <li>• <strong>Content-addressed:</strong> The link is derived from the content's cryptographic hash</li>
109
+ <li>• <strong>Self-verifying:</strong> If the content changes, the link changes</li>
110
+ <li>• <strong>Decentralized:</strong> Any YAKMESH node can serve the content</li>
111
+ <li>• <strong>Post-quantum secure:</strong> Uses quantum-resistant cryptographic primitives</li>
112
+ </ul>
113
+ </div>
114
+
115
+ <!-- Anatomy of a YAK link -->
116
+ <div class="tutorial-card">
117
+ <h3 class="font-bold text-xl mb-4">Anatomy of a YAK:// Link</h3>
118
+ <p class="text-mountain-300 mb-4">
119
+ YAKMESH uses human-readable <strong>iO names</strong> instead of ugly hashes:
120
+ </p>
121
+ <pre class="language-text"><code>yak://qubit-lattice-prism/path/to/file.txt</code></pre>
122
+ <div class="bg-mountain-800 rounded-lg p-4 mt-4">
123
+ <ul class="text-mountain-300 space-y-2 text-sm">
124
+ <li><code class="text-emerald-400">yak://</code> — Protocol identifier</li>
125
+ <li><code class="text-emerald-400">qubit-lattice-prism</code> — iO name (human-readable content address)</li>
126
+ <li><code class="text-emerald-400">/path/to/file.txt</code> — Optional path within the content</li>
127
+ </ul>
128
+ </div>
129
+ <div class="info-callout mt-4">
130
+ <p class="text-sm text-mountain-300">
131
+ <strong>💡 Why iO names?</strong> Instead of cryptographic hashes like "QmX7k2n9...", YAKMESH derives
132
+ a 3-word name from a 256-word quantum-themed wordlist. The name is deterministic —
133
+ the same content always produces the same iO name. Easy to share verbally!
134
+ </p>
135
+ </div>
136
+ </div>
137
+
138
+ <!-- Step 1: Ensure YAKMESH is Running -->
139
+ <div class="tutorial-card">
140
+ <h3 class="font-bold text-xl mb-4">
141
+ <span class="step-number">1</span>
142
+ Ensure YAKMESH is Running
143
+ </h3>
144
+ <p class="text-mountain-300 mb-4">
145
+ Before using the yak:// protocol, make sure your YAKMESH node is running:
146
+ </p>
147
+ <pre class="language-bash"><code># Check if YAKMESH is running
148
+ yakmesh status
149
+
150
+ # Start if needed
151
+ yakmesh start</code></pre>
152
+ <p class="text-mountain-300 mt-4">
153
+ You should see a status indicating the node is active and connected to the mesh.
154
+ </p>
155
+ </div>
156
+
157
+ <!-- Step 2: Register the Protocol -->
158
+ <div class="tutorial-card">
159
+ <h3 class="font-bold text-xl mb-4">
160
+ <span class="step-number">2</span>
161
+ Register the Protocol Handler
162
+ </h3>
163
+ <p class="text-mountain-300 mb-4">
164
+ To open yak:// links directly from your browser, register YAKMESH as the protocol handler:
165
+ </p>
166
+ <pre class="language-bash"><code># Register yak:// protocol with your system
167
+ yakmesh yak register-handler
168
+
169
+ # Output:
170
+ # ✓ Protocol handler registered
171
+ # You can now open yak:// links in your browser</code></pre>
172
+
173
+ <div class="info-callout mt-4">
174
+ <p class="text-sm text-mountain-300">
175
+ <strong>Note:</strong> On Windows, this adds a registry entry. On macOS/Linux, it registers
176
+ with xdg-open or Launch Services. You may need admin/sudo privileges.
177
+ </p>
178
+ </div>
179
+ </div>
180
+
181
+ <!-- Step 3: Share Content -->
182
+ <div class="tutorial-card">
183
+ <h3 class="font-bold text-xl mb-4">
184
+ <span class="step-number">3</span>
185
+ Share Content
186
+ </h3>
187
+ <p class="text-mountain-300 mb-4">
188
+ You can share files, folders, or entire directories using the yak:// protocol:
189
+ </p>
190
+
191
+ <h4 class="font-bold text-lg mt-6 mb-3">Share a Single File</h4>
192
+ <pre class="language-bash"><code># Register a single file
193
+ yakmesh yak add myfile.txt
194
+
195
+ # Output:
196
+ # ✓ File added to YAK network
197
+ # Link: yak://photon-cipher-node/myfile.txt
198
+ # iO code: photon-cipher-node</code></pre>
199
+
200
+ <h4 class="font-bold text-lg mt-6 mb-3">Share a Directory</h4>
201
+ <pre class="language-bash"><code># Register an entire directory (recursive)
202
+ yakmesh yak add ./my-website/
203
+
204
+ # Output:
205
+ # ✓ Directory added (42 files, 2.3 MB)
206
+ # Link: yak://qubit-lattice-prism/
207
+ #
208
+ # Individual files accessible:
209
+ # yak://qubit-lattice-prism/index.html
210
+ # yak://qubit-lattice-prism/css/style.css
211
+ # yak://qubit-lattice-prism/images/logo.png</code></pre>
212
+
213
+ <h4 class="font-bold text-lg mt-6 mb-3">Programmatic (JavaScript)</h4>
214
+ <pre class="language-javascript"><code>import { createNode } from 'yakmesh';
215
+
216
+ async function shareContent() {
217
+ const node = await createNode();
218
+ await node.start();
219
+
220
+ // Share a file
221
+ const result = await node.yak.add('./document.pdf');
222
+ console.log('File link:', result.yakUrl);
223
+ // yak://fermion-hash-crystal/document.pdf
224
+ console.log('iO code:', result.ioName);
225
+ // fermion-hash-crystal
226
+
227
+ // Share a directory
228
+ const dirResult = await node.yak.add('./my-website/', {
229
+ recursive: true
230
+ });
231
+ console.log('Directory link:', dirResult.yakUrl);
232
+ // yak://qubit-lattice-prism/
233
+
234
+ // Share with metadata
235
+ const richResult = await node.yak.add('./photo.jpg', {
236
+ name: 'Vacation Photo',
237
+ description: 'Beach sunset',
238
+ tags: ['photo', 'vacation', '2025']
239
+ });
240
+ console.log('Share this iO code:', richResult.ioName);
241
+ // Just tell your friend: "hadron-merkle-wave"
242
+ }
243
+
244
+ shareContent();</code></pre>
245
+ </div>
246
+
247
+ <!-- Step 4: Retrieve Content -->
248
+ <div class="tutorial-card">
249
+ <h3 class="font-bold text-xl mb-4">
250
+ <span class="step-number">4</span>
251
+ Retrieve Content
252
+ </h3>
253
+ <p class="text-mountain-300 mb-4">
254
+ Retrieving content from a yak:// link is just as easy:
255
+ </p>
256
+
257
+ <h4 class="font-bold text-lg mt-6 mb-3">Via CLI</h4>
258
+ <pre class="language-bash"><code># Download using iO name (human-readable)
259
+ yakmesh yak get yak://hadron-merkle-wave/myfile.txt
260
+
261
+ # Output:
262
+ # ✓ Resolving iO name: hadron-merkle-wave
263
+ # ✓ Downloading from 3 peers...
264
+ # ✓ Saved to: ./myfile.txt (1.2 KB)
265
+
266
+ # Download to specific location
267
+ yakmesh yak get yak://hadron-merkle-wave/myfile.txt -o ~/Downloads/
268
+
269
+ # Download a directory
270
+ yakmesh yak get yak://qubit-lattice-prism/ -o ./website-copy/</code></pre>
271
+
272
+ <h4 class="font-bold text-lg mt-6 mb-3">Via Browser</h4>
273
+ <p class="text-mountain-300 mb-4">
274
+ If you registered the protocol handler, just paste the yak:// link in your browser:
275
+ </p>
276
+ <div class="bg-mountain-800 rounded-lg p-4 text-center">
277
+ <code class="theme-accent font-mono">yak://hadron-merkle-wave/myfile.txt</code>
278
+ </div>
279
+ <p class="text-mountain-400 text-sm mt-4">
280
+ Your YAKMESH node will intercept the request and serve the content locally.
281
+ </p>
282
+
283
+ <h4 class="font-bold text-lg mt-6 mb-3">Programmatic (JavaScript)</h4>
284
+ <pre class="language-javascript"><code>import { createNode } from 'yakmesh';
285
+
286
+ async function retrieveContent() {
287
+ const node = await createNode();
288
+ await node.start();
289
+
290
+ // Get file content using iO name
291
+ const content = await node.yak.get('yak://hadron-merkle-wave/myfile.txt');
292
+ console.log('Content:', content.toString());
293
+
294
+ // Stream large files
295
+ const stream = await node.yak.getStream('yak://photon-cipher-node/video.mp4');
296
+ stream.pipe(fs.createWriteStream('./video.mp4'));
297
+
298
+ // Get metadata without downloading
299
+ const meta = await node.yak.stat('yak://qubit-lattice-prism/');
300
+ console.log('Size:', meta.size);
301
+ console.log('Files:', meta.files);
302
+ console.log('Peers:', meta.providers.length);
303
+ console.log('iO name:', meta.ioName);
304
+ }
305
+
306
+ retrieveContent();</code></pre>
307
+ </div>
308
+
309
+ <!-- Step 5: Useful CLI Commands -->
310
+ <div class="tutorial-card">
311
+ <h3 class="font-bold text-xl mb-4">
312
+ <span class="step-number">5</span>
313
+ Useful CLI Commands
314
+ </h3>
315
+ <p class="text-mountain-300 mb-4">
316
+ Here's a quick reference of yak:// CLI commands:
317
+ </p>
318
+
319
+ <div class="overflow-x-auto">
320
+ <table class="w-full text-sm">
321
+ <thead>
322
+ <tr class="border-b border-mountain-700">
323
+ <th class="text-left py-2 px-3">Command</th>
324
+ <th class="text-left py-2 px-3">Description</th>
325
+ </tr>
326
+ </thead>
327
+ <tbody class="text-mountain-300">
328
+ <tr class="border-b border-mountain-800">
329
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak add &lt;path&gt;</td>
330
+ <td class="py-2 px-3">Add file/directory and get yak:// link</td>
331
+ </tr>
332
+ <tr class="border-b border-mountain-800">
333
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak get &lt;link&gt;</td>
334
+ <td class="py-2 px-3">Download content from yak:// link</td>
335
+ </tr>
336
+ <tr class="border-b border-mountain-800">
337
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak stat &lt;link&gt;</td>
338
+ <td class="py-2 px-3">Show metadata (size, peers, etc.)</td>
339
+ </tr>
340
+ <tr class="border-b border-mountain-800">
341
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak ls &lt;link&gt;</td>
342
+ <td class="py-2 px-3">List contents of a directory link</td>
343
+ </tr>
344
+ <tr class="border-b border-mountain-800">
345
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak pin &lt;link&gt;</td>
346
+ <td class="py-2 px-3">Pin content locally (prevent garbage collection)</td>
347
+ </tr>
348
+ <tr class="border-b border-mountain-800">
349
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak unpin &lt;link&gt;</td>
350
+ <td class="py-2 px-3">Unpin content (allow garbage collection)</td>
351
+ </tr>
352
+ <tr class="border-b border-mountain-800">
353
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak pins</td>
354
+ <td class="py-2 px-3">List all pinned content</td>
355
+ </tr>
356
+ <tr>
357
+ <td class="py-2 px-3 font-mono text-emerald-400">yakmesh yak register-handler</td>
358
+ <td class="py-2 px-3">Register yak:// protocol with OS</td>
359
+ </tr>
360
+ </tbody>
361
+ </table>
362
+ </div>
363
+ </div>
364
+
365
+ <!-- How It Works -->
366
+ <div class="tutorial-card">
367
+ <h3 class="font-bold text-xl mb-4">🔬 How It Works</h3>
368
+ <p class="text-mountain-300 mb-4">
369
+ When you share content with yak://:
370
+ </p>
371
+ <ol class="text-mountain-300 space-y-3 ml-4">
372
+ <li>
373
+ <strong>1. Content is hashed:</strong> Your file/directory is processed through NAKPAK
374
+ (YAKMESH's content-addressing system) to generate a unique cryptographic fingerprint.
375
+ </li>
376
+ <li>
377
+ <strong>2. iO name derived:</strong> The hash is converted to a human-readable 3-word name
378
+ using a 256-word quantum-themed wordlist. Same content = same name, always.
379
+ </li>
380
+ <li>
381
+ <strong>3. Announced to the network:</strong> Your node announces that it has this content,
382
+ making it discoverable by other nodes.
383
+ </li>
384
+ <li>
385
+ <strong>4. Verified on retrieval:</strong> When someone fetches the content, their node
386
+ verifies the cryptographic fingerprint matches — guaranteeing integrity.
387
+ </li>
388
+ </ol>
389
+ </div>
390
+
391
+ <!-- Summary -->
392
+ <div class="theme-callout">
393
+ <h3 class="font-bold text-lg mb-3">✅ Summary</h3>
394
+ <p class="text-mountain-300 mb-4">
395
+ You've learned how to use the yak:// protocol to share and retrieve content:
396
+ </p>
397
+ <ul class="text-mountain-300 space-y-2">
398
+ <li>✓ Understand how content-addressed links work</li>
399
+ <li>✓ Register the yak:// protocol handler</li>
400
+ <li>✓ Share files and directories with permanent links</li>
401
+ <li>✓ Retrieve content via CLI, browser, or JavaScript</li>
402
+ <li>✓ Use CLI commands for managing yak:// content</li>
403
+ </ul>
404
+ <p class="text-mountain-400 text-sm mt-4">
405
+ <strong>Next:</strong> Learn how to join the mesh network and connect with peers →
406
+ </p>
407
+ </div>
408
+
409
+ <!-- Troubleshooting -->
410
+ <div class="warning-callout mt-8">
411
+ <h3 class="font-bold text-lg mb-3" style="color: #fbbf24;">🔧 Troubleshooting</h3>
412
+ <ul class="text-mountain-300 space-y-3">
413
+ <li>
414
+ <strong>Link not found / No peers?</strong><br>
415
+ <span class="text-mountain-400">The original node sharing the content must be online. Check with <code class="bg-mountain-800 px-2 py-1 rounded">yakmesh yak stat &lt;link&gt;</code></span>
416
+ </li>
417
+ <li>
418
+ <strong>Protocol handler not working?</strong><br>
419
+ <span class="text-mountain-400">Try running <code class="bg-mountain-800 px-2 py-1 rounded">yakmesh yak register-handler</code> with admin privileges.</span>
420
+ </li>
421
+ <li>
422
+ <strong>Download stuck?</strong><br>
423
+ <span class="text-mountain-400">Check your mesh connection: <code class="bg-mountain-800 px-2 py-1 rounded">yakmesh mesh peers</code></span>
424
+ </li>
425
+ </ul>
426
+ </div>
427
+
428
+ <!-- Navigation Footer -->
429
+ <div class="border-t border-mountain-700 mt-12 pt-8">
430
+ <div class="flex flex-col sm:flex-row gap-4">
431
+ <a href="host-website.html" class="flex-1 block bg-mountain-800 border border-mountain-700 rounded-xl p-4 hover:border-emerald-500 transition group">
432
+ <div class="text-xs text-mountain-400 mb-1">← Previous</div>
433
+ <div class="flex items-center gap-2">
434
+ <span class="text-xl">🌐</span>
435
+ <span class="font-semibold group-hover:text-emerald-400">Host a Website</span>
436
+ </div>
437
+ </a>
438
+ <a href="mesh-network.html" class="flex-1 block bg-mountain-800 border border-mountain-700 rounded-xl p-4 hover:border-emerald-500 transition group">
439
+ <div class="text-xs text-mountain-400 mb-1">Next →</div>
440
+ <div class="flex items-center gap-2">
441
+ <span class="text-xl">🕸️</span>
442
+ <span class="font-semibold group-hover:text-emerald-400">Join the Mesh Network</span>
443
+ </div>
444
+ </a>
445
+ </div>
446
+ </div>
447
+
448
+ </div>
449
+ </main>
450
+
451
+ <script src="../prism.min.js"></script>
452
+ <script src="../prism-javascript.min.js"></script>
453
+ <script src="../prism-bash.min.js"></script>
454
+ <script src="../docs.js"></script>
455
+ </body>
456
+ </html>