|0.1.18||Oct 18, 2023|
|0.1.16||Sep 28, 2023|
|0.1.15||Aug 30, 2023|
|0.1.7||Jul 27, 2023|
|0.1.4||Apr 9, 2023|
#3 in #inventory
123 downloads per month
Used in 2 crates
The open source inventory manager.
Organise inventory, employees, customers and orders simply, reliably and fast.
OpenStock, you can manage:
- Stock Control
- Purchase Orders
- Point of Sale Operations
- Employees (with Authentication)
In an API format.
For a visual interface, see
OpenStock is currently in Beta, so features may not yet be considered stable as many features are still considered experimental with the API formatting being largely subject to change. Thus, not ready for professional adoption as of yet.
OpenStock is available as a crate to be integrated in your project or project-space if you wish to utilize the type-system created by it. Accessible by:
cargo add open-stock
However, for a default setup, the API can be hosted yourself by performing the following:
- Create an empty directory
- In the directory, create a
docker-compose.yaml(template file here).
- Customize it to add/remove
docker compose up.
It is recommended to add a database viewer such as adminer for development to monitor changes and trace any issues of object structure you may encounter.
open-posis not required, but is a free POS system provided with the
open-stockstandard. You are free to use and/or modify it as necessary.
If you are launching the service from an ARM system, use
ghcr.io/bennjii/open-pos:latest-armfor native performance.
NEXT_PUBLIC_API_URLenvironment URL refers to where the
open-stockAPI is hosted. This is required for CORS, and is a required field. This can be a domain or IP.
It is important to consider how you wish to setup your provider. There are two methods of doing so shown below. A centralized approach will have a single server as a "source-of-truth", where each new retail location will interact with this one server. This is the most common approach and is the default implementation.
Alternatively, a fragmented approach can be undergone with replication layers existing at each store location or region to decrease server connection times due to large physical distances.
Please note, the fragmented approach has not been implemented yet but is planned for release in the future.
If you need to migrate data from an existing provider, you can do so using the migrator utility.
If you are using a provider not currently covered by the migration utility, you may request an implementation by publishing an issue with the tag,
feature-request and title
+lang: <Existing Provider Name>, and provide any associated information in the issue to help us implement the migration. Alternatively, you can implement the type conversions yourself and submit a pull request for it.
Rust was the perfect choice for this project as it aims to produce a reliable and consistent output whilst taking various forms of input. Rust offers this in combination with high performance, albeit slower development times. However, for this project the trade-off is more than worth it. As rust has recently become a far more matured language, database ORM's like sea-orm (based on SQLx) and Diesel are well build and provide a high degree of type-safety in formatting, reading, writing and relaying information from the database - preventing poorly formatted entries and invalid column values.