a faster, lower-latency alternative to owncast, aka "twitch in a box"
  • Go 65%
  • Nix 15.6%
  • HTML 12.9%
  • JavaScript 3.7%
  • CSS 2.8%
Find a file
2026-10-07 20:07:00 -07:00
assets add WHEP client,,,, this shit is like half usable??? 2026-10-07 20:07:00 -07:00
cmd/bnuuyears chore: cleanup SPDX headers 2026-10-06 01:12:34 -07:00
config chore: cleanup SPDX headers 2026-10-06 01:12:34 -07:00
LICENSES add prettier, update image licenses, clarify licensing 2026-10-06 11:21:18 -07:00
nix nix: add docker/OCI builder 2026-10-06 12:31:41 -07:00
services chore: cleanup SPDX headers 2026-10-06 01:12:34 -07:00
templates add WHEP client,,,, this shit is like half usable??? 2026-10-07 20:07:00 -07:00
utils/fiberutils chore: cleanup SPDX headers 2026-10-06 01:12:34 -07:00
.air.toml licenses: add REUSE; comply 2026-10-06 01:09:55 -07:00
.env licenses: add REUSE; comply 2026-10-06 01:09:55 -07:00
.envrc licenses: add REUSE; comply 2026-10-06 01:09:55 -07:00
.gitignore licenses: add REUSE; comply 2026-10-06 01:09:55 -07:00
.prettierignore add prettier, update image licenses, clarify licensing 2026-10-06 11:21:18 -07:00
default.nix nix: add docker/OCI builder 2026-10-06 12:31:41 -07:00
flake.lock nix flake update 2026-10-05 19:46:27 -07:00
flake.nix nix: add docker/OCI builder 2026-10-06 12:31:41 -07:00
go.mod licenses: add REUSE; comply 2026-10-06 01:09:55 -07:00
go.sum port from hertz to fiber 2026-10-05 13:53:29 -07:00
README.md docs: add note about docker build (fixes #11) 2026-10-06 12:33:21 -07:00
REUSE.toml add prettier, update image licenses, clarify licensing 2026-10-06 11:21:18 -07:00

a bunny's ears

bnuuyears

bnuuyears is a WebRTC SFU designed around single-user, low-latency livestreams similar to OwnCast.

roadmap

  • WHIP ingestion from OBS or ffmpeg
  • RTMP ingestion
  • WHEP/WebRTC video stream (lowest latency)
  • simulcast (OBS layers)
  • WARP ingestion (even faster)
  • HLS video stream (highest latency, best compatibility)
  • WebIRC chat (no web browser required)
  • local chat (no IRC server required)
  • chat emotes
  • activitypub outgoing notifications
  • shared browser (like rabb.it)
  • maybe some webxr bullshit (like bigscreen)

developing

nix is our best friend

# start the server
nix run

# use live-reload
# CAVEAT: do not use when developing webrtc.
nix run .#dev

# just run go
go run ./cmd/bnnuyears

# build it (prod assets)
nix build

# build it (dev assets)
go build ./cmd/bnuuyears

# test it
go test ./...

# lint it
nix fmt

deploying on nixos

(sorry for the crudeness please adapt its instructions)

with flakes

{
  inputs = {
    bnuuyears.url = "https://git.gay/41666/bnuuyears/archive/main.tar.gz";
  };
  outputs = inputs: {
    # ....
    imports = [
      inputs.bnuuyears.nixosModules.default
    ];

    services.bnuuyears = {
      enable = true;
    };
  };
}

deploying a container

use the image: git.gay/41666/bnuuyears:latest

streaming to it

this is temporary and will change. pay attention,

with OBS,

  1. Settings
  2. Stream
  3. Service set to "WHIP"
  4. Server set to http://your-ip:8073/webrtc/whip
  5. Bearer Token left blank
  6. Total layers set to 1 (we'll support more later)

contributing

agree that trans rights are human rights

all code must be organically grown. synthetically generated carrots are NOT permitted.

if skill is an issue, try opening an issue instead. maintainers will get to it when they can.

license

all code licensed under AGPL-3.0 only, unless otherwise tagged (such as pion example code)

bnuuyears branding images are licensed under CC BY-NC-SA 4.0 by 41666.

this project is REUSE 3.3 compliant. files MUST include license information or be annotated via REUSE.toml.

licenses texts are available in ./LICENSES