v2.4.0 · zero-config log streaming

Every log. One pipe.

Pipe any process into stdout and get structured, searchable logs in under a minute. No agent, no sidecar, no YAML.

$npm i -g stdout
~/acme/api — stdout

$stdout run -- node server.js

→ streaming to https://app.stdout.dev/s/9f2a1c

12:04:31infoserver listening on :3000

12:04:33warnslow query 812ms db.users.find

12:04:35errorECONNREFUSED redis:6379

12:04:36inforetry 1/5 in 250ms

$stdout search "ECONNREFUSED" --since 1h

2.1M installs4.2k starsMIT licensedNo telemetry
ACME LABSNORTHWINDHELIOSTATBLACKBOXKERNELWORKSOCTOPADSIGNALFIREMERIDIANACME LABSNORTHWINDHELIOSTATBLACKBOXKERNELWORKSOCTOPADSIGNALFIREMERIDIANACME LABSNORTHWINDHELIOSTATBLACKBOXKERNELWORKSOCTOPADSIGNALFIREMERIDIANACME LABSNORTHWINDHELIOSTATBLACKBOXKERNELWORKSOCTOPADSIGNALFIREMERIDIAN

01 / why stdout

Three things that break every logging setup.

You lose logs the moment a container dies.

The process exits and its output goes with it. stdout ships every line off the box as it is written, so a crash loop leaves a trail instead of a gap.

after the crash

$docker logs api

Error: No such container: api

$stdout tail api --since 10m

12:04:35errorECONNREFUSED redis:6379

Grep is not observability.

Every line is parsed into fields the moment it lands — level, timestamp, message, and anything you emit as JSON. Query it like a table, not a haystack.

structured query

$stdout search 'level:error AND service:api' \

--since 24h --json

→ 14 matches in 2,148,903 lines (38ms)

→ grouped by trace_id, newest first

Your log bill scales with noise, not usage.

Sample debug lines, drop health checks, keep every error. Retention rules live in one file you can read in ten seconds.

stdout.toml

[retention]

error = "90d"

info = "7d"

debug = "off"

02 / the surface

Five commands. That is the whole tool.

stdout run

Wrap any process and stream its output as it happens.

stdout tail

Follow a live stream, filtered by service, level, or trace id.

stdout search

Query historical logs with field filters and time ranges.

stdout export

Dump a result set to NDJSON, CSV, or straight into a bucket.

stdout keys

Create, rotate, and revoke ingest keys per environment.

03 / compatibility

If it prints, it works.

There is no SDK to install and no language binding to wait for. stdout reads the two streams every runtime already writes to.

node
python
go
rust
java
php
docker
linux
macos
aws
actions
anything

04 / getting started

Running in under a minute.

Step 01

Install

One binary, no runtime dependencies. Works on macOS, Linux, and inside CI.

$npm i -g stdout
Step 02

Wrap your process

Swap your start command. Everything on stdout and stderr is captured as it is written.

$stdout run -- npm start
Step 03

Open the stream

A shareable URL with live tail, search, and filters. Nothing to configure, nothing to host.

$stdout tail --web
app.stdout.dev/s/9f2a1c
level:error AND service:api
allinfowarnerror
12:04:31infoapiserver listening on :3000
12:04:32infoworkerqueue drained in 84ms
12:04:33warnapislow query 812ms db.users.find
12:04:35errorapiECONNREFUSED redis:6379
12:04:36infoapiretry 1/5 in 250ms
12:04:38debugwebcache hit ratio 0.94
12:04:39errorworkerjob 8812 failed after 3 attempts
12:04:41infoapiconnected redis:6379
streaming · 1,204 lines/min
2,148,903 lines retained · 7d

05 / in production

What people say once it is running.

"
We replaced a 400-line log shipper config with one command. I have not thought about log delivery since.
dk

@dmitri_k

staff engineer · northwind

"
The search syntax is the one that was already in my head. That is the entire review.
sb

@sam.builds

founder · octopad

"
Log spend dropped 60% in a week, because dropping health checks took exactly one line.
pr

@priya_r

platform lead · heliostat

<1ms

added per line

12MB

resident memory

0

config files required

9

supported runtimes

06 / questions

The five you were going to email us.

Can I self-host it?

Yes. The collector is MIT licensed and ships as a single binary. Point it at your own instance and nothing leaves your network.

How long are logs kept?

Seven days on the free plan, ninety on Pro, and configurable per level. Retention rules live in one config file.

Which languages are supported?

All of them. It reads stdout and stderr, so anything that prints works — Node, Python, Go, Rust, a shell script, a compiled binary.

Does it slow my app down?

It writes to a local buffer and ships asynchronously. Under a millisecond added per line, with backpressure if the network stalls.

Do you collect telemetry?

No. The CLI makes exactly one outbound connection: the one that carries your logs.

$ ready when you are

Stop losing logs.

Install it, wrap your process, watch the stream. Free for solo projects, forever.

$npm i -g stdout
Swebsy