One-Stop Retail Inventory Solution
See the codeProducts, stock, checkout, and member accounts in one place.
简体中文 · Features · Screenshots · Quick start · Star history
|
✉️ Contact the author Share feedback, report an issue, or discuss customisation. [email protected] Report an issue |
![]() Scan to connect on WeChat |
IOE is a self-hosted application for small retail stores, built with Django and SQLite by default. Run it on your own computer or server to manage daily stock movements and checkout. The current open-source version operates as a single store; inventory and orders are not separated by branch.
Screenshots were refreshed on 2026-10-08 with the current logo and local demo data. Sample product and member names remain in Chinese in the English interface.

| Area | What you can do |
|---|---|
| 📦 Products & stock | Maintain categories, barcodes, prices, variants, and images; record receipts, withdrawals, adjustments, and low-stock alerts. |
| 🛒 Checkout | Scan or search for products, adjust quantities and prices, apply member discounts, and record payment methods and sale items. |
| 👥 Members | Manage membership levels, recharges, balances, and points; review purchases and birthday reminders. |
| 📊 Reports & stocktaking | Review sales trends, stock turnover, and member analysis; create stocktakes and reconcile counted quantities. |
| ⚙️ Administration | Manage permissions, operation logs, and backups; switch between Chinese and English or light and dark themes. |
Search for products to build the cart. Member lookup, payment methods, and the amount due sit alongside the item list for review before checkout.

Review revenue, costs, profit, and order counts by date, with daily details below the chart.


Deploy without downloading the source or building on your server. The public GHCR image supports Linux AMD64 / ARM64 and can be pulled without signing in to GitHub:
docker pull ghcr.io/zhtyyx/ioe:latest
For a first deployment, follow the image deployment guide to download the Compose configuration and .env template, set your secret key and allowed hosts, start the services, and create an administrator. The database, uploads, and backups use separate persistent volumes and survive container recreation.
GitHub Actions runs tests, verifies deployment, and publishes latest after pushes to main. Pushing a v* version tag publishes a versioned image. To update an existing configured deployment, back up your data and run:
docker compose pull
docker compose up -d --force-recreate --wait
Use Python 3.10 or newer. The commands below are for macOS / Linux. SQLite is the default, so no separate database server is needed.
Clone the project and create a virtual environment:
git clone https://github.com/zhtyyx/ioe.git
cd ioe
python3 -m venv .venv
source .venv/bin/activate
Install dependencies, initialise the database, and create a login account:
python -m pip install -r requirements.txt
python -c "from pathlib import Path; Path('db').mkdir(exist_ok=True)"
python manage.py migrate
python manage.py createsuperuser
Start the local server:
python manage.py runserver
Open http://127.0.0.1:8000/ and sign in with the account you just created. A new installation starts with an empty database; the demo data shown here is not imported automatically.
On Windows, use python in place of python3 and activate the virtual environment with .venv\Scripts\activate.
The database is stored in db/db.sqlite3, and uploaded files are stored in media/. Use runserver for local development. For containers, persistent storage, and deployment considerations, see the Docker guide.
Run the full test suite:
python manage.py test --settings=inventory.test_settings
This configuration uses a separate temporary database and file directories. Tests cover checkout, member balances, stock movements, concurrent withdrawals, and backup restoration.
Application code lives in inventory/: models/ defines data structures, views/ and services/ handle business logic, templates/ and static/ provide the interface, and tests/ contains the test suite. Documentation screenshots live in asset/.
Use Issues to report bugs or propose features. Pull requests should describe the trigger, expected behaviour, and validation. Include tests for business changes and screenshots for interface changes. Discuss the use case and scope before starting a large feature.
If IOE is useful to you, consider starring the repository, reporting an issue, or contributing a change.
Chart provided by Star History. Click to explore the interactive timeline.
You can also support ongoing maintenance using the options below.
Thanks to the Linux DO community.
IOE is available under the MIT License. You may use, modify, and distribute it under the licence terms.
92 followers · starred Jun 2025
11 followers · starred Oct 2026
9 followers · starred May 2025
One-Stop Retail Inventory Solution
See the codeProducts, stock, checkout, and member accounts in one place.
简体中文 · Features · Screenshots · Quick start · Star history
|
✉️ Contact the author Share feedback, report an issue, or discuss customisation. [email protected] Report an issue |
![]() Scan to connect on WeChat |
IOE is a self-hosted application for small retail stores, built with Django and SQLite by default. Run it on your own computer or server to manage daily stock movements and checkout. The current open-source version operates as a single store; inventory and orders are not separated by branch.
Screenshots were refreshed on 2026-10-08 with the current logo and local demo data. Sample product and member names remain in Chinese in the English interface.

| Area | What you can do |
|---|---|
| 📦 Products & stock | Maintain categories, barcodes, prices, variants, and images; record receipts, withdrawals, adjustments, and low-stock alerts. |
| 🛒 Checkout | Scan or search for products, adjust quantities and prices, apply member discounts, and record payment methods and sale items. |
| 👥 Members | Manage membership levels, recharges, balances, and points; review purchases and birthday reminders. |
| 📊 Reports & stocktaking | Review sales trends, stock turnover, and member analysis; create stocktakes and reconcile counted quantities. |
| ⚙️ Administration | Manage permissions, operation logs, and backups; switch between Chinese and English or light and dark themes. |
Search for products to build the cart. Member lookup, payment methods, and the amount due sit alongside the item list for review before checkout.

Review revenue, costs, profit, and order counts by date, with daily details below the chart.


Deploy without downloading the source or building on your server. The public GHCR image supports Linux AMD64 / ARM64 and can be pulled without signing in to GitHub:
docker pull ghcr.io/zhtyyx/ioe:latest
For a first deployment, follow the image deployment guide to download the Compose configuration and .env template, set your secret key and allowed hosts, start the services, and create an administrator. The database, uploads, and backups use separate persistent volumes and survive container recreation.
GitHub Actions runs tests, verifies deployment, and publishes latest after pushes to main. Pushing a v* version tag publishes a versioned image. To update an existing configured deployment, back up your data and run:
docker compose pull
docker compose up -d --force-recreate --wait
Use Python 3.10 or newer. The commands below are for macOS / Linux. SQLite is the default, so no separate database server is needed.
Clone the project and create a virtual environment:
git clone https://github.com/zhtyyx/ioe.git
cd ioe
python3 -m venv .venv
source .venv/bin/activate
Install dependencies, initialise the database, and create a login account:
python -m pip install -r requirements.txt
python -c "from pathlib import Path; Path('db').mkdir(exist_ok=True)"
python manage.py migrate
python manage.py createsuperuser
Start the local server:
python manage.py runserver
Open http://127.0.0.1:8000/ and sign in with the account you just created. A new installation starts with an empty database; the demo data shown here is not imported automatically.
On Windows, use python in place of python3 and activate the virtual environment with .venv\Scripts\activate.
The database is stored in db/db.sqlite3, and uploaded files are stored in media/. Use runserver for local development. For containers, persistent storage, and deployment considerations, see the Docker guide.
Run the full test suite:
python manage.py test --settings=inventory.test_settings
This configuration uses a separate temporary database and file directories. Tests cover checkout, member balances, stock movements, concurrent withdrawals, and backup restoration.
Application code lives in inventory/: models/ defines data structures, views/ and services/ handle business logic, templates/ and static/ provide the interface, and tests/ contains the test suite. Documentation screenshots live in asset/.
Use Issues to report bugs or propose features. Pull requests should describe the trigger, expected behaviour, and validation. Include tests for business changes and screenshots for interface changes. Discuss the use case and scope before starting a large feature.
If IOE is useful to you, consider starring the repository, reporting an issue, or contributing a change.
Chart provided by Star History. Click to explore the interactive timeline.
You can also support ongoing maintenance using the options below.
Thanks to the Linux DO community.
IOE is available under the MIT License. You may use, modify, and distribute it under the licence terms.
92 followers · starred Jun 2025
11 followers · starred Oct 2026
9 followers · starred May 2025