Skip to content

Releases: 1cbyc/postline

postline 0.3.1

Choose a tag to compare

@1cbyc 1cbyc released this 01 Nov 23:21
d189496

Same code as 0.3.0, republished under the maintainer's public address. 0.3.0 and
earlier npm versions recorded a private email in their publish metadata and are
withdrawn. Projects pinned to 0.3.0 should move to 0.3.1 (POSTLINE_VERSION and
uses: 1cbyc/postline@v0.3.1 in the workflow).

For everything in the 0.3 line (preview, pull request previews, doctor, alerts) see the 0.3.0 notes.

Install: npm install --global postline@0.3.1

postline 0.3.0

Choose a tag to compare

@1cbyc 1cbyc released this 01 Nov 22:47
f569c09

See it before it ships, and hear about problems before a post fails.

  • postline preview: a local page per post with the card, lint results and each channel's text the way that network will show it: length against the limit, highlighted links and hashtags, where LinkedIn folds behind "see more", the webhook payload and the files channel's Markdown. Reloads on save
  • Pull request previews: a GitHub Action (uses: 1cbyc/postline@v0.3.0) that comments the changed posts' rendered cards, per-channel lengths and lint results on pull requests that change posts, kept up to date on every push. Lint errors in other posts still fail the check. postline init workflows use it. postline pr-report produces the same report locally
  • postline doctor: checks the config, lint, drafts due soon, Chromium, each channel's secrets and login, LinkedIn API version age and token expiry, stuck ledger entries, stale locks and the workflow's postline version
  • Alerts: notify: sends failed, uncertain and blocked sends and doctor errors and warnings to Slack, Discord, ntfy or a signed JSON endpoint, at most once a day per problem, even when it repeats every run
  • The daemon runs doctor once a day, even when publishing fails, and sends its errors and warnings, including the 14-day token-expiry warning
  • LinkedIn channels accept tokenExpires: so doctor can warn 14 days before the token stops working

Install: npm install --global postline@0.3.0
Pull request previews: uses: 1cbyc/postline@v0.3.0
Docs: https://postline.nsisong.com/docs/previews/ and https://postline.nsisong.com/docs/health-and-alerts/

postline 0.2.2: the website

Choose a tag to compare

@1cbyc 1cbyc released this 01 Nov 22:47
ec1e790

A website, and a clearer license.

  • postline now has a website with the full guides: https://postline.nsisong.com
  • License 1.2 says plainly what was intended: anyone may install and run postline, including commercially, edit the files postline init creates, and keep everything postline produces. Copying, modifying or redistributing the code, offering it as a hosted service, and AI training still need written permission

Website and docs: https://postline.nsisong.com

postline 0.2.1

Choose a tag to compare

@1cbyc 1cbyc released this 01 Nov 21:48
6838ab8

Safer delivery.

  • A send that ends without a clear answer (timeout, dropped connection, 5xx, or LinkedIn accepting a post without returning its id) is now recorded as uncertain and never retried automatically; previously it was failed and retried, which could post twice
  • Bluesky posts use a fixed record key per post, and postline looks it up before posting, so retries can't create a duplicate
  • Webhook timeouts and 5xx responses are uncertain too; 4xx responses are still retried
  • publish, daemon checks, retry and mark hold .postline/publish.lock, so two processes on one project can't send the same post
  • A card that fails to render no longer uses up a publish attempt
  • The ledger is flushed to disk before it replaces the old one
  • postline init pins the generated GitHub workflow to its own version and installs it from npm; the workflow no longer adds a maintainer Co-authored-by line to your ledger commits
  • Install from npm: npm install --global postline
  • New license: the Nsisong Source-Available License 1.1 (see LICENSE). Earlier grants are preserved in LICENSE.previous

Install: npm install --global postline@0.2.1 (once published to npm), or npm install --global https://github.com/1cbyc/postline/releases/download/v0.2.1/postline-0.2.1.tgz.

v2026.0.1.1. - updated demo graphics

Choose a tag to compare

@1cbyc 1cbyc released this 17 Oct 08:04
9feafd4

v2026.0.1.0 - initial release

Choose a tag to compare

@1cbyc 1cbyc released this 15 Oct 20:36
v2026.0.1.0
807cb85

Postline v2026.0.1.0

Postline is a Git-native CLI for planning, validating, rendering, and publishing branded social posts through official APIs. It supports LinkedIn, Bluesky, Mastodon, signed webhooks, and file exports.

Run without GitHub Actions

Install Postline and start its built-in 15-minute scheduler:

npm install --global https://github.com/1cbyc/postline/releases/download/v2026.0.1.0/postline-0.1.0.tgz
postline daemon --every 15

This requires no GitHub Actions minutes or credits. Run it from your Postline content project on an always-on laptop, VPS, home server, or container.

Install and create a project

This release is distributed as the attached npm tarball; it is not currently published to the npm registry.

npm install --global https://github.com/1cbyc/postline/releases/download/v2026.0.1.0/postline-0.1.0.tgz
postline --version
postline init my-content

Node.js 20 or newer is required. Install Chromium once if posts render image cards:

npx playwright-core@1.64.1 install chromium

Scheduling without GitHub Actions

GitHub Actions is optional. No Actions minutes or credits are required. From your content project, run:

postline daemon --every 15

The daemon checks immediately and then every 15 minutes, reloads configuration and posts before every check, runs checks serially so it cannot overlap itself, keeps running after an individual check fails, and stops cleanly on SIGINT or SIGTERM.

For a durable Linux service, postline init creates schedulers/systemd/postline.service.example. Setup and recovery instructions are in Self-hosted scheduling without GitHub Actions. The complete runner comparison is in Scheduling.

The generated GitHub Actions workflow remains available for users who want it. It installs this release asset directly instead of referring to an unavailable npm package.

What is included

  • Markdown content calendar with weekly planning, status, and writing briefs
  • Strict lint rules for channel limits, links, hashtags, emoji, repeated topics, media, and broken text encoding
  • Branded square, portrait, and landscape cards rendered through Chromium
  • Official LinkedIn, Bluesky, and Mastodon adapters, plus signed webhooks and file exports
  • Durable at-most-once publishing ledger with failure, retry, skip, and manual recovery states
  • Two-phase publishing for disposable CI runners
  • Built-in persistent daemon and systemd starter for zero-credit self-hosting
  • Strict runtime validation, contained filesystem paths, bounded HTTP requests, and pinned dependencies

Verification

  • 45 automated tests pass on the release source
  • CI passes on Node.js 20, 22, and 24, including real Chromium rendering
  • The release tag is a signed annotated tag and GitHub reports its signature as Verified
  • SHA-256: c5589f72c26c348fcc30f8dacdaf6e05bb0b3e469788ba7c8806e76ebcab4e28

Full changelog: https://github.com/1cbyc/postline/commits/v2026.0.1.0