Reference Search docs

Messaging, Kafka & Dapr

HoBo unifies app messaging behind ports, not vendor SDKs. Bindles declare topic() / queue / actor signal; Camps select backends. In-process wasm stays the default. Dapr is opt-in.

Authoring (ports only)

import { topic } from "hobo/bindles";
// Backend is Matching / Camp runtime selection — never import Kafka or Dapr clients here.
const events = topic("user-created").allow("publish");

Actors use the same definition surface under native or dapr placement.

Capability map

CapabilityRole
Messaging portDelivery guarantees, tenant scoping, in-memory adapter
Kafka providerKafka / Redpanda / MSK / Confluent capability + resource definitions
Optional Dapr runtimeOptional Camp runtime: ActorHost + pubsub + secretless component YAML
Runtime placementNative or Dapr actor placement and signal routing
Junction federationCross-Yard topic / actor-signal federation plan (control plane + identity)
Messaging policyExactly-once, deny-Dapr, tenant quotas
Conformance suiteMessaging conformance against Kafka and Dapr adapters

Fidelity honesty

ModeHowLabel
SimulatedNo transport / no Dapr clientsimulated
Live harnessIn-memory Kafka / Dapr test doubleslive
Live processReal broker or daprd client implementing the same interfaceslive
Forbiddenlive: true without transport/clientthrows

Never treat a boolean flag as live while still on the pure emulator.

Delivery guarantees

  • Portable default: at-least-once
  • Exactly-once / transactional produce are capability flags Matching and can-deploy can require
  • Dead-letter after maxDeliveryAttempts (subscription); permanent failure advances the consumer group (commit under lease — do not nack-then-commit)

Secretless + multi-tenant

  • Credentials are binding refs only (fromBinding, federation, secretRef)
  • Generated Dapr component YAML must not embed passwords
  • Topics, consumer groups, and Dapr app-ids are tenant-scoped by default

CLI

CommandRole
hobo doctorReports Kafka + Dapr readiness and messaging hazards
AuthoringDeclare topic() in the Bindle; backends are Camp/Matching choices

Messaging plane diagnostics surface through doctor and contract/conformance suites — apps never import Kafka or Dapr clients.

Permanent non-goals

  • Kafka cluster operator / managed-service UI
  • Full Dapr workflow engine parity (supported: activity-name map only)
  • Advanced schema-registry Avro/Protobuf wire protocol end-to-end
  • Junction data-plane byte relay (control-plane federation is in; overlay carries data)

ActorHost · Queue · Component hosts · Capability map · CLI · WASM & WIT