Getting started
This walks through setting up postline for one brand and one channel, then turning on scheduled publishing.
1. Create the project
npm install --global postline
postline init acme-content
cd acme-content
git init
You get:
postline.config.yaml brand, schedule, channels, rules
posts/welcome.md a sample post (status: draft)
assets/logo.svg replace with your logo
.github/workflows/postline.yml
2. Make it look like you
Open postline.config.yaml and set brand.name, brand.url, the colours and the
font. Drop your logo in assets/. A single-colour SVG works best; use a white mark
on a dark background or a dark mark on a light one.
Render the sample to check:
npx playwright-core install chromium
postline render --html
Open out/cards/welcome.png. The --html flag also writes welcome.html, which
you can open in a browser while you adjust colours.
3. Set your schedule
timezone: America/New_York
schedule:
weekStartsOn: mon
days: [mon, tue, wed, thu, fri]
times: ["09:00", "15:00"]
postline plan creates a draft file for each empty slot in the next posting week.
postline status shows the week at a glance.
4. Write
Fill in the drafts. Remove status: draft when a post is ready. Run
postline lint as you go. postline brief prints the open slots, the rules and
recent topics in one page, which is useful when someone else writes the copy.
To see roughly how each network will show each post, keep a preview open while you write:
postline preview --open
It reloads when you save. See previews.
5. Publish
Try it locally first:
postline publish --dry-run --now 2026-10-27T13:05:00Z
Then choose a runner in scheduling.md. The simplest no-credit option on an always-on machine is:
postline daemon --every 15
Before the first real post, run postline doctor. It checks your tokens,
Chromium, the schedule and the ledger, and tells you what to fix. Add a
notify: block to hear about failures: see health checks and alerts.