FlowStock
● Part of VulOS — the open, self-hostable web OS

Inventory that keeps every branch in sync — even offline.

FlowStock is a single self-hosted binary for multi-branch stock control: products, stock, orders, purchasing and accounts. Each branch runs its own copy, works fully offline, and syncs peer-to-peer with the others. No cloud, no accounts, no central server.

Get started Read the docs MIT licensed · single binary

Try it in seconds: docker run -p 8787:8787 ghcr.io/vul-os/flowstock

FlowStock dashboard FlowStock dashboard (dark)

Everything a branch needs, on hardware you own.

Real stock control backed by an append-only ledger — not a spreadsheet, not a mutable counter that drifts.

📦

Products & variations

Categories, SKUs, price and cost price, attributes and reorder points — with per-branch stock on hand.

🧾

Orders & purchasing

Sales orders that deduct stock on confirmation; purchase orders with VAT and goods receiving, including partial receipts.

↔️

Adjustments & transfers

Stock counts, write-offs and between-branch transfers — every change is an audited movement in the ledger.

💰

Creditors & debtors

Balances computed from orders, purchase orders and recorded payments. Know who owes what at a glance.

📊

Dashboard & reports

Sales, inventory valuation, movements, low stock and accounts — all computed live, all exportable to CSV.

🔒

Yours, private by default

One ~15 MB binary with a local SQLite database. No cloud dependency, no subscription, no account required.

Leaderless branch sync that survives going offline.

Stock is an append-only ledger, so two branches that both traded while disconnected always converge to the same totals. No central server decides the truth — the branches do, together.

  1. 1

    Every branch is its own node

    Run FlowStock on a laptop, a shop PC, a server, a NAS or a Raspberry Pi. Each keeps a full local database.

  2. 2

    Pair with a shared secret

    Point one branch at another over the LAN, a VPN, or a Vulos Relay tunnel. A new device adopts the existing workspace and pulls its history.

  3. 3

    Keep trading, online or not

    An offline branch never stops working. When it can reach a peer again, changes replay both ways — and merge without conflict.

  4. 4

    Everyone converges

    Catalog edits resolve last-writer-wins; stock movements merge by union. Any topology works: a pair, a hub, or a full mesh.

Johannesburg Cape Town ┌──────────┐ ┌──────────┐ │ FlowStock│◀─ sync ──▶│ FlowStock│ │ SQLite │ (Bearer) │ SQLite │ └────▲─────┘ └────▲─────┘ │ ┌──────────┐ │ └─────▶│ Durban │◀───┘ │ FlowStock│ └──────────┘ no central server · each node relays any other node's changes

A closer look

Generated straight from the app's demo data.

Run it in under a minute

One binary, no dependencies. Docker, a release download, or from source.

# Docker
docker run -p 8787:8787 -v flowstock-data:/data \
  -e FLOWSTOCK_HOST=0.0.0.0 -e FLOWSTOCK_DATA_DIR=/data \
  ghcr.io/vul-os/flowstock:latest

# or a release binary
./flowstock            # then open http://localhost:8787

# or from source (Go 1.25+, Node 18+)
git clone https://github.com/vul-os/flowstock.git
cd flowstock && npm install && npm run build:all
./flowstock

Sovereign inventory for the whole business.

Free and open source. Runs standalone, or as an app inside the Vulos OS.