No description
  • JavaScript 45.5%
  • Svelte 34.8%
  • TypeScript 17%
  • CSS 1.4%
  • Dockerfile 0.5%
  • Other 0.8%
Find a file
ulysia 9cb0967584
All checks were successful
Build api image / docker (push) Successful in 1m12s
Build web image / docker (push) Successful in 1m13s
web: make branding configurable at runtime
the frontend is a static build, so everything from $env/static/public is
inlined by vite and can't be changed by whoever runs the image. that made
the published image usable only for this instance.

app.html now carries a __COBALT_*__ placeholder for each configurable
value, and web/docker-entrypoint.sh rewrites them from env before caddy
starts. $lib/runtime-config reads the result synchronously (the injected
script is in <head>, so it has run before any module imports it) and
treats an unsubstituted placeholder as unset, falling back to whatever
was compiled in. dev builds and images with no env set behave exactly as
before.

configurable: WEB_INSTANCE_NAME, WEB_TAGLINE, WEB_DEFAULT_API, plus the
mascot set, which is built from whatever .png files exist in
/srv/meowbalt so operators can mount their own art over it.

if a supplied tagline doesn't already mention "community" anywhere, the
entrypoint appends "(community instance)" -- third-party instances need
to be identifiable as such. the build-time default is left alone, since
it's written with that in mind.

build-time WEB_* are now ARGs rather than hardcoded ENV, so a different
instance can be baked in with --build-arg.

adds .gitattributes pinning LF on shell scripts and Dockerfiles: a CRLF
shebang makes the kernel look for "/bin/sh\r" and the container won't
start.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 12:17:16 +02:00
.forgejo api/youtube: add dual backend with automatic fallback 2026-08-09 09:20:11 +02:00
api api: install canvas so botguard can fingerprint properly 2026-08-09 12:06:33 +02:00
docs api/youtube: add dual backend with automatic fallback 2026-08-09 09:20:11 +02:00
packages revert 1901f563f0 2026-06-28 18:37:45 -04:00
web web: make branding configurable at runtime 2026-08-09 12:17:16 +02:00
.deepsource.toml ci: update .deepsource.toml 2024-05-14 06:57:09 +00:00
.dockerignore docker: update dockerfile to use pnpm features 2024-08-03 16:48:57 +00:00
.gitattributes web: make branding configurable at runtime 2026-08-09 12:17:16 +02:00
.gitignore api/security: implement api keys as method of authentication 2024-10-04 14:58:56 +00:00
compose.yml web: make branding configurable at runtime 2026-08-09 12:17:16 +02:00
CONTRIBUTING.md CONTRIBUTING: mention comment feature 2024-11-05 18:28:06 +00:00
LICENSE README: clarify root license 2024-09-09 16:00:23 +00:00
package-lock.json update youtubei.js and remove player_id 2025-10-22 17:38:04 -04:00
package.json update everything 2026-06-24 14:50:57 -04:00
pnpm-lock.yaml api: install canvas so botguard can fingerprint properly 2026-08-09 12:06:33 +02:00
pnpm-workspace.yaml api: install canvas so botguard can fingerprint properly 2026-08-09 12:06:33 +02:00
README.md remove royalehosting 2026-06-22 18:55:35 -04:00

cobalt is a media downloader that doesn't piss you off. it's friendly, efficient, and doesn't have ads, trackers, paywalls or other nonsense.

paste the link, get the file, move on. that simple, just how it should be.

cobalt monorepo

this monorepo includes source code for api, frontend, and related packages:

it also includes documentation in the docs tree:

ethics

cobalt is a tool that makes downloading public content easier. it takes zero liability. the end user is responsible for what they download, how they use and distribute that content. cobalt never caches any content, it works like a fancy proxy.

cobalt is in no way a piracy tool and cannot be used as such. it can only download free & publicly accessible content. same content can be downloaded via dev tools of any modern web browser.

contributing

if you're considering contributing to cobalt, first of all, thank you! check the contribution guidelines here before getting started, they'll help you do your best right away.

licenses

for relevant licensing information, see the api and web READMEs. unless specified otherwise, the remainder of this repository is licensed under AGPL-3.0.