Overview
Boot your whole dev stack with one command, with live reload and multiplexed logs.
blink boots your dev stack. Point it at a repo (or a few), run blink, and your shell scripts, Go binaries, Node apps, and Docker Compose stacks come up together with multiplexed logs, per-service tabs, and port reclaiming. It restarts a service when its files change, keeps everything alive, and writes per-service log files the whole time.
It detects what a project runs, so the common case needs zero config, and it stays fully offline with no network calls at build or run time.
Install
# go
go install github.com/toaweme/blink/cmd/blink@latest
# homebrew (macos)
brew install toaweme/tap/blink
# scoop (windows)
scoop bucket add toaweme https://github.com/toaweme/scoop-bucket
scoop install toaweme/blinkEvery release also lists a prebuilt archive for each OS and arch on the releases page.
Boot the stack
Run blink in a project. With no blink.yml, it scans the directory, shows a checkbox of the services it detected, and runs your picks ephemerally. Nothing is written.
blink # same as `blink run`Once you want a committed setup, scan the project and write a config, then supervise it with live reload.
blink init # interactive picker, writes blink.yml
blink run # supervise everything in blink.ymlrun is the default command, so blink and blink run do the same thing.
A minimal blink.yml lists the services to supervise. Each service picks a runtime that owns its lifecycle.
services:
- name: db
runtime: docker # drives `docker compose`, streams every container's logs
- name: api
runtime: go # builds and runs a Go package, auto-watches go.work roots
go:
package: ./cmd/api
ports: [8080] # reclaimed before start
reload:
reload: true # restart on file change
reload_on_service: [db] # start after db, restart whenever db restarts
- name: web
runtime: node # detects the package manager, runs `<pm> run dev`
dir: ../ui # services can live in sibling repos
node:
script: devNote
blink reads blink.yml, blink.yaml, blink.toml, or blink.json, discovered by walking up from the current directory. A .env in the project root is auto-loaded at startup, and shell-set variables still win over it.
Where to go next
Start with the guides to learn how blink boots and supervises a stack, then reach for the reference when you need an exact command flag, config field, or key.
blink init, editing it, and resetting state.RuntimesThe shell, go, node, and docker runtimes and the defaults each contributes.Live reloadFile-watch restarts, the dependency DAG, and port reclaiming before a service starts.The TUIPer-service tabs, log selection and copy, the container switcher, and rebindable keys.ReferenceEvery command flag, config field, runtime block, path, env var, and keybinding.