Rechvix: billing, inventory and accounts built to survive an audit
- Fast GST billing
- Accurate stock control
- Audit-ready books
Built for Indian retailers, distributors, manufacturers, pharmacies, and multi-branch SMEs that need GST-ready billing, real stock control, and books that hold up to an audit — not a CRUD demo, and not a spreadsheet pretending to be accounting software.
Under the hood: NUMERIC money (never float), double-entry balance-checked at three separate layers, an append-only stock ledger, and GST e-Invoice/e-Way Bill talking to the actual government APIs — see how that's verified, not just claimed.
Open source, AGPL-3.0. Self-host today — a managed cloud version is on the roadmap.
Self-host with Docker
Installs Docker Desktop and git via Homebrew if either is missing, clones the repo, and runs ./install.sh.
3
Layers enforcing double-entry
0
Floats used for money
11 of 11 stages
Backend, web app & hardening pass shipped

Rechvix — billing · inventory · accounts · GST, in one self-hosted platform
Real screenshots from a running instance, not mockups — jump to the screens below.
- No signup, nothing leaves this page.
- A no-login interactive sandbox is on the roadmap — not live yet, so we're not claiming it is.
One command clones the repo and brings up Postgres, the app, and the worker.
- First run: organisation → branch → warehouse → owner login, one screen, then straight to billing.
- Minimum hardware isn't formally benchmarked yet (a Stage 11 item) — today it runs on a small VPS or a CasaOS box.
- Backups: Settings → Backup, one encrypted file; restoring requires typing a confirmation phrase — no silent overwrite.
Every environment variable, the two-database-role security model, and the CasaOS path.
- Upgrades: pull the new image tag and re-run compose up — pending migrations apply automatically before the app restarts.
- Support today is GitHub Issues — no paid tier yet.
- No bulk-import wizard yet; the documented REST API can be scripted for bulk product/contact loading.
Your GST/e-Invoice credentials are encrypted and stored only in your own PostgreSQL — they never reach Rechvix's publisher.
AGPL-3.0
Open source and source-available — self-host, use, and modify for your business.
Self-hosted by default
Your own PostgreSQL, your own server. No mandatory cloud dependency.
Row-Level Security
Tenant isolation enforced both in application code and in PostgreSQL itself.
Verified, not just claimed
Each build stage ships with real passing unit and integration tests before it's marked done.
See it in action
Real screens from the running web app, not mockups — with demo data, today.
Today's business at a glance: sales, collections and purchases, outstanding receivable and payable, current stock value, low-stock items, and a sales trend chart — the first screen after login.
Every screen, at a glance
Real screenshots from the running app — browse the gallery or jump straight to a screen.
Everything a real back office needs
Grouped by what it's actually for — not a wall of undifferentiated checkmarks. See the roadmap for what's shipped today versus in progress.
Billing
Quotations to invoices
Quotations, proforma, tax, cash and credit invoices, plus credit/debit notes and sales & purchase returns — the full document lifecycle a real billing counter needs, not just a single invoice screen.
POS billing
Fast counter billing for walk-in sales, built on the same invoice engine as the rest of the platform — so a POS sale and a B2B tax invoice post through identical, correctness-checked logic.
Multi-company, multi-branch
One deployment can run several legal entities and branches with proper document numbering per entity, not a single-tenant assumption bolted on later.
Inventory
Perpetual multi-warehouse inventory
Stock balance is a materialized projection of an append-only movement ledger, never a directly-editable number — so it's always reconcilable back to every movement that produced it.
Batch, lot & serial tracking
Track stock at the batch, lot, or serial-number level with unit conversion built in, across as many warehouses as your business actually runs.
Accounting
Full double-entry accounting
Customer and supplier ledgers, ageing, and a real chart of accounts — with every posted journal balanced and enforced, not assumed.
GSTR-1 / GSTR-3B-oriented reporting
Reports structured around what you actually have to file, not a generic export you have to reshape by hand every filing cycle.
GST & Compliance
India GST done properly
CGST/SGST/IGST, HSN codes, place-of-supply, and inclusive/exclusive pricing — modeled through a generic tax-document engine, not a handful of hardcoded columns that break the moment the rules change.
e-Invoice (IRN/QR) & e-Way Bill
Direct government API integration for e-Invoice and e-Way Bill generation, through versioned adapters — when GSTN changes the schema, that's a new adapter directory, not a scramble across the codebase.
Security
RBAC with branch/warehouse scoping
Permissions scoped to the branch and warehouse a user actually works in, not an all-or-nothing admin flag.
TOTP MFA & full audit trail
Argon2id password hashing, TOTP multi-factor authentication, and an audit trail on every sensitive action — built in from the foundation stage, not retrofitted after a scare.
Row-Level Security, in the database
Every tenant table is scoped by organisation both in the application layer and via PostgreSQL Row-Level Security — a bug in one layer isn't automatically a cross-tenant data leak.
API & AI
REST API, OpenAPI-documented
A full OpenAPI 3.1 specification is the source of truth for API clients — not documentation written after the fact and left to drift.
MCP server for AI access
A real, read-only-by-default MCP server ships today — 10 tools scoped by the same permission checks as the REST API, so assistants like Claude can query your billing and inventory data without ever holding write access unless you explicitly grant it.
Built different, on purpose
A modular monolith in Go, backed by PostgreSQL 18 — plain enough to run on a small server, strict enough that a bug in one layer can't silently corrupt your books. The implementation details below back four concrete tasks, not abstract features.
Finalize an invoice
The billing screen (below, "Billing") computes GST per line from its HSN code and checks e-Way Bill eligibility before the document can be finalized — not a manual step you can forget.
Reconcile stock against inventory movements
Stock on hand is never an editable field — it's a live sum over an append-only movement ledger. Reconciling means comparing that sum to a physical count; there's no separate 'true' number for the two to drift apart from.
Generate GST-ready documents
e-Way Bills generate through the free government portal by default, or an automatic paid provider if you configure one (see the GST/Tax screen below) — either way, the JSON sent matches the schema GSTN actually accepts today.
Export audit evidence
Every posted journal is immutable at the database-permission level (no UPDATE grant on journal_lines, enforced even against the table owner) — the test below proves an unbalanced entry is physically rejected, not just flagged by the UI.
Browser / API client
│ HTTPS
▼
┌────────────────────────────┐
│ apps/server (Go, chi) │
│ identity · permissions │
│ catalogue · inventory │
│ sales · accounting │
│ gstindia · einvoice │
└─────────────┬──────────────┘
│ pgx, one transaction
▼
┌────────────────────────────┐
│ PostgreSQL 18 │
│ NUMERIC money · UUIDv7 │
│ Row-Level Security │
└────────────────────────────┘| Decision | Why |
|---|---|
| Modular monolith, not microservices | Invoice finalization touches inventory, ledger, tax, and numbering atomically — that needs one transaction, not a distributed saga. |
| NUMERIC, never float, for money | Floats can't represent ₹0.01 exactly; a tax/accounting system that rounds wrong is a compliance and trust problem, not a bug ticket. |
| Append-only stock ledger | Stock balance is a materialized projection of immutable movements, never a directly-editable number — so it's always reconcilable. |
| Double-entry, enforced at 3 layers | App-level sum check, a deferred DB constraint trigger, and no UPDATE grant on posted journal rows — a bug in any one layer still can't post an unbalanced journal. |
| Generic tax model | tax_document / tax_line / tax_component, not hardcoded cgst/sgst columns — a TaxEngine interface with an IndiaGSTEngine plugin, so a second country is additive. |
| Versioned government adapters | GSTN changed the e-Invoice/e-Way Bill schema on 2026-08-01 with weeks' notice — adapters are versioned by directory, so that's a new adapter, not a scramble. |
| RLS as defense-in-depth | Every tenant table is scoped by organisation_id at the application layer and PostgreSQL Row-Level Security — a bug in one layer isn't a cross-tenant data leak. |
A failed write, not a claim — the real integration test
This raw-SQL test bypasses the Go application layer entirely and tries to post a journal with ₹100 debited but only ₹90 credited. It runs in CI on every pull request; the deferred database constraint trigger rejects it at COMMIT — proof the rule holds even if a future bug (or a manual fix script) skips the app layer.
func TestAccounting_DeferredTrigger_RejectsUnbalancedRawSQL(t *testing.T) {
// Deliberately unbalanced: ₹100 debit vs ₹90 credit,
// inserted with raw SQL — no Go application check involved.
err := sharedPool.RunScoped(ctx, orgID, func(ctx context.Context) error {
insert journal_lines: debit=100 (cash)
insert journal_lines: credit=90 (accounts_receivable)
})
// expected: COMMIT fails with "unbalanced"
}Government-integration data boundary
GST e-Invoice/e-Way Bill submissions go directly from your own server to the government endpoint — Rechvix's publisher is never in that path and never sees the document. The free government e-Way Bill portal is the default; a paid provider is opt-in.
Your server (self-hosted)
│ your GSTIN + credentials,
│ encrypted at rest (AEAD_ENCRYPTION_KEY)
▼
┌───────────────────────────┐
│ einvoice / ewaybill │
│ adapter (versioned) │
└─────────────┬──────────────┘
│ HTTPS, direct
▼
GSTN / government portal
(or a paid provider, opt-in)
Rechvix's publisher: not in this path.Built to connect, not to lock you in
OpenAPI 3.1 first
The API spec under api/openapi/ is the source of truth for every client — including the web app itself — not documentation reverse-engineered from the code after the fact.
Government integrations, versioned
GST e-Invoice (IRN/QR) and e-Way Bill submission go through directory-versioned adapters (einvoice/v1, .../vNext) — a GSTN schema change is a new adapter, not a scramble.
MCP server for AI access
A real, read-only-by-default MCP server ships today — 10 tools, each scoped by the same permission checks as the REST API, so an assistant can query invoices, stock levels, or ledgers without ever holding write access unless you explicitly grant it.
Rechvix vs. hosted billing SaaS vs. spreadsheets
An honest comparison, not a marketing scoreboard — "Unverifiable" means we genuinely can't confirm a closed-source vendor's internals either way.
| Feature | Rechvix | Hosted SaaS | Spreadsheets |
|---|---|---|---|
| Cost | Self-host free, cloud coming soon | Monthly per-user fee | Free |
| Data stays on your own server | |||
| Real double-entry accounting | Varies | ||
| Money stored as NUMERIC, never float | Unverifiable | ||
| GST e-Invoice (IRN/QR) generation | Paid tier | ||
| e-Way Bill generation | Paid tier | ||
| Multi-warehouse batch/lot/serial tracking | Paid tier | ||
| Branch/warehouse-scoped RBAC + TOTP MFA | Varies | ||
| Row-Level Security in the database | Unverifiable | ||
| Open, versioned REST API | Sometimes | ||
| Open source, source available | |||
| No vendor lock-in |
Rows reflect the platform's target design; see the roadmap for what's built versus in progress today.
Self-host it today
One command installs Docker if you don't have it, clones the repository, and runs the one-command ./install.sh + Docker Compose setup — pick your OS below. Prefer building against your own Go + PostgreSQL 18 install instead? The full manual setup, including every environment variable, is in the README.
Installs Docker Desktop and git via Homebrew if either is missing, clones the repo, and runs ./install.sh.
Cloud version
A managed-cloud deployment is on the roadmap for businesses that would rather not run their own server. It isn't live yet — we won't claim otherwise. Leave your email and we'll tell you the moment it's real.
Join the cloud waitlistBuilt in explicit, gated stages
A stage isn't marked done until it has real passing unit and integration tests — see docs/TODO.md for the live, stage-by-stage checklist.
- Stage 0ResearchVerified platform and government API facts — not guessed, checked against current sources.Done
- Stage 1ArchitectureModule boundaries, domain model, tax/inventory/accounting design, threat model, staged milestone plan.Done
- Stage 2FoundationConfig, database, auth (Argon2id + TOTP MFA), permissions, audit, the internal Money type, observability.Done
- Stage 3Catalogue, contacts & pricingProduct/service catalogue, customer & supplier contacts, price lists — independently verified with real passing tests.Done
- Stage 4InventoryPerpetual multi-warehouse stock, batch/lot/serial tracking, unit conversion — 78 unit + 39 integration tests.Done
- Stage 5Sales & GSTQuotations through tax invoices, POS billing, PDF printing, and the India GST tax engine — 196 unit + 100 integration tests.Done
- Stage 6AccountingFull double-entry ledgers enforced at three layers, customer/supplier ageing, chart of accounts — 105 unit + 62 integration tests.Done
- Stage 7ReportingGSTR-1-oriented reports and the live operational dashboard. GSTR-3B-oriented reporting is deliberately deferred until purchases are wired through the tax engine, rather than shipped half-true.Done
- Stage 8Government integrationse-Invoice (IRN/QR) and e-Way Bill generation against the real NIC sandbox, plus a free-government-portal assistant flow as the default (no paid API required).Done
- Stage 9Other integrationsSigned webhooks, scoped API keys, and a real read-only-by-default MCP server (10 tools) for AI access. Sharing an invoice/quotation is real and shipped: a signed link, or the actual PDF file via WhatsApp/Mail/any app through the device's own share sheet. Server-side automated sending (an email/SMS/WhatsApp Business API firing on its own, no user action) remains interface-only — no adapter shipped yet.Done
- Stage 10Packaging & web appDocker Compose + CasaOS packaging, a one-command install.sh, and the full web app (Dashboard, Billing/POS, Purchases, Inventory, Accounting, GST, Reports, Settings) — real, wired screens, not placeholders.Done
- Stage 11HardeningA security review found and fixed a real cross-tenant data-scoping gap (verified via 92/92 integration tests); a real load test at 100k products/1M lines found and fixed 3 missing indexes and an unbounded product-listing endpoint (since paginated); an accessibility audit found and fixed 2 real WCAG violations. A broader RBAC/IDOR/API-key-scope review beyond organisation-scoping remains open.Done

Why I built Rechvix
I’m Raktim Ranjit, founder of NodeDR and Rechvix’s lead developer. I wanted a business system where an invoice, its stock movements, tax and accounting stay consistent—and where a business can keep its own data. That goal led me to build Rechvix as a self-hosted application with a double-entry ledger and an append-only inventory record. The inspiration came from treating everyday bookkeeping as critical infrastructure: it should be explainable, dependable and under the business’s control.
About Raktim Ranjit, software engineer and founder
Rechvix is built and maintained by NODEDR INFOTECH PRIVATE LIMITED, the team behind nodedr-pos.
Frequently asked questions
The backend and the full web app are built and working — billing, POS, inventory, accounting, GST/e-Invoice/e-Way Bill, reporting, RBAC, and the MCP server are real, tested, wired screens today, not a roadmap. What's left is Stage 11 hardening: a security review (a first pass already found and fixed a real cross-tenant data-scoping gap), load testing at scale, and an accessibility audit — worth finishing before we'd call it a v1.0 production guarantee. The GitHub repository's docs/TODO.md tracks exactly what's done versus in progress, updated as it changes, not after the fact.
Ready to look under the hood?
Read the architecture, the design decisions, and the exact stage-by-stage build plan — nothing overstated.