Yoink ships as a single Go binary that bundles both the REST API and the Svelte frontend. There is no Docker image or package registry — you build it yourself from the source repository. This page walks through every step from a fresh clone to a running server.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/coah80/yoink/llms.txt
Use this file to discover all available pages before exploring further.
Build overview
The Makefile at the root of the repository defines all build targets. The version string is automatically derived from Git tags at build time and injected into the binary via linker flags:-s -w flags strip the symbol table and DWARF debug information, producing a smaller binary. If no Git tags exist, the version falls back to "dev".
Build steps
Install system dependencies
Yoink requires
yt-dlp and ffmpeg at runtime. Install them before starting the server so the startup dependency check passes.Configure your environment
Copy the example environment file and edit it with your values. The server loads At minimum, review
.env automatically on startup via godotenv.PORT (defaults to 3001) and BOT_SECRET if you plan to use the Discord bot. See the Environment Variables page for the full reference.Run the server
- Print a startup banner showing the version
- Check all required and optional dependencies (
yt-dlp,ffmpeg,ffprobe,gallery-dl,python3 + whisper) - Create all temp directories under
/var/tmp/yoinkif they don’t exist - Begin refreshing YouTube session tokens in the background
- Start listening on
:3001(or your configuredPORT)
./public/ directory located next to the binary.Available Makefile targets
| Target | Command | Output |
|---|---|---|
make build | go build … ./cmd/yoink | ./yoink |
make bot | go build … ./cmd/bot | ./yoink-bot |
make run | go run … ./cmd/yoink | (runs in place, no binary) |
make linux | Cross-compile for Linux amd64 | ./yoink-linux |
make linux-bot | Cross-compile bot for Linux amd64 | ./yoink-bot-linux |
make windows | Cross-compile for Windows amd64 | ./yoink.exe |
make clean | Remove all build outputs | — |
Development mode
For local development, skip the build step entirely and usemake run:
go run ./cmd/yoink with the same LDFLAGS, so the version is still injected. Changes require a restart — there is no hot-reload.
Cross-compilation
If you are building on macOS or Windows and targeting a Linux server, use the cross-compilation targets.- Linux (amd64)
- Windows (amd64)
Build a Linux binary from any host platform:This sets
GOOS=linux GOARCH=amd64 and outputs yoink-linux. Copy it to your server along with the public/ directory:Building the Discord bot
The Discord bot is a separate binary built from./cmd/bot. It connects to the Yoink API over HTTP rather than embedding the media logic itself.
DISCORD_TOKEN, DISCORD_APP_ID, etc.) and is configured independently from the main server.
Production deployment
A minimal systemd unit file to keep Yoink running:The
public/ directory must be located in the same directory as the yoink binary. The server resolves it as filepath.Join(filepath.Dir(os.Args[0]), "public") at runtime. If the directory is missing or not found, the frontend will not be served — only the API will respond.