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).