DEV Community

Apoorv Darshan
Apoorv Darshan

Posted on

Why I have no database, and where your config actually lives

When people hear "crossposting dashboard with scheduling and history," they assume Postgres. Crossposter has no database.

Everything stateful is a file on your disk, in the folder where you launched it:

  • poster.config.local.json holds your platform profiles and your scheduled posts.
  • .poster-uploads holds media you've uploaded.
  • Publish history is kept locally too.
  • Per-account browser/session data (X, Instagram, Pinterest) sits in its own local directories.

That's the entire persistence story. No migrations, no connection string, no ORM, no "is the DB up?" Run the npx command from a directory and that directory becomes your Crossposter's home:

mkdir -p ~/Crossposter
cd ~/Crossposter
npx @apoorvdarshan/crossposter@latest
Enter fullscreen mode Exit fullscreen mode

Why bother avoiding a DB? Because the product is single-user and local-first. A JSON file is trivially inspectable, backuppable (copy the folder), and version-trackable if you want. Your data is never in a schema you can't read on a server you don't own.

The tradeoff is real: JSON config doesn't scale to many concurrent users or huge histories, and it isn't trying to. The narrow scope is what lets it run anywhere Node runs without provisioning anything.

This post was published through Crossposter, whose config is, right now, a file on my Mac.

https://crossposter.apoorvdarshan.com/

Top comments (0)