Replies: 3 comments
-
|
Thanks @LeonRust for this proposal — the level of detail (31 explicit decisions, clean Hub/Runtime separation) is a great foundation for discussion. A node ecosystem is one of the most important long-term goals for dora, which is exactly why I'd like to pressure-test the architecture before any implementation starts. I reviewed the full design against the current codebase and the existing node distribution channels. Detailed spec-level feedback is in #2097; this comment focuses on the architecture. What I think is right
Core question: what is the package format?As written, the Hub is a metadata registry with pointers, not a package system:
This means there is no defined archive layout, and no immutability: git tags are mutable, GitHub Release assets can be re-uploaded, and the publisher controls both the file and its hash. Yank semantics, offline mirrors, and supply-chain integrity all assume the registry has custody (or at least an immutable pin) of the bytes — as designed, it has neither. The concrete question I think the design needs to answer first: what bytes does Reconciling with the existing ecosystemThe proposal's "Current state" section says nodes are only local - id: dora-whisper
build: pip install dora-distil-whisper
path: dora-distil-whisperThe descriptor also already supports Operational scopeThe design commits the project to operating a crates.io-class service: PostgreSQL, S3, OAuth + token lifecycle, a web platform, plus a CI farm that runs Alternative: same goals, same UX, ~10% of the infrastructureI'd propose keeping the proposal's CLI surface and manifest, but changing what's underneath: artifact bytes go to each ecosystem's native registry; dora maintains only the manifest + an immutable pin.
The index itself can start as a git repo ( The OCI choice is worth highlighting because it dissolves several sections of the proposal at once:
The honest cost of the hybrid: publish-side failure modes become per-backend (PyPI auth vs. crates.io rate limits vs. ghcr tokens), so CLI error handling must be good per backend. That is real work — but it is CLI work, not service operation, and it is the same tradeoff Homebrew and conda-forge accepted deliberately. Suggested phasing (inverts the risk)
The proposal as written builds infrastructure first and defers the runtime-integration and contract semantics ("Runtime layer") that actually determine whether the ecosystem works. I'd do the semantics first and keep the infrastructure boring as long as possible. Prior art worth addingThe cited registries (crates.io, npm, Docker Hub, PyPI) are good, but the closest analogs solved these exact problems in this exact domain: rosdep (per-distro system dependency keys — §8.3), rosdistro (a git-hosted YAML index as the entire registry), bloom, and conda-forge / RoboStack (community feedstock model = the proposed L2 tier, already built and operated). These are alternative architectures to study, not just references. Happy to discuss any of this — and to help prototype the manifest + index approach if there's interest. |
Beta Was this translation helpful? Give feedback.
-
|
The implementation spec is now up for review: PR #2154 ( The spec turns this discussion into an implementation contract: 11 use cases as acceptance tests, the manifest/index formats, the Appendix A maps every decision from the original proposal to what was adopted (most of it) or changed (with reasons). Review window: 14 days — feedback on the PR or here. All roadmap items are seeking owners; @LeonRust, the index bootstrap (P2.3), category curation, and the Phase-4 static site (your §XIII web platform) have your name on them first if you want them. |
Beta Was this translation helpful? Give feedback.
-
Implementation update — the git-backed v1 is feature-completeFollowing this proposal, the first version of Dora Hub shipped as a git-backed, cargo-style catalog (the simpler path — the hosted Registry API + Web Platform proposed here map to a future Phase 4). It is now done end-to-end and the catalog is populated. Landed (Phases 1 → 3.4):
State:
Full PR-by-PR breakdown in the umbrella issue: #2097. Remaining:
Thanks @LeonRust for the proposal that kicked this off. The two open decisions (go-live timing + whether to pursue the hosted platform as Phase 4) are laid out in #2097 — happy to scope Phase 4 from this proposal if we want to pursue it. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Proposal: Dora Hub — A Multi-Registry Node Ecosystem for Dora
Abstract
This proposal introduces Dora Hub, a multi-registry package ecosystem for discovering,
distributing, and verifying Dora nodes. It enables
developers to publish reusable operator nodes with typed data contracts, and dataflow authors
to discover and install them with a single command. The design separates the Hub (registry)
from the Runtime (execution), keeping each layer focused and maintainable.
Motivation
Current state
pathindataflow.ymlWhy now
The Dora ecosystem has stabilized around the 1.0 runtime. The missing piece is a
community distribution channel — a central registry where nodes can be published, discovered, and installed with a single command.
Goals
Design
Architecture
Hub is a registry only. It does not participate in dataflow execution — that remains the
responsibility of the Dora Runtime.
CLI Surface (11 commands)
node.json— the core abstractionEvery published node carries a
node.jsonmanifest that declares:{ "id": "camera", "version": "1.2.5", "runtime": "python", "entrypoint": "camera.py", "inputs": [{"id": "tick", "type": "uint64"}], "outputs": [{"id": "image", "type": "uint8", "shape": [1080, 1920, 3], "layout": "HWC"}], "config": { "resolution": {"type": "string", "default": "720p", "enum": ["480p", "720p", "1080p"]} }, "requirements": { "hardware": {"camera": {"interface": "usb"}}, "dependencies": {"python": ["opencv-python>=4.5"]} }, "category": "sensor", "keywords": ["camera", "opencv", "vision"] }This manifest is the source of truth for the entire lifecycle: search indexing, schema
validation, CI verification, and dependency resolution.
Data contracts
uint8,float32,int64, …)HWC,CHW); mismatch generates a warning, not an errordora validatechecks that connected ports have compatible schemas before executionMulti-registry model
No prefix defaults to the official registry. All non-official registries must use
a fully qualified domain name. Self-hosted registries are backed by PostgreSQL + S3 with OIDC-based SSO.
Publishing Workflow
CI runs on Ubuntu 22.04, macOS 14, and Windows 2022. Timeout: 30 min (configurable).
C/C++ nodes: three-tier distribution
System dependencies are declared per-distro and detected at install time with fail-fast
diagnostics (no auto-install of system packages).
Authentication & Authorization
dora hub loginpastes a token; no browser-based OAuth flow in the terminalCommunity Governance
message+replaced_byfields guide users to successorsNon-Goals
The following are explicitly out of scope for the Hub:
dora runremains the domain of Dora Runtimedora hub testImplementation Plan
search,install,publish,info,login), PostgreSQL registry, GitHub OAuth, basic Web Dashboard, CI verification pipelineoutdated/updatecommands, offline modePrior Art
This proposal draws from established package registries:
deprecated+replaced_byfields,outdated/updatecommandsRisks & Mitigations
per-node-venvescape hatchBeta Was this translation helpful? Give feedback.
All reactions