@fleetmesh/textile

中文文档
0.2.1发布于 2026/11/01CC0-1.0TypeScriptES Module

FleetMesh 8层内容寻址纺织品层次结构(纤维,股线,线轴,织物,被子,西服,Fit, Tombstone), 1,024字节BLAKE3-Bao Merkle树,BIP-340/NIP-07声明签名,以及@fleetmesh/leaf neg熵桥

中文使用文档
文档目录5 节
  1. 安装
  2. 快速入门
  3. 八层纺织层次结构
  4. 跨层对称和核心不变量
  5. 一致性和多引擎测试

@fleetmesh /纺织

的FleetMesh 纺织 TypeScript中的8层内容寻址数据平面:

Fiber → Strand → Spool → Fabric → Quilt → Suit → Fit → Tombstone

而 @fleetmesh/leaf 提供了介导的WebSocket传输、礼品包装的DIDComm v2消息传递和NIP-77 Negentropy wire协议; @fleetmesh/textile 提供了通用的内容寻址数据结构,1024字节的叶子包Merkle dag,确定性CRDT合并,6级隐私阶梯强制执行,XChaCha20-Poly1305分片密封,可插拔存储库和NIP-77 Negentropy集对调,跨任何FleetMesh应用程序(MeshTube, MeshDrive, MeshDocs, MeshChat, MeshGit)。

依赖项限制为 @fleetmesh/leaf 被审计的人 @noble/* 和 @scure/base 密码库,完全固定。


安装

npm install @fleetmesh/textile @fleetmesh/leaf

顶级命名导入和 @fleetmesh/leaf支持style命名空间导入:

import {
  MediaFiber,
  MetadataFiber,
  MediaStrand,
  PlaylistFabric,
  SovereignQuilt,
  FiberVaultRepository,
  reconcileTextileVaults,
  utf8,
} from '@fleetmesh/textile';

// Or via modular namespaces:
import { bao, canonical, primitives, sealing, signatures, storage, leafBridge } from '@fleetmesh/textile';

快速入门

import {
  createSchnorrTextileSigner,
  FiberVaultRepository,
  IdentityFiber,
  MediaFiber,
  MediaStrand,
  MetadataFiber,
  PlaylistFabric,
  reconcileTextileVaults,
  SealedShardFiber,
  SovereignQuilt,
  TextileQuilt,
  utf8,
} from '@fleetmesh/textile';

const skHex = '11'.repeat(32);
const signer = createSchnorrTextileSigner(skHex);
const alice = { identity_id: 'alice', did: signer.signerDid, handle: 'alice' };

// 1. Layer 1 (Fiber): Content-addressed atomic byte sequences (1024B leaf Bao Merkle root)
const videoFiber = MediaFiber.fromBytes(utf8('video-payload'), 'video/mp4', { author: alice });
const metaFiber = new MetadataFiber({ title: 'Hello Mesh', synopsis: 'Intro video', content_domain: 'video' });

// 2. Layer 2 (Strand): Role-tagged Fiber references spun into a versioned asset
const strand = new MediaStrand({
  id: 'strand-hello-mesh',
  title: 'Hello Mesh',
  author: alice,
  fibers: [videoFiber.toStrandRef('primary'), metaFiber.toStrandRef('metadata')],
});

// 3. Layer 4 (Fabric): Deterministic CRDT collection of Strands
const playlist = PlaylistFabric.create({
  fabricId: 'fabric-featured',
  owner: alice,
  title: 'Featured Videos',
  strands: [strand.toManifest()],
});

// 4. Layer 5 (Quilt): Stitch Fabrics, IdentityFibers, and XChaCha20-Poly1305 SealedShardFibers
const vaultKey = new Uint8Array(32).fill(0x42);
const sealedHistory = SealedShardFiber.sealWithKey(
  'watch_history',
  utf8(JSON.stringify({ watched: [strand.id] })),
  vaultKey,
);
const idFiber = IdentityFiber.fromProfilePayload(alice.did, { handle: 'alice' });

const sovereignQuilt = new SovereignQuilt({
  id: 'quilt-alice',
  author: alice,
  identityFibers: [idFiber.toStrandRef('primary_asset')],
  fabrics: [playlist],
  shardFibers: [sealedHistory.toQuiltShardRef()],
});

// Project a public Quilt view (automatically strips private fabrics and sealed shards)
const publicQuilt = sovereignQuilt.projectForAudience('public');
const sigEnvelope = publicQuilt.signWithKey(skHex);

// 5. Persist primitives into a content-addressed Vault and reconcile with a remote peer via NIP-77
const aliceVault = new FiberVaultRepository();
const bobVault = new FiberVaultRepository();

await aliceVault.putPrimitive(videoFiber);
await aliceVault.putPrimitive(metaFiber);
await aliceVault.putPrimitive(strand);
await aliceVault.putPrimitive(playlist);
await aliceVault.putPrimitive(publicQuilt);

const diff = await reconcileTextileVaults(bobVault, aliceVault);
for (const root of diff.needRoots) {
  const bytes = await aliceVault.getFiber(root);
  if (bytes) await bobVault.putFiber(bytes, { expectedRoot: root });
}

// Rehydrate and verify typed primitives from the vault
const hydratedQuilt = await bobVault.getPrimitive(publicQuilt.root, TextileQuilt.fromManifest);
console.log(hydratedQuilt?.verify(), hydratedQuilt?.verifySignature(sigEnvelope)); // true, true

八层纺织层次结构

层基类规范MIME类型子类&角色
1. 纤维TextileFiberapplication/vnd.fleetmesh.fiber+octet-stream原子内容寻址字节序列(1024-字节叶包默克尔树)。子类: MediaFiber, RawBlobFiber, MetadataFiber (JsonMetadataFiber), TimedFiber (MTF1), InteractionFiber, IdentityFiber, SealedShardFiber (MTS1 XChaCha20-Poly1305), ChunkedFiber (高度10 1 MiB macro-chunk子树)。
2. 链TextileStrandapplication/vnd.fleetmesh.strand+json旋转role-tagged TextileFiber 引用(FiberRefCollection)转化为版本化的语义资产(strand_root). 子类: MediaStrand, SubtitleStrand, CommentStrand, InteractionStrand, ScrobbleStrand, DocumentStrand, CodeRepoStrand, ArcadeRomStrand, ProductStrand, GroupStrand, TombstoneNoticeStrand.
3. 线轴TextileSpoolapplication/vnd.fleetmesh.spool+json的实时追加缓冲区 TimedFibers (MTF1),由BIP-340签署的操作链(SignedSpoolOp). 调用 .cut() 将活动窗口压缩成 FilamentStrand, SpoolLengthStrand, SpoolCutFabric.
4. 织物TextileFabricapplication/vnd.fleetmesh.fabric+json命令(append)或键索引(key)的CRDT集合 TextileStrand年代, FabricDelimiter年代, FabricInteractions (fabric_root). 子类: PlaylistFabric, FeedFabric, CatalogFabric, SubtitleLocalizationFabric, ViewLedgerFabric, TombstoneLedgerFabric, VaultFabric, CircleFeedFabric, ActivityFabric.
5. 被子TextileQuiltapplication/vnd.fleetmesh.quilt+json缝合一个身份或圆圈 TextileFabric年代, IdentityFiber年代, SealedShardFiberS,和生活 Spindle 指向观众范围内的投影(self, circle, public)由 quilt_root. 子类: SovereignQuilt, PublishedQuiltView, GroupQuilt.
6. 西装TextileSuitapplication/vnd.fleetmesh.suit+json自包含的 .fiberpack v2 (MTFP1\n)可移植的主权身份包(suit_root)用于跨设备同步和Sneakernet / BLE / QR / USB传输。子类: SovereignIdentitySuit.
7. 适合TextileFitapplication/vnd.fleetmesh.fit+json内容寻址运行时策略引擎(fit_root)管理存储配额、自动固定、墓碑边界强制执行和密封碎片泄漏预防。
8. 墓碑上TextileTombstoneapplication/vnd.fleetmesh.tombstone+json跨层收放原语(PreemptiveTombstone, RetroactiveTombstone, LocalCacheTombstone, EphemeralTtlTombstone, FederatedQuarantineTombstone, SupersededRevisionTombstone, KeyRevocationTombstone)索引为 TombstoneLedgerRepository.

跨层对称和核心不变量

每个层类都继承自 AbstractTextilePrimitive<TManifest> (和容器层继承自 CompositeTextilePrimitive<TManifest>):

  • 对称序列化和水化:每一层提供 .toManifest(), .toCanonicalBytes(), .toCanonicalJson(),静态 Class.fromManifest(manifest) 水合作用,加上 vault.putPrimitive(primitive) 和 vault.getPrimitive(root, Class.fromManifest).
  • Everything-is-a-Fiber投影: primitive.toManifestFiber() 和 TextileFiber.fromPrimitive(primitive) 将任何更高层的清单投影到内容寻址的 TextileFiber 谁的 root === primitive.root.
  • 递归默克尔DAG遍历: composite.childRefs(), composite.childRoots(), composite.collectClosureRoots(resolver), composite.verifySubtree(resolver), composite.findTombstonedChildren(predicate), composite.evaluateClosureFit(fit).
  • 单调的6级隐私梯: public → peer → circle → mutual → link → private. 调用 primitive.escalatePrivacyRung(next) 棘轮隐私向上和投掷 PrivacyEscalationError 任何缓和局势的企图。
  • 确定性CRDT合并: strand.merge(remote), fabric.merge(remote), quilt.merge(remote) 满足交换性、结合性和幂等性(merge(A, B).root === merge(B, A).root)。
  • 双域BIP-340 Schnorr签名: primitive.signWithKey(skHex), primitive.sign(signer), primitive.verifySignature(envelope) 同时支持 fleetmesh.textile/v1 和 meshtube.textile/v1 域以及NIP-01类30899 可替换的事件。
  • 类型错误层次结构:所有域错误继承自 TextileError (BaoVerificationError, PrivacyEscalationError, SchemaValidationError, SpoolStateError)。

一致性和多引擎测试

每一个原语 @fleetmesh/textile 对冻结的跨语言载体进行测试 vectors/textile-v1.json 并针对Python 3参考实现进行了字节对字节的验证,以及跨 node . js, 铬, 火狐, WebKit 通过Vitest浏览器模式在剧作家:

npm install
npm run typecheck      # Strict TypeScript (erasableSyntaxOnly, noUncheckedIndexedAccess)
npm run build          # Emit dist/*.js and dist/*.d.ts
npm test               # Node.js unit, conformance, audit-guard & integration suites
npm run test:coverage  # V8 coverage report across src/ (97%+ line coverage)

要同时在Node.js、Chromium、Firefox和WebKit上运行完整的套件:

npm run browsers       # Once: install Chromium, Firefox, and WebKit
npm run test:all       # Run all suites across Node + 3 browser engines

版本与发布记录

@fleetmesh/textile 共发布 4 个版本,首次发布于 2026/11/01;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.2.1latest2026/11/012 天前
0.2.02026/11/012 天前
0.1.02026/11/012 天前
0.0.0-stage2026/11/012 天前

关于 @fleetmesh/textile 的常见问题

@fleetmesh/textile 是什么?

FleetMesh 8层内容寻址纺织品层次结构(纤维,股线,线轴,织物,被子,西服,Fit, Tombstone), 1,024字节BLAKE3-Bao Merkle树,BIP-340/NIP-07声明签名,以及@fleetmesh/leaf neg熵桥

如何安装 @fleetmesh/textile?

在项目目录运行 npm install @fleetmesh/textile,或使用 pnpm add / yarn add / bun add。

@fleetmesh/textile 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fleetmesh/textile 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fleetmesh/textile 可以商用吗?

@fleetmesh/textile 使用 CC0-1.0 许可。作者放弃著作权,可不受限制地使用。以上为概括,不构成法律意见,请以许可原文为准。

@fleetmesh/textile 还在维护吗?

最新版本 0.2.1 发布于 2026/11/01(2 天前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/11/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。