vibe-live docs

Package dependencies

Generated by cmd/gen-depgraph -- do not edit. Run go generate ./... after adding or removing an import between this module's packages; cmd/gen-depgraph/main_test.go fails while this file is stale.

Every package in the module, what it is (its own package comment's first sentence), and the imports between them. Test-only imports are left out. Level is how far down the stack a package sits: 0 imports nothing of this module, and each level imports only lower ones. Before changing a package, its imported by column is what the change can break.

For how the pieces work together rather than which imports which, see docs/architecture/'s other documents and PROJECT.md.

Graph

flowchart LR
  cmd_gen_avatar_sheet["cmd/gen-avatar-sheet"]
  cmd_gen_openapi["cmd/gen-openapi"]
  cmd_vibe_live["cmd/vibe-live"]
  deploy_grafana["deploy/grafana"]
  engineapi["engineapi"]
  engineapi_streamkey["engineapi/streamkey"]
  enginetest["enginetest"]
  enginetest_fake["enginetest/fake"]
  internal_activitypub["internal/activitypub"]
  internal_anonname["internal/anonname"]
  internal_auth["internal/auth"]
  internal_avatar["internal/avatar"]
  internal_changelog["internal/changelog"]
  internal_chat["internal/chat"]
  internal_dbcrypt["internal/dbcrypt"]
  internal_engine_builtin["internal/engine/builtin"]
  internal_engines["internal/engines"]
  internal_fediverse["internal/fediverse"]
  internal_feed["internal/feed"]
  internal_ffmpeg["internal/ffmpeg"]
  internal_grpchealth["internal/grpchealth"]
  internal_handoff["internal/handoff"]
  internal_ingest["internal/ingest"]
  internal_licenses["internal/licenses"]
  internal_mail["internal/mail"]
  internal_media["internal/media"]
  internal_multistream["internal/multistream"]
  internal_multistream_multistreamtest["internal/multistream/multistreamtest"]
  internal_multistream_twitch["internal/multistream/twitch"]
  internal_multistream_youtube["internal/multistream/youtube"]
  internal_password["internal/password"]
  internal_plaintext["internal/plaintext"]
  internal_rtmp["internal/rtmp"]
  internal_s3["internal/s3"]
  internal_safehttp["internal/safehttp"]
  internal_server["internal/server"]
  internal_sfu["internal/sfu"]
  internal_store["internal/store"]
  internal_tasks["internal/tasks"]
  internal_totp["internal/totp"]
  internal_turn["internal/turn"]
  internal_valkey["internal/valkey"]
  internal_version["internal/version"]
  internal_webhook["internal/webhook"]
  internal_webpush["internal/webpush"]
  cmd_gen_avatar_sheet --> internal_avatar
  cmd_gen_openapi --> internal_engines
  cmd_vibe_live --> engineapi
  cmd_vibe_live --> internal_activitypub
  cmd_vibe_live --> internal_auth
  cmd_vibe_live --> internal_dbcrypt
  cmd_vibe_live --> internal_engine_builtin
  cmd_vibe_live --> internal_engines
  cmd_vibe_live --> internal_fediverse
  cmd_vibe_live --> internal_grpchealth
  cmd_vibe_live --> internal_mail
  cmd_vibe_live --> internal_multistream
  cmd_vibe_live --> internal_multistream_twitch
  cmd_vibe_live --> internal_multistream_youtube
  cmd_vibe_live --> internal_password
  cmd_vibe_live --> internal_server
  cmd_vibe_live --> internal_sfu
  cmd_vibe_live --> internal_store
  cmd_vibe_live --> internal_tasks
  cmd_vibe_live --> internal_turn
  cmd_vibe_live --> internal_valkey
  cmd_vibe_live --> internal_version
  cmd_vibe_live --> internal_webpush
  enginetest --> engineapi
  enginetest --> internal_auth
  enginetest --> internal_dbcrypt
  enginetest --> internal_rtmp
  enginetest --> internal_server
  enginetest --> internal_store
  enginetest_fake --> engineapi
  internal_activitypub --> internal_safehttp
  internal_chat --> internal_plaintext
  internal_engine_builtin --> engineapi
  internal_engine_builtin --> internal_feed
  internal_engine_builtin --> internal_ffmpeg
  internal_engine_builtin --> internal_ingest
  internal_engine_builtin --> internal_media
  internal_engine_builtin --> internal_rtmp
  internal_engines --> engineapi
  internal_fediverse --> internal_safehttp
  internal_ffmpeg --> engineapi
  internal_handoff --> engineapi
  internal_handoff --> internal_feed
  internal_handoff --> internal_ffmpeg
  internal_handoff --> internal_ingest
  internal_handoff --> internal_rtmp
  internal_handoff --> internal_sfu
  internal_ingest --> engineapi
  internal_ingest --> internal_rtmp
  internal_media --> engineapi
  internal_multistream_multistreamtest --> internal_multistream
  internal_multistream_twitch --> internal_multistream
  internal_multistream_youtube --> internal_multistream
  internal_server --> deploy_grafana
  internal_server --> engineapi
  internal_server --> engineapi_streamkey
  internal_server --> internal_activitypub
  internal_server --> internal_anonname
  internal_server --> internal_auth
  internal_server --> internal_avatar
  internal_server --> internal_changelog
  internal_server --> internal_chat
  internal_server --> internal_engine_builtin
  internal_server --> internal_fediverse
  internal_server --> internal_ffmpeg
  internal_server --> internal_handoff
  internal_server --> internal_ingest
  internal_server --> internal_licenses
  internal_server --> internal_mail
  internal_server --> internal_media
  internal_server --> internal_multistream
  internal_server --> internal_password
  internal_server --> internal_plaintext
  internal_server --> internal_rtmp
  internal_server --> internal_s3
  internal_server --> internal_safehttp
  internal_server --> internal_sfu
  internal_server --> internal_store
  internal_server --> internal_totp
  internal_server --> internal_turn
  internal_server --> internal_version
  internal_server --> internal_webhook
  internal_server --> internal_webpush
  internal_sfu --> internal_feed
  internal_store --> engineapi_streamkey
  internal_store --> internal_dbcrypt

Packages

Package Level What it is Imports Imported by
cmd/docs-stale 0 docs-stale reports the documents whose code has changed since the document was last edited -- documentation drift, found rather than remembered. -- --
cmd/gen-avatar-sheet 1 Writes a page showing every avatar glyph at the sizes avatars actually render at, so a change to internal/avatar/glyphs.go can be LOOKED at. internal/avatar --
cmd/gen-depgraph 0 gen-depgraph writes docs/architecture/dependencies.md: every package in this module, what it is, what it imports of this module and what imports it -- as a Mermaid graph and as a table. -- --
cmd/gen-docsite 0 gen-docsite builds the documentation site from docs/: one HTML page per Markdown page reachable from docs/index.md, with a sidebar per section. -- --
cmd/gen-licenses 0 gen-licenses collects the license of everything this app redistributes, into internal/licenses/licenses.json (S5). -- --
cmd/gen-openapi 2 Command gen-openapi writes api/openapi.json from the Go types this backend actually marshals. internal/engines --
cmd/vibe-live 4 Command vibe-live runs the backend -- the server, the media engine it was configured with, and the built frontend -- and its operator subcommands (admin, peer, vapid, ome-vhost). engineapi, internal/activitypub, internal/auth, internal/dbcrypt, internal/engine/builtin, internal/engines, internal/fediverse, internal/grpchealth, internal/mail, internal/multistream, internal/multistream/twitch, internal/multistream/youtube, internal/password, internal/server, internal/sfu, internal/store, internal/tasks, internal/turn, internal/valkey, internal/version, internal/webpush --
deploy/grafana 0 Package grafana holds vibe-live's Grafana dashboard templates (F87): a streamer's own channel, read from /api/v1/me/channel/metrics with a stats-only app password, and one instance, read from /internal/metrics or /api/v1/admin/metrics. -- internal/server
engineapi 0 Package engineapi is the contract between vibe-live and a media engine (F68, docs/design/engines-as-modules.md): what an engine definition is made of, and the only things it may ask of the app. -- cmd/vibe-live, enginetest, enginetest/fake, internal/engine/builtin, internal/engines, internal/ffmpeg, internal/handoff, internal/ingest, internal/media, internal/server
engineapi/streamkey 0 Package streamkey issues and validates per-user stream keys. -- internal/server, internal/store
enginetest 4 Package enginetest is the app, real, for an engine's own tests (F78 step 3, docs/design/engines-as-modules.md): a vibe-live server built the way the binary builds one, with the engine under test in it, driven over HTTP. engineapi, internal/auth, internal/dbcrypt, internal/rtmp, internal/server, internal/store --
enginetest/fake 1 Package fake is an engine that carries no media: its events are HTTP calls a test makes, and it records what the app asks of it (F78 step 3). engineapi --
internal/activitypub 1 Package activitypub holds the pieces of ActivityPub this app implements (F28). internal/safehttp cmd/vibe-live, internal/server
internal/anonname 0 Package anonname gives every anonymous chat participant a stable, readable display name instead of all of them being "viewer". -- internal/server
internal/auth 0 Package auth wires up OIDC login -- Authentik, or any compliant provider -- and the session cookie that carries identity through the rest of the app. -- cmd/vibe-live, enginetest, internal/server
internal/avatar 0 Package avatar generates a deterministic default profile picture for users who haven't uploaded their own: a streaming-shaped pixel glyph, filled in dot by dot, with both the shape and every pixel's colour derived from the person's subject. -- cmd/gen-avatar-sheet, internal/server
internal/changelog 0 Package changelog turns CHANGELOG.md into something the app can serve (F44). -- internal/server
internal/chat 1 Package chat implements live (WebSocket) and bot-facing (REST) chat, and the message validation/rate-limiting both paths share. internal/plaintext internal/server
internal/dbcrypt 0 Package dbcrypt encrypts the credential columns this app has to store in a readable form -- Fediverse OAuth access tokens, per-instance OAuth app secrets, stream keys. -- cmd/vibe-live, enginetest, internal/store
internal/engine/builtin 2 Package builtin is the built-in media engine (F59): RTMP publishing accepted by this app, transcoded by ffmpeg, and served as HLS from files -- no engine beside the app. engineapi, internal/feed, internal/ffmpeg, internal/ingest, internal/media, internal/rtmp cmd/vibe-live, internal/server
internal/engines 1 Package engines is the registry (F68, F78; docs/design/engines-as-modules.md): the one place, outside an engine, that knows which engines exist. engineapi cmd/gen-openapi, cmd/vibe-live
internal/fediverse 1 Package fediverse implements account linking against any Mastodon-API- compatible Fediverse instance (GoToSocial, Mastodon, Pleroma, Akkoma...): register an OAuth app with the user's chosen instance, then per-user OAuth so each user's "went live" posts go out under their own account, not a shared bot. internal/safehttp cmd/vibe-live, internal/server
internal/feed 0 Package feed is a stream in the shape WebRTC sends it: H.264 frames and Opus packets on a pair of tracks, pumped from what a source produces (docs/design/engines-and-players.md, "Handoffs: the built-in engine completes any engine"). -- internal/engine/builtin, internal/handoff, internal/sfu
internal/ffmpeg 1 Package ffmpeg is the process boundary to the ffmpeg binary: the one place this app starts it, bounds it, and decides what its output means (F59, ffmpeg parity step 2 in docs/design/engines-and-players.md). engineapi internal/engine/builtin, internal/handoff, internal/server
internal/grpchealth 0 Package grpchealth serves the standard gRPC health checking protocol -- grpc.health.v1.Health/Check -- so that Kubernetes' grpc: probe and grpc-health-probe can check this app, which otherwise speaks only HTTP. -- cmd/vibe-live
internal/handoff 2 Package handoff joins a built-in stage to an engine's stage through a protocol both speak (docs/design/engines-and-players.md, "Handoffs: the built-in engine completes any engine"). engineapi, internal/feed, internal/ffmpeg, internal/ingest, internal/rtmp, internal/sfu internal/server
internal/ingest 1 Package ingest is the app's publishing workflow (F59): RTMP on the port encoders are given, the stream key -- or a one-time publish token -- authorised, the channel claimed, and the media handed to whatever Sink this deployment configured. engineapi, internal/rtmp internal/engine/builtin, internal/handoff, internal/server
internal/licenses 0 Package licenses carries the notices this app has to ship with itself (S5). -- internal/server
internal/mail 0 Package mail sends the two messages this app has any business sending: a verification code and a password-reset link (F22). -- cmd/vibe-live, internal/server
internal/media 1 Package media is the app's media workflows (F59): serving media from a directory, and keeping a live channel's always-on outputs running. engineapi internal/engine/builtin, internal/server
internal/multistream 0 Package multistream is going live elsewhere at the same time (F91, docs/design/multistream.md): a streamer links their accounts on third-party platforms, and a publish here is pushed to each of them. -- cmd/vibe-live, internal/multistream/multistreamtest, internal/multistream/twitch, internal/multistream/youtube, internal/server
internal/multistream/multistreamtest 1 Package multistreamtest is the contract every multistream adapter passes (docs/design/multistream.md): what the workflow relies on of a Platform, checked against the adapter's own stand-in for its platform. internal/multistream --
internal/multistream/twitch 1 Package twitch is Twitch as a multistream destination (F91, docs/design/multistream.md). internal/multistream cmd/vibe-live
internal/multistream/youtube 1 Package youtube is YouTube as a multistream destination (F91, docs/design/multistream.md). internal/multistream cmd/vibe-live
internal/password 0 Package password hashes and verifies account passwords. -- cmd/vibe-live, internal/server
internal/plaintext 0 Package plaintext is the server's rule for text a person types and other people read: a channel's title and description, a chat message, a display name -- and the same text arriving from a federation peer. -- internal/chat, internal/server
internal/rtmp 0 Package rtmp is the app's RTMP ingest: the server encoders publish to, and the client that relays an authorised publish onward to an engine that ingests for itself (client.go, for LiveKit Ingress). -- enginetest, internal/engine/builtin, internal/handoff, internal/ingest, internal/server
internal/s3 0 Package s3 is the part of the S3 API past broadcasts need (F65, docs/design/recording.md "Where a kept broadcast goes"): put an object, delete one, list a prefix, and hand a viewer a signed link to read one. -- internal/server
internal/safehttp 0 Package safehttp holds the one HTTP client this app uses to fetch a URL somebody else chose. -- internal/activitypub, internal/fediverse, internal/server
internal/server 3 Package server is the HTTP surface and the workflows behind it: sign-in, channels and the dashboard, chat, federation, the media engine seam (engine*.go), and serving the frontend. deploy/grafana, engineapi, engineapi/streamkey, internal/activitypub, internal/anonname, internal/auth, internal/avatar, internal/changelog, internal/chat, internal/engine/builtin, internal/fediverse, internal/ffmpeg, internal/handoff, internal/ingest, internal/licenses, internal/mail, internal/media, internal/multistream, internal/password, internal/plaintext, internal/rtmp, internal/s3, internal/safehttp, internal/sfu, internal/store, internal/totp, internal/turn, internal/version, internal/webhook, internal/webpush cmd/vibe-live, enginetest
internal/sfu 1 Package sfu is the app's own WebRTC server: WHEP playback of a stream the app already holds (docs/design/engines-and-players.md, "WebRTC playback on the built-in engine"). internal/feed cmd/vibe-live, internal/handoff, internal/server
internal/store 1 Package store is the data layer, on SQLite or MariaDB: users, channels, stream keys, chat, federation peers, linked Fediverse accounts, tokens and the task queue. engineapi/streamkey, internal/dbcrypt cmd/vibe-live, enginetest, internal/server
internal/tasks 0 Package tasks runs deferred work that has to survive a restart. -- cmd/vibe-live
internal/totp 0 Package totp implements the time-based one-time passwords in RFC 6238, for the second factor described in backlog item F22. -- internal/server
internal/turn 0 Package turn mints ephemeral TURN credentials. -- cmd/vibe-live, internal/server
internal/valkey 0 Package valkey implements the shared state a multi-replica deployment needs: chat.Broadcaster (pub/sub fan-out) and chat.Counter (rate-limit tallies that hold across replicas). -- cmd/vibe-live
internal/version 0 Package version reports which build this is (O11). -- cmd/vibe-live, internal/server
internal/webhook 0 Package webhook posts "I went live" to an endpoint the streamer chose (F55). -- internal/server
internal/webpush 0 Package webpush sends a Web Push message to a browser's push service (F23). -- cmd/vibe-live, internal/server

Diagrams drawn by Mermaid (MIT license).