Documentation for the Gable open-source LBM (lumber & building-materials) ERP ecosystem.
Gable is an operations platform purpose-built for lumber and building-materials dealers — quoting, orders, inventory, purchasing, delivery and routing, POS, B2B portal, and accounting — as a modern, self-hostable alternative to legacy systems like Epicor BisTrack, ECI Spruce, and DMSi Agility.
This repository is the documentation home. The code lives elsewhere; see Where things live.
New to the project? Read in this order:
- Getting started — prerequisites, clone,
make up→make migrate→DEMO_SEED=1 make seed, run the API and the SPA. Ten minutes. - Architecture — what the ~40 backend modules are, how they talk to each other, and what the API surfaces are.
- How to contribute — branch model, pre-flight gates, how contributions are licensed.
About to touch money? Money and rounding is not optional reading. Money is not represented uniformly across modules, and four rounding and tax defects are known-open.
About to deploy this anywhere?
Self-hosting — and specifically
the AUTH_MODE=dev warning,
which is the single setting most likely to turn a demo into an incident.
| Page | What it covers |
|---|---|
| Getting started | Prerequisites, local setup, the real Make targets and ports |
| Self-hosting | Deployment shape, required configuration, known-open hardening gaps |
| Running the tests | Every gate CI enforces, and how DB-backed tests skip without Postgres |
| Page | What it covers |
|---|---|
| Overview | Module boundaries as built, inter-module communication, API strategy, hosting |
| Modularization blueprint | The installable-apps platform: design, conversion recipe, phases |
| External services roadmap | Forward-looking decision capture for routing, geocoding and AI at production grade |
| Page | What it covers |
|---|---|
| Money and rounding | The cents/dollars split, rounding rules, and four known-open defects |
| Licensing | Per-component licensing in practice; how to tell which license governs a file |
| Database ERD | Physical data model and entity-relationship diagrams |
| Design system | Colours, typography, component patterns |
| Page | What it covers |
|---|---|
| How to contribute | Branch model, pre-flight checklist, CLA, issue routing |
| Contributing with Claude | The agent kit: installation, worked examples, ground rules — the lowest-risk first contribution in the ecosystem |
| Code of Conduct | Contributor Covenant 2.1 |
Documentation is here; everything it describes is in a sibling repository.
| Repository | Contents |
|---|---|
gable |
The ERP monorepo — Go backend, Lit frontend, migrations. The source of truth for behaviour. |
openlbm |
The OpenLBM Standard — the six license texts, the normative Definitions Core, the Gable Charter. Canonical for licensing. |
gable-sdk |
Module SDK and API client — the permissive Connector seam |
gable-portal |
Contractor / B2B portal |
gable-ai-lm |
AI_LM satellite — load management |
brand |
Marks and brand assets |
When a doc here and the code there disagree, the code is right. Please open a PR against these docs when you find drift.
| Layer | Technology |
|---|---|
| Backend | Go 1.25 (stdlib net/http.ServeMux + pgx v5) |
| Database | PostgreSQL 16 |
| Frontend | Lit 3 web components + TypeScript 5.9 + Vite 7 + Tailwind 3.4 |
| Packaging | Docker |
Documented here because they cause real bugs, and because a plausible-sounding wrong answer is worse than no answer.
| Claim you will see somewhere | Reality |
|---|---|
| "Money is stored in cents." | The target, not the current state. ERP orders/invoices and account use int64 cents; portal, quotes and DailyTill use float64 dollars. See Money and rounding. |
| "Modules communicate over an event bus." | Future design. No NATS client is imported anywhere. Every cross-module effect is a synchronous Go call. |
| "Everything is an installable app." | Partially built. Two modules are converted to manifests; the rest are declared centrally in backend/cmd/server/catalog.go. See the blueprint. |
"AUTH_MODE=dev is a deployment option." |
It disables authentication and authorization entirely. Local development only. See Self-hosting. |
| "Postgres is on 5432." | The dev database is on 5434 — that is the docker-compose.yml mapping and the backend's default. |
"govulncheck gates the merge." |
Advisory only. Coverage is reported and not enforced either. |
Same model as the code: open your PR against staging, which maintainers
fast-forward to main.
Two rules specific to documentation:
-
Verify against the source, not against another doc. This repository documents software that lives somewhere else, which is the whole difficulty — a page here can be beautifully written and completely wrong because the code moved. Clone
gableand grep it. Citefile:linefor claims about behaviour. If a documented command fails when you run it, that failure is the bug. -
Every Markdown file needs an SPDX header:
<!-- SPDX-License-Identifier: LicenseRef-OpenLBM-Docs-1.0 SPDX-FileCopyrightText: 2026 FutureBuild, Inc. and OpenLBM contributors -->
Files with
---frontmatter put the tags as#comments inside the frontmatter block. Images get a<filename>.licensesidecar.reuse lintchecks this.
This repository ships a Claude Code agent kit in .claude/ that loads
automatically when you open the project — skills for improving docs, filing
issues, describing a workflow, checking licensing, and running the pre-flight.
You don't have to use it, and you remain responsible for what you submit.
Installation and worked examples:
Contributing with Claude.
There is also a pre-flight script in this repository:
python3 tools/check-docs.py --gable /path/to/gableIt checks that every relative link resolves, every file carries an SPDX header,
every make target and npm run script named here is real, and every cited
gable path exists. Then run reuse lint. CI runs both — the last two gates
need a gable checkout, and CI does that checkout rather than letting them
skip.
Full details: How to contribute.
Everything in this repository is LicenseRef-OpenLBM-Docs-1.0 — attribution
and share-alike. Reuse and adapt it, even commercially: credit "the OpenLBM/Gable
project", link the source, indicate changes, and distribute adaptations under the
same terms. The full text is in LICENSE and
LICENSES/; REUSE.toml covers the tree in
machine-readable form.
The Gable and OpenLBM marks are not covered by that license. Trademark use
is governed separately by LicenseRef-OpenLBM-Trademark.
The wider project is licensed per component — different directories under different OpenLBM Profiles. How that works in practice: Licensing. The canonical, authoritative Standard is published at https://github.com/FutureBuildAIinc/openlbm.
To report a vulnerability, follow
SECURITY.md
in the reference repository — do not open a public issue.