A modern, offline-first web tool for editing .TMS (Terminal Management System) files used by electronic retail scales.
ScaleConfig helps you manage PLUs and keyboard layouts for electronic scales without sacrificing file integrity. If you do not change a record, the file is written back byte-for-byte.
- Lossless .TMS round-trip with original ordering and unknown fields preserved
- PLU management (search, edit, and bulk updates)
- 10x4 keyboard layout editor with 3 layers per key
- Offline-first (all processing stays in your browser)
- Fast and lightweight React + Vite stack
- Node.js 20+
- npm 9+
git clone https://github.com/VihangaDev/ScaleConfig.git
cd ScaleConfig/frontend
npm install
npm run devOpen http://localhost:5173 in your browser.
cd frontend
npm run buildThe output is written to frontend/dist/.
- Click Import on the Dashboard
- Select your
.TMSfile - Review parsed PLU data
- Open PLUs from the sidebar
- Edit name, price, unit type, or department/class
- Use the search bar to filter items
- Open Keyboard
- Choose a layer (1, 2, or 3)
- Drag PLUs onto keys or click a key to assign/edit
- Click Export to save changes
- The app creates a backup of the original file
- Review the diff preview before confirming
ScaleConfig is tested with the sample data included in this repo:
- Device strings: Budry MFD-51 TM-xA (firmware V3.20E) and TM-xA UC123 V3.20E
- File header:
ECS VER V3.15C5
Other models may work, but compatibility outside these samples is not guaranteed.
Sample .TMS files live in samples/. They are for local testing only.
ScaleConfig/
├── frontend/ # React application
├── samples/ # Sample .TMS files for local testing
├── .github/ # GitHub workflows and templates
├── README.md
├── LICENSE
└── CONTRIBUTING.md
ScaleConfig is designed to preserve:
- Line endings (CRLF/LF)
- Section ordering
- Unknown fields and sections
- Raw bytes for unedited rows
This repo includes a deploy.yml workflow that builds with BASE_URL=/ and publishes to GitHub Pages.
Custom domain: tm-xa.vihanga.dev
DNS records to configure:
CNAMErecord fortm-xa.vihanga.devpointing toVihangaDev.github.io- If you also want to use the apex (
vihanga.dev), add the GitHub PagesArecords for the apex domain
The CNAME file is committed at frontend/public/CNAME and is included in the build output.
To deploy manually:
cd frontend
BASE_URL=/ScaleConfig/ npm run buildContributions are welcome. Please see CONTRIBUTING.md for guidelines.
MIT License. See LICENSE for details.

