In plain terms
Storage today is hardwired to the hosted product's providers. There is no defined way for a self-hosted workspace to declare "my objects live somewhere else" — no config shape, no provider registration, no docs contract. We need that pattern before community providers can land.
The forcing function is real code: addisonlynch's github-branch provider (from #414) already implements the Adapter interface and is the first concrete candidate. Per the decision on #414, it belongs in self-hosted deployments — the hosted product will not take contents: write on the public App — so the missing piece is entirely this wiring.
Context
Questions to settle
- In-tree vs. plugin. Do community providers ship inside
packages/storage (present but undocumented for cloud), or as separate packages with a registration mechanism?
- Config shape. How does a
WorkspaceRecord declare a non-default provider, and where do its credentials live? (Plaintext tokens in the workspace record are not acceptable; self-hosters need an env/secret indirection.)
- Capability contract. Providers differ in what they can do (no presigned uploads, size caps, no server-side copy). How do the API and CLI discover and degrade — hard error vs. feature detection?
- Support boundary. What do we promise for community providers — CI coverage, review bar, "works with self-hosted only" labeling?
Acceptance criteria
Out of scope
- The github-branch provider implementation itself (follows once this settles)
- Any hosted-product exposure of community providers
In plain terms
Storage today is hardwired to the hosted product's providers. There is no defined way for a self-hosted workspace to declare "my objects live somewhere else" — no config shape, no provider registration, no docs contract. We need that pattern before community providers can land.
The forcing function is real code: addisonlynch's github-branch provider (from #414) already implements the
Adapterinterface and is the first concrete candidate. Per the decision on #414, it belongs in self-hosted deployments — the hosted product will not takecontents: writeon the public App — so the missing piece is entirely this wiring.Context
packages/storage— theAdapterinterface providers implementQuestions to settle
packages/storage(present but undocumented for cloud), or as separate packages with a registration mechanism?WorkspaceRecorddeclare a non-default provider, and where do its credentials live? (Plaintext tokens in the workspace record are not acceptable; self-hosters need an env/secret indirection.)Acceptance criteria
Out of scope