Reference Search docs

Naming & endpoints

HoBo names are pure functions of tenant/project/env/service labels — never free-form strings that invent a private TLD. The naming helpers produce DNS-valid hosts; connectivity services use them for registration, DNS, and overlay.

Hard rules

RuleWhy
Never emit bare .hoboNot a public TLD; code that does is a bug
Local zone*.hobo.localhost (default local TLD localhost)
Overlay zone*.hobo.test (default overlay TLD test)
DNS-valid labelsLowercase, length-capped, no illegal chars
HierarchicalTenant → project → env → service (and optional branch) compose the host
Prod env omissionDefault omitted env is prod so production hosts stay short

Modes

type NamedEndpointMode = "local" | "overlay";
  • local — machine-local resolution; pairs with optional portless local named endpoints when the connectivity host supports them.
  • overlay — Tailscale/Netbird-class mesh names under .hobo.test.

Port-based URLs remain the default offline path. Force ports with HOBO_PORTLESS=0.

Multi-tenant context

Soft multi-tenancy labels (also used by policy and metering):

Env varRole
HOBO_TENANTPlatform tenant / org
HOBO_PROJECTProject
HOBO_BRANCHBranch / preview lane
HOBO_ENVEnvironment (prod often omitted in host)

When tenant is required for a named endpoint, empty tenant fails closed.

Who registers names

  • Connectivity host — local registration of named endpoints for hobo dev.
  • Pluggable DNS — public managers (e.g. Route53, Cloudflare adapters) and memory providers for tests.
  • Junction dynamic DNS — cross-yard service discovery without shared mutable state.

Workloads dial named endpoints only for secretless connectors — never receive raw material or ad-hoc host strings from operators.

Security · Connectivity · Camps · Stations