The FireBin web client, a self-hosted electronics parts inventory.
Umbrella · API · API reference
React 19, TypeScript, Vite 8, and Tailwind 4. It talks to firebin-api over REST at /api/v1 and holds no data of its own; every part, bin, and price comes from the API.
Browse and group parts by name and variant, adjust stock at a location, scan a distributor barcode with the camera or a USB wedge, cut a reel into a barcoded mini spool, and design and print bin, part, and lot labels (including Brother P-touch tape over WebUSB). This repo is one of three: firebin-web (here), firebin-api (the Go backend), and firebin (compose files and self-host docs).
FireBin is in alpha.
![]() Dashboard |
![]() Parts, grouped and colour-coded |
![]() Part detail with stock adjust |
![]() Label designer |
You need the API running first (see the firebin-api repo, or the local stack in firebin). Then:
npm ci
npm run devVite serves the app on http://localhost:5173 and proxies /api to http://localhost:8080. Point it at a different backend with VITE_API_PROXY_TARGET:
VITE_API_PROXY_TARGET=https://firebin.example.com npm run devThe proxy keeps the /api/events server-sent-events stream open (idle timeout disabled), which is how every view refreshes itself when another user changes stock.
npm run build # tsc -b, then vite build → dist/
npm run lint # oxlintnpm run build type-checks with the TypeScript project references before it bundles, so a type error fails the build rather than shipping. Set FIREBIN_VERSION at build time to stamp the release into the About screen:
FIREBIN_VERSION=26.7.0 npm run buildCI runs npm ci, tsc -b, oxlint, and vite build on every push and pull request. A tagged release (vYY.M.rev) builds the container (nginx serving the bundle on port 3000, proxying /api to firebin-api:8080) and pushes it to ghcr.io/fireball1725/firebin-web.
The camera scanner and the WebUSB label printer only run on a secure origin, so they work on localhost and over HTTPS, and stay disabled over a plain LAN IP. Data Matrix decoding uses zxing-wasm; the plain @zxing/library build can't read Data Matrix. Icons are MDI (@mdi/js, Apache-2.0).
See CLAUDE.md for the architecture, the conventions, and the checks a pull request has to pass. To deploy FireBin rather than work on it, start from the firebin repo.
AGPL-3.0-only. See LICENSE.
Built by FireBall1725 in Ontario, Canada 🇨🇦




