Skip to content

Queue your posts.Publish on time, every time.

Bulk-schedule X posts through the official API. CLI, desktop app, or deploy daemon — your API keys, your machine, no hosted service.

npm install -g postwave

  • Official X API
  • Bulk paste import
  • Image posts
Bulk paste importOfficial X APITimezone-awareImage postsSelf-hostableOpen source MIT
postwave · queueWorker live
  • Today · 09:00Morning thread hookPublished
  • Today · 14:00Product update goes livePublished
  • Today · 18:30End-of-day recapScheduled
bulk-paste · live preview
#1: Scheduled time must be in the future
#2: Scheduled time must be in the future
#3: Draft

0+

Posts scheduled (illustrative)

0%

On-time delivery (illustrative)

Illustrative metrics for design purposes — not live production data.

AR
Alex Rivera

@alexbuilds

Finally a scheduler that doesn't need a browser tab open. Bulk paste + walk away.
JK
Jordan Kim

@jordancreates

Self-hosted PostWave on Docker in an afternoon. My queue, my infra, my rules.
SO
Sam Ortiz

@samops

Official API only — no sketchy automation. Exactly what I wanted for batch posting.

Illustrative testimonials — representative personas, not real individuals.

How it works

Three steps to a self-running feed

Paste, schedule, close the laptop. The worker handles the rest.

01

Paste your posts

Drop a batch with date, time, and text — or compose one at a time.

02

Set the schedule

Timezone-aware scheduling publishes to the exact minute.

03

Close the laptop

The scheduling daemon publishes via the official X API while you are offline.

Features

Everything you need, nothing you don't

Bulk paste

Import dozens of posts in one paste.

Official X API

OAuth-connected, policy-compliant.

Timezone-aware

Schedule in your local time.

Failure alerts

Email on failure with one-click retry.

Drafts & edits

Tweak posts until they publish.

Self-hostable

Docker, AWS, Railway, or Fly.io.

Get started

Three ways to run PostWave

Same engine — pick the surface that fits how you work.

CLI

Scriptable scheduling for developers and headless servers.

npm install -g postwave
postwave init
postwave login
postwave daemon

Desktop

Tray app with queue, compose, and settings — no terminal required.

Download releases

Deploy daemon

Always-on publishing on your Fly.io, Railway, or Docker host.

postwave deploy fly
# or: docker compose --profile deploy up -d

SQLite

Local-first post storage

Min-heap

O(log n) scheduling

X API v2

Official OAuth publishing

Self-host

Run it on your infrastructure

All deploy options use your credentials and your accounts. You are the operator.

Docker

Run the deploy daemon with a persistent volume at /data.

docker compose --profile deploy up -d
curl localhost:8081/health

Fly.io

Generate a Fly app with SQLite volume via the CLI wizard.

postwave deploy fly

Railway

Deploy the daemon using the included Railway template.

Deployment guide

See docs/INSTALL.md for the full setup guide. Disclaimer

Your credentials stay yours

OAuth-only X connection. Tokens encrypted at rest. Disconnect anytime. When you self-host, your data never leaves your infrastructure.

  • OAuth only

    We never see your password.

  • Encrypted tokens

    AES-256-GCM at rest.

  • Official API

    No browser automation.

  • Disconnect anytime

    Revoke in one click.

FAQ

Questions, answered straight

Is PostWave free?

Yes. PostWave is open source under the MIT license. Run the CLI or desktop app locally, or deploy the daemon to your own cloud. You only pay for your X API usage.

Will this get my X account flagged?

PostWave publishes through X's official API using OAuth — not browser automation. That is the sanctioned method third-party apps are expected to use.

Do I need to keep my computer on?

The CLI and desktop app need your machine awake at publish time, or a background daemon running. For 24/7 scheduling without your laptop, deploy the daemon to Docker, Fly.io, or Railway.

What's the bulk paste format?

One post per line: YYYY-MM-DD HH:mm | your text. Lines without a timestamp stay as drafts.

Why do link posts cost more on X?

X charges more for posts containing URLs through its API (~$0.20 vs ~$0.015 for text). That cost goes to your X Developer account, not PostWave.

Star it. Fork it. Ship posts.

Open-source bulk scheduling for X. CLI, desktop, and deploy daemon powered by a shared engine and the official X API v2.