This project implements an inventory manager in the dual panel flavor known from old and loved file managers. It requires nothing more than a text console and stores data in plain text files.
It allows an efficient tracking of stock movement between locations, sources and projects.
Caution
|
This project is not production ready, use at your own risk and backup regularly |
-
The intended use case for this tool is a small electronic lab, a RC modeller’s workshop or similar.
-
Few hundreds to thousands of items in dozen locations or boxes.
-
A workflow where the tool just helps with finding the right piece for the current project at hand and the inventory tracking accuracy is secondary to the ease of use.
-
Updating the digital database happens in bulk, usually at the end of a session based on paper notes. Data entry must be as streamlined as possible.
-
Part counts that get a out of sync due to sloppy book keeping should be easy to fix.
For these reasons I defined the cornerstones of the project that should be used when in doubt about a feature or implementation:
-
Easy and quick way to enter data, movements and deliveries.
-
No hard constraints preventing actions - the tool should adapt to the reality, not the other way around.
-
Easy way to fix counts or placements based on real world situation.
-
Keyboard friendly navigation. Can be used over ssh or other terminal solution.
-
Human readable and editable data storage format:
-
both the raw storage itself,
-
and the semantics, minimize typing and complex string and id related relationships.
-
Data should be trivial to backup and restore.
-
Data should be trivial to synchronize across machines using some off-the-shelf solution (Syncthing, Dropbox, Nextcloud) and conflicts should be reasonably easy to fix.
-
-
Dílo in Czech means work, accomplishment.
-
It is an ASCII art - a warehouse forklift.
-
It is easy to type on a qwerty keyboard, most of the letters are clustered together.
-
It started as a play on words dual, inventory, II (roman numeral 2), interface, ledger.
The data is stored according to the FreeDesktop’s XDG Base Directory specification.
Data go to $HOME/.local/share/diilo/
directory. Internally there are two sub-directories - md
for definition files and ledger
for tracking movements and deliveries.
The pictures are from various stages of development and might not be fully accurate wrt the current version.
This project is developed using the Rust language. The UI is done using the ratatui crate.
All you need to do is install the rust toolchain (rustup is recommended) and cargo.
Then simply type:
$ cargo run
The program writes a detailed log to a cache directory that is by default located in $HOME/.cache/diilo/diilo.log
The verbosity is set to INFO
by default and can be controlled by environment variables. See https://docs.rs/env_logger/latest/env_logger/#enabling-logging for details of how to control the levels and filters.
When a crash occurs, it is useful to reproduce it with the Rust’s RUST_BACKTRACE=1
environment variable set. This provides detailed information about where the issue happened.
In case a crash corrupts the terminal behavior (no characters printed, weird colors, etc.), type reset
to the terminal and press <Enter>
.
diiLo - dual panel inventory manager Copyright © 2024 Martin Sivak
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.