TalkCo supporting research

Local-first tools: dated evidence and integration gates

DRAFT 11 sections

The tools inventory remains the sole comprehensive overview. This note preserves decision-changing evidence, not a second dependency plan. Issue #10 owns the client comparison; #13 owns adoption evidence.

#Reuse does not require duplicate authority

A package can implement an explicitly accepted object, validation or synchronization contract. The failure is silently accepting its account owner, server ordering, global identity or permissive defaults. Conversely, a relay's ordered byte cursor can remain mere delivery bookkeeping. One owner per state machine is preferable to overlapping custom and library-owned histories.

#DXOS is an integrated-workspace alternative

ECHO documents a P2P graph database, spaces and concurrent/offline editing. Composer provides an application/plugin framework. SDK documentation reported limited support while Composer was prioritized.

The review inspected the repository license: FSL-1.1-Apache-2.0, with competing-commercial-use conditions and a future Apache grant for each version. A nonprofit label does not settle every distribution/hosting question. Verify the exact selected revision and obtain the needed review.

At commit 8048e42866185f488879726ea4a318119b51450b, the feed cypher interface makes feed-at-rest encryption optional. That finding concerns the inspected store, not all DXOS networking or every deployment. ECHO documentation also describes app-as-device access to the user's data; Composer capability tokens include dependency-injection concepts, not automatically an application sandbox.

A Composer prototype should establish context isolation, application access, non-reading replication, key recovery, revocation, retention and the transferable-evidence boundary. It must replace enough application work to justify adaptation rather than become a second object framework below our own.

#Jazz generations and LiveStore have different authority contracts

The Jazz redesign account distinguished Classic's cryptographic permissions from v2's trusted-server enforcement. Evaluate Classic encryption separately from v2; the brand does not fix the trust model. The Classic recovery guide reported a non-rotatable recovery-key limitation. Verify current migration/support and invitation behavior rather than assuming an old encrypted-sync description applies to a new generation.

LiveStore's sync contract specifies central ordering, pull-before-push and rebase. Replacing a provider is not the same as replacing that conflict/authority model. Projection-only use is possible to investigate but risks redundant persistence; test a narrower query adapter first.

#Effect and the Electric ecosystem fill separate jobs

Effect services and resource scopes are useful for typed dependencies, cancellation and client subscriptions. They are not durable job storage, secure memory erasure or a distributed protocol. Pin a compatible API generation. The durable core and TypeScript layer must not independently retry the same side effect.

TanStack DB's custom collection interface can present a local core's snapshot and deltas. It needs a consistent watermark or subscribe-and-buffer initialization, command-based mutations, bounded datasets and context-scoped cleanup. Its local-only collection is not durable storage. Private data must not silently move to localStorage for convenience.

Electric Sync is source-Postgres synchronization. PGlite is embedded Postgres, not a P2P authority mechanism. Durable Streams supplies resumable delivery and conformance tooling; opaque inbox use is a candidate, but stream URLs/offsets and subscribers are metadata, and archive custody is a separate contract.

#Server-centered tools remain scoped comparisons

PowerSync replicates a source database to local clients with a backend write path. Zero reconciles against authoritative server results. Replicache reported maintenance mode with development focused on Zero. These are useful offline application designs, not independently authoritative festival peers by default.

Convex is a reactive backend. Its Object Sync Engine article discusses an authoritative-server design; a proposal is not a shipped P2P library. Its Automerge example is a reference integration, not independent custody or private identity. The supplied stack.convex.de URL could not be retrieved; no contents were inferred for it.

Prisma is data-access/ORM tooling. Do not introduce another ORM/runtime merely because it supports a database; equally, do not claim it is intrinsically unable to use SQLite. A separate backend requirement could justify it later.

#Fireproof needs a key-flow experiment

The connector documentation describes distributing ledger keys through metadata. At commit 404e6c5c7f28109c103626c78da845eb95cabcfa, meta-key-hack.ts serializes metadata with key material and imports received keys into the keybag. This is a documented/intended path, not an executed exploit or proof about every connector configuration.

The storage architecture also raises plaintext-derived addressing and correlation questions. Test synchronization through a non-reading metadata host, independent scope keys/identifiers, restored/revoked clients and retention. A custom connector may suffice, or the adaptation may stop saving work. Avoid automatically nesting Fireproof's encrypted containers and history inside ERIS for every record.

#OrbitDB supplies real extension points

Access controllers include creator-only defaults, immutable and mutable controllers, and canAppend. Encryption hooks separately cover payload and replication data; SimpleEncryption is explicitly unaudited.

A constrained peer deployment can be tested without assuming public DHT participation. It still needs explicit identity, delayed-revocation, retention, key-distribution, malicious-writer and metadata semantics. A callback does not solve retroactive invalidation. OrbitDB should compete with another event substrate, not duplicate it for the same objects.

#UCAN, verified fetch and application packages have narrower roles

UCAN separates delegation, invocation and revocation. Pin the protocol generation; older JWT-style ecosystems are not automatically interchangeable with newer formats. The inspected Rust implementation identified an RC target and no formal audit. Evaluate one constrained custody operation against Biscuit or a smaller signed-grant format. Tokens do not meter cumulative use or hide issuance/redemption correlation by themselves.

Verified Fetch checks content-addressed retrieval. It does not establish personal authorship, privacy, persistence or safe execution. Gateways, discovery and fallback require context policy.

LUCID is an experimental restricted CID profile using BLAKE3 and no built-in block chunking. Web Tiles motivate portable verified app/resource packages. Matching a package hash is not a sandbox; external access and local key access must be enforced by the loader/runtime. ERIS references are not interchangeable with LUCIDs.

The supplied prolly-trees implementation discouraged broad adoption pending documentation of internals. Study it or use it through a selected database, not as a reason to build another database accidentally.

#The DIY sync article contributes an outbox idea, not a P2P guarantee

The article describes queued client changes to a Laravel/MySQL backend. An inspectable pending-work queue is useful. An in-memory in-flight set cannot prevent duplication after a crash or lost acknowledgment. Persist operation IDs and atomically deduplicate effects, or make them idempotent. Probe the actual allowed route rather than an unrelated public website to determine whether local peers are reachable.

#Open Threads

Use the issue map, principally #1/#3/#5/#10/#13. A source audit, actual configuration trace, current license review and executable fixture are still required before any dependency is accepted. This condensed integration preserves the earlier evidence boundary rather than claiming fresh validation.