SUPPORT CENTER
Answers first. Tickets last.
PlantStacks is built to support itself: the product diagnoses its own install (Admin → Health), every error carries a fix, and the in-product assistant answers from local docs. This page covers everything else — searchable, no login needed.
Getting started
Install PlantStacks (Windows or Linux)
- Grab the package from Downloads and verify the SHA-256 checksum.
- Windows: unzip anywhere and run PlantStacks.exe. Linux: unpack the bundle and run ./install.sh (installs a systemd service).
- Open https://localhost:8443/ — your browser will warn about the self-signed certificate (expected for a closed install; proceed).
- The first-run wizard walks you through the admin account, your license, and your first item. Ten minutes, no internet required.
Full walkthrough: Install guide.
Activate a license (or start a trial)
- You received a .lic file by email (or the bundled 30-day trial is already active).
- In the product: Subscription → Activate → paste the key or upload the file.
- Command line alternative: node platformctl.js license install --file plantstacks.lic.
Licenses verify offline against a key embedded in the software — no activation server, so activation works on an air-gapped machine. If activation reports "signature invalid", the file was altered in transit (some mail systems re-encode attachments) — re-download it from the link in the same email.
Import your existing data (CSV / QuickBooks)
- Import/Export → Templates: download the typed template for items, opening stock, BOMs, customers or suppliers (QuickBooks presets included).
- Fill it, upload it, and run the dry-run validation — it lists every problem row with the reason before anything is written.
- Apply. Opening stock lands as ledger movements, so your on-hand starts reconciled.
Import looks wrong? Nothing is destroyed by a bad import — movements are append-only. Use dry-run first next time; to redo, reverse the opening-stock movements or restore last night's backup.
Post your first item and first transaction
- Turn on Inventory from Features (every feature is included on every plan).
- Inventory → Items → New: give it a SKU, a name and a unit of measure, then save.
- Open the item → Receive (or use the shop-floor Kiosk): enter a quantity and a location.
- On-hand updates instantly and the movement is written to the append-only ledger with who and when — a live system with a full audit trail.
Want sample data to click around first? The first-run wizard can load a demo shop (3 items + a BOM), resettable anytime.
Set up a second plant (hub & spoke sync)
Multi-plant sync is secure and offline-tolerant — no VPN, no cloud. One plant is the hub (holds the reachable address); the others are spokes (outbound only, no inbound port to open).
- On the hub: turn on Plants (multi-site) → Make this the hub → Generate a join code. You get a short XXXXX-XXXXX code that is single-use and expires in 15 minutes; it also carries the hub's certificate pin so the spoke trusts the right machine.
- On the spoke: turn on Plants, choose Join an existing hub, and paste the code plus the hub's address (e.g. https://HUB-PC:8443).
- Done. The spoke syncs outbound on a schedule; if the hub is unreachable, changes buffer and reconcile automatically on reconnect. Nothing is lost.
Named seats vs. shop-floor badges (keep your seat count low)
- Named seats are sign-in accounts for people who change things (managers, planners, buyers). Add them under Users; each uses one seat from your plan, with the narrowest role that lets them work.
- Shop-floor badges are employee-ID accounts for operators who only receive, issue, move, count, scrap and clock in/out at the Kiosk. They are unlimited and free on every tier and never consume a seat. Add them under Employees.
Rule of thumb: if someone only touches material on the floor, give them a badge, not a seat.
The browser says "Your connection is not private"
Normal here — and NOT a virus. PlantStacks runs on your own computer, not on the internet, so the browser can’t look up a public certificate for it. Nothing is going over the internet.
- Chrome / Edge: click Advanced → Continue to … (unsafe). Firefox: Advanced → Accept the Risk and Continue. Once per browser — it remembers.
- Optional (never required): remove the warning entirely by trusting this install’s certificate. Download it from https://<your-address>:8443/cert (saves as plantstacks.crt), then on each PC: double-click → Install Certificate → Local Machine → place in Trusted Root Certification Authorities.
- Only do that for your own PlantStacks certificate — never for websites on the internet.
Keep the computer on (sleep, restarts & power)
PlantStacks runs on ONE computer; it only works while that computer is awake.
- Turn off sleep: Windows → Settings → System → Power → Sleep → Never (while plugged in). The screen may still turn off — that’s fine.
- Restarts are handled: PlantStacks is installed as a service and starts itself back up after a reboot or Windows Update — Admin → Health shows "Starts automatically ".
- Mystery outage? Health tells you when the host was asleep or off ("this computer was asleep or off from X to Y") so the cause explains itself.
- Power flickers? A cheap UPS (battery box, ~$60) rides them out. Data is written so a hard power cut never corrupts what was already saved.
Troubleshooting
Windows blocked the installer (SmartScreen / antivirus)
The Windows build is not yet code-signed, so SmartScreen shows an "unknown publisher" notice. That is expected; here is the safe path:
- Verify the download first: Get-FileHash .\PlantStacks-1.0.2-win-x64-portable.zip -Algorithm SHA256 and compare with the value on Downloads. If it matches, the file is exactly what we published.
- On the SmartScreen dialog choose More info → Run anyway.
- If corporate antivirus quarantines it, ask IT to allow the verified file — the checksum is the evidence they need.
The license won't activate
- "signature invalid" — the file was modified (usually by email re-encoding). Re-download from the original link; don't copy-paste the key out of a PDF.
- "expired" — renew from Manage subscription; install the fresh .lic the same way. Your data was never at risk: a lapsed license keeps the core, login and every record available.
- "seat limit reached" — you're adding user #11 on a 10-seat Starter. Deactivate an unused account or upgrade. Remember: shop-floor employee IDs are unlimited and never consume a seat — most "we need more seats" cases are really "make them floor accounts".
- Check Admin → Health — the license check there states the exact problem and the fix.
Other PCs can't reach PlantStacks on the LAN
- On the host machine, confirm it's up: open https://localhost:8443/ there.
- From another PC use the host's name or IP: https://SHOP-PC:8443/ — not "localhost" (localhost always means "this machine").
- Windows Firewall: allow inbound TCP 8443 for PlantStacks (the installer offers this; if it was skipped, add the rule in Windows Defender Firewall → Inbound Rules).
- Both machines must be on the same network/VLAN — a guest Wi-Fi usually can't see the wired LAN.
Backups & restore (and when a restore won't run)
Encrypted snapshots run nightly by default (Backups module). Admin → Health shows your last good backup at a glance.
- Restore in-product: Backups → pick a snapshot → Restore.
- Or from the command line: node platformctl.js restore --file <snapshot>.
Restore refuses to run? The two real causes: the snapshot's checksum doesn't match (use an older one — each night is independent) or the disk is full (free space, retry). Restores never partially apply; it's all-or-nothing by design.
The numbers look wrong (on-hand doesn't match the shelf)
On-hand is always the sum of movements — it can't silently drift; it can only reflect a movement that did or didn't happen. To pin it down:
- Open the item → Movements: the full history of every receipt/issue/move/scrap with who and when. Find the unexpected row (or the missing one).
- Physical mismatch with a clean history means an unrecorded real-world event — run a cycle count; the approved variance posts a correcting movement with an audit trail.
- Multi-plant: check Plants → status; a spoke that's been offline shows pending outbox items — numbers converge when it reconnects.
A plant won't sync (hub & spoke)
- On the spoke: Plants → status. "Hub unreachable" means a network problem, not a data problem — everything is buffered in the outbox and reconciles on reconnect. Nothing is lost.
- Can the spoke reach the hub at all? From the spoke machine: https://<hub-address>:8443/healthz in a browser.
- Join code "invalid or expired": codes are single-use and expire in 15 minutes — mint a fresh one on the hub (Plants → Make this the hub) and paste the new string.
- "site limit reached": your plan's site count is used up — revoke an old plant (Plants → remove) or upgrade.
- Remember the design: only the hub needs a reachable address. Spokes never need a port opened.
Locked out (password / MFA)
- Users: an admin resets any password from Users. MFA recovery codes were shown at enrollment — one signs you in when the phone is gone.
- The only admin is locked out? Go to the PlantStacks computer itself, open the sign-in page in a browser THERE (https://localhost:8443/), and click "Forgot the admin password?" — type the admin username and a new password. The link only works on that machine (any other PC is refused): being physically at the computer is the proof it’s really you. No command line needed.
- Used up your MFA backup codes? Get fresh ones any time from Security → Two-factor → Get new backup codes (needs a current code from your app).
Two-factor code keeps getting rejected (check the clock)
Sign-in codes are computed from the time, so the #1 cause of "invalid code" is a clock that has drifted — common on a computer with no internet.
- Check the PlantStacks computer’s clock first — date, time AND time zone. Fix it in Windows Settings → Time & language.
- Check the phone’s clock — set it to automatic, or in Google Authenticator use Settings → Time correction for codes → Sync now.
- Codes change every 30 seconds — wait for a fresh one and enter it promptly.
- Locked out entirely? Use one of your saved backup codes, or see "Locked out" above.
Admin → Health flags an implausible clock for you (wrong date, running behind, or — with several plants — disagreeing with the other plants).
Move PlantStacks to a new computer
The whole migration is: install → restore → re-enter license.
- On the old computer (if it still works): Backups → Back up now. Your nightly copies on the USB drive / network folder work too.
- On the new computer: run the installer and create the owner account.
- Copy the newest snapshot-….bak into the new machine’s backups folder → Backups → Restore → restart when asked.
- Paste your license key under Subscription → Activate, and share the new "Your team connects at" address from the dashboard.
Update to a new version (your data is kept)
- Updates never download or install themselves. If you switched on the optional update check, PlantStacks tells you when a new version exists; otherwise glance at Downloads now and then.
- Download the new installer and run it on the host computer. Your data is kept — records, users and settings live outside the program folder; the installer only replaces the program.
- Updates are signed — the app refuses a package that isn’t genuinely from us.
Something’s wrong — send us a report
- In the app, open Health (or the ? Help drawer) and click "Something’s wrong".
- It runs every self-check, shows the results in plain English, and saves a small support file — system status only, none of the data you’ve entered.
- Email that file to support@plantstacks.com with a sentence about what you were doing. It’s usually all we need.
Billing & account
Renew, upgrade, or change plans
Everything is self-serve at Manage subscription — change tier or term, update the card, download invoices. Upgrades issue a fresh license immediately; install it like the first one. Tiers only change seats + sites; features never change, so an upgrade is never a migration.
PlantStacks reminds you in-app starting 30 days before your subscription ends (again at 14, 7 and 1 day) — nothing is ever shut off silently. If the date passes, there’s a grace period, then paid features pause; the app, your sign-in and every record stay available, and renewing switches everything back on.
Cancel — and what happens to your data
Cancel anytime from Manage subscription; the refund window is in the refund policy. When a subscription lapses, your installation keeps running: core, login and every record stay available for reading and export — only paid features pause. Your data is on your machine; we couldn't hold it hostage if we wanted to.
Still stuck?
1 · Ask the product
Admin → Health self-diagnoses the install, and the in-product assistant answers from local docs — it never sends your data anywhere.
2 · Read the docs
The docs hub covers install, admin, sync, import, backup and the API in depth.
3 · Email us
support@plantstacks.com — best-effort email support on every plan (no SLA). Attach the diagnostic report from Admin → Health → Export diagnostics: it contains status codes only, never your data.