Skip to content

id: design: self-hosting & interop stance — own servers, Rust library reuse, what intercompatibility requires #5975

Closed

Description

@dezren39

Part of the worlds design program: #5955. Statements S78–S81 of the 2026-11-04 brief.

Requirement (Drew, in substance)

We're trying to build a real place in the virtual world to allow people to share, create, and deal with one another without absolutely requiring our own interaction:

  • We might not even host them. They could do it all on their own.
  • They could use our Rust libraries to take the appropriate parts to build their own client or subsystem — which technically rides along the same protocol networks but is entirely separate and doesn't automatically work for our intercompatibility requirements. Or ideally, it does.
  • Maybe it works perfectly, and they just don't want to have our chat and world system and want to host their own servers: it's the exact same system, but they're just using it in a different way, and that should all work.

Design points to settle

  • What is the interop contract exactly: which parts are load-bearing for intercompatibility (wire format, identity, capability negotiation, registry format) and which are our product choices on top (chat UI, our registry, our permission defaults)? A third-party server that implements the contract interoperates; one that doesn't is merely separate — the design must make that line explicit and testable.
  • Conformance: the adapter conformance harness / interop matrix in #5814 is the natural home for "does it actually interoperate" — this design states the stance, that issue builds the proof.
  • Self-hosting a subset: run worlds without chat, run chat without worlds, run only the registry — which subsets are supported shapes vs accidents?
  • Defaults travel or don't: our permission defaults, license policy defaults (licensing children of #5955), and moderation defaults are server-admin choices on a self-hosted server, not protocol requirements. Say so in the design, because the AGPL/licensing analysis depends on self-hosting being genuinely possible.
  • Boundary enforcement across bridges/federation/relays is #5882; residency implementation is #5529. This issue is the stance those implement.

Related

  • Wire format & transport adapters: #5674
  • Adapter conformance harness & interop matrix: #5814
  • Writer sets v2 / federation: #5789

Done looks like

A short stance doc: the interop contract's load-bearing list, supported subset shapes, and what is explicitly not required of a self-hoster.

Activity

  1. added
    priority/normalOrdinary priority (the default)
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    kind/designA design proposal (design-architect): multi-step, phased, decision-bearing
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Wave-2 follow-ups filed from the prior-art research (Lane B). Granular sub-scopes of this issue, each carrying the relevant research findings + citations:

    Research source: workspace/scratch/worlds-capabilities-brief-2026-11-04/prior-art-research.md. Full wave-2 mapping: workspace/scratch/worlds-capabilities-brief-2026-11-04/wave2-map.md.

  4. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  5. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triaged)

    Triage findings (task 10344, 2026-11-05)

    Still live; no stance doc exists yet. Issue #5975 is OPEN with no hard-stop labels. Code search against current main finds no self-hosting stance document under doc/ and no interop-contract statement (the generic "interop contract" hits are unrelated investigations). Nothing filed duplicates it: the neighbours are the mechanisms this stance governs, not the stance itself.

    Ordering (all verified OPEN by fresh gh checks this run):

    Scoped next step (when worked): the short stance doc from the issue's "Done looks like": (1) the interop contract's load-bearing list, (2) supported subset shapes vs accidents, (3) what is explicitly not required of a self-hoster, with issue #5814 named as the conformance proof obligation for each load-bearing item. No decision from Drew is needed — the stance restates his requirement in substance (S78–S81); no implementation task is enqueued (design-first).

  6. 19 remaining items

  7. added
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    status/triagedTriaged and routed (see agent note)
    on Nov 8, 2026
  8. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)kind/designA design proposal (design-architect): multi-step, phased, decision-bearingpriority/normalOrdinary priority (the default)task/small-fixQueue packet kind: bounded fix with reproduction and targeted tests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions