Mere is a platform for showing data in useful projections, reaching it peer-to-peer wherever it lives, and sharing it on the user's terms. Each data domain lives in a mere: a spatial graph of resources and the nodes they are met through, which hosts project into canvases, tiles, and panes. Mere is not a browser; Turnstone is the browser built on it.

Graphshell, Mere's reference host: a local graph arranged through the product's own search, relation, and scene controls.
Pre-release, under active development.
- Cargo workspace of 90 explicit members. The
merefacade exposes graph, linked-data, canvas, workbench and query capabilities. - Graphshell remains the complete reference graph host; Djinn supplies the local resident composition. Cambium and Conatus remain platform components here.
- Eidetic, Armillary, ESP, Gemot and Errand are independently developed suppliers. Errand continues Smolweb's protocol history and crate identities. The workspace pins one immutable revision per promoted family.
- Graph canvas, content lanes, session persistence, comms and semantic queries have separate implementation and acceptance boundaries. Promotion does not establish new browser, network, model or physical-device capabilities.
- Working Rust toolchain: 1.99.1; shared declared minimum: 1.97.1.
The family promotion plan records source ownership, independent test gates and consumer cutover status.
The graph: what a mere holds.
- Resource: what a canonical URL identifies. Claims about it (what a page says, cites, or derives from, and its tags) attach to the resource, each kept with who asserted it.
- Surface: what the user browses in. A surface shows one resource at a time; navigating changes which. Resources and surfaces are both nodes of the graph.
- Strata: the resource stratum (what things are) under the surface stratum (how they were met: trail, layout, groupings).
- Aspect: any way of dividing the graph: strata, planes (truth and curation), keeping, attention, socialization tiers, coverage.
A graph becomes a picture through two grammars that share one binding.
Projection: what is shown, and where.
- Projection grammar: the reusable vocabulary and operations: selection, derivation, visual encoding, arrangements, backgrounds, interactions, and provenance.
- Scene recipe: a particular composition of those choices, which can be saved, edited, and reused.
- Domain binding: which disclosed facts and permitted actions supply that recipe.
So a timeline recipe isn't inherently a music feature or a writing feature. A domain supplies meaningful temporal facts; the recipe makes them legible. Likewise, a relationship layout can present lexical connections, musical relationships, or research references without treating those relationships as semantically identical.
Dynamics: how things move.
- Dynamics grammar: the reusable vocabulary of motion: terms (what acts on what, by which rule, carrying which state), what kind of motion each makes, and how they combine (weighted sums, groups, schedules).
- Dynamics recipe: a particular composition of those terms, saved, edited, and reused like a scene recipe.
- The same domain binding supplies both: a scene recipe names an arrangement and, optionally, a dynamics recipe.
An arrangement is positions, not motion; physics acts on it. Each item's position is seeded (motion starts there), pinned (it stays) or anchored (it returns after a push or a drag), by the recipe's default or per item, seeded unless chosen. Meaning can live in the dynamics too: a semantic grouping becomes a pull among related items rather than a slot to return to.
A workbench's own structure of frames, tiles, and splits is a forme, not an arrangement. A physics simulation's bodies, joints, fields, and emitters are a world, not a scene.
Mere is consumed as a git dependency by
Turnstone (the browser app) and
other sibling repos. Runnable consumers in this repository live under ports/:
graphshell (the reference graph host and web presenter), djinn (the local
desktop resident), castellan (credential keeper), distillery (model works),
gazette (the directory port), moot (community: murmurs, moots, and coop), pelt
(the reference browser port over Genet's engine and Cambium's shell), signalman
(commissioning and operating Retinue stations). Tabard is the shared theme
authoring library under crates/system/tabard, used by platform crates and ports.
Knot Editor is an independent
repository, not a Mere port: it owns files-in-place authoring, document and
vault authority, evidence, sync and publishing, and Djinn and Turnstone consume
it from one immutable revision through the generic Mere and Genet contracts. See
knot-editor/design_docs/2026-09-01_knot_editor_repository_extraction_plan.md.
cargo build
cargo test
cargo test -p mere-kernel # single crate, by package name
ports/graphshell has no default binary; pick one explicitly (see
ports/graphshell/README.md).
The root Cargo.lock records the portable graph. Use cargo check --workspace --locked for that graph. Python 3.11+ can additionally check configuration,
package provenance and lock preservation with python scripts/cargo_mode.py verify. Run acceptance checks in a clean checkout with documented platform
prerequisites; a local-path build is a separate receipt.
For sibling development, copy .cargo/config.toml.example to
.cargo/config.local.toml and adjust its paths for your checkout layout. Existing
users run python scripts/cargo_mode.py setup once from the repository root:
it preserves current locks and renames ignored automatic configs to opt-in local
configs. It does not overwrite an existing local config or local lock.
python scripts/cargo_mode.py local check --workspace
python scripts/cargo_mode.py local check --manifest-path ports/graphshell/web/Cargo.toml --target wasm32-unknown-unknownThe launcher requires Cargo 1.97+ and selects <workspace>/.cargo/local/Cargo.lock
even with --manifest-path. Commands run from the selected workspace root;
other relative command arguments are interpreted there. Local commands load
root and nested local configs;
ordinary Cargo commands do not. Use the launcher for editor check commands too
(an absolute script path works from a member directory). Editor metadata using
bare Cargo sees the portable graph. Do not set a global lockfile redirect.
Nested workspace portable locks and platform gates are tracked separately in
the lattice plan.
Integration uses a tested set of published revisions. Local sibling changes do not require immediate Git repins, and pin-only commits do not trigger reciprocal repins. Advance pins when accepting a tested integration or a required fix.
MPL-2.0 (see LICENSE).
This README was generated by AI and will be edited by the author upon release.