zhtyyx/ioe

One-Stop Retail Inventory Solution

HTML

1,614

72 commits

updated Oct 8, 2026

See the code

README

IOE

IOE · Inventory & Checkout

Products, stock, checkout, and member accounts in one place.

GitHub stars GitHub forks License: MIT Python 3.10 or newer Django 4.2 or newer GHCR container image

简体中文 · 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
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.

Business overview with sales, stock alerts, and member information

🧩 Everyday workflows

AreaWhat you can do
📦 Products & stockMaintain categories, barcodes, prices, variants, and images; record receipts, withdrawals, adjustments, and low-stock alerts.
🛒 CheckoutScan or search for products, adjust quantities and prices, apply member discounts, and record payment methods and sale items.
👥 MembersManage membership levels, recharges, balances, and points; review purchases and birthday reminders.
📊 Reports & stocktakingReview sales trends, stock turnover, and member analysis; create stocktakes and reconcile counted quantities.
⚙️ AdministrationManage permissions, operation logs, and backups; switch between Chinese and English or light and dark themes.

🖥️ Interface preview

Checkout

Search for products to build the cart. Member lookup, payment methods, and the amount due sit alongside the item list for review before checkout.

Checkout with an item list and payment controls

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

Sales trend chart and daily details

Products & inventory
Product catalogueProduct editor
Product catalogueProduct editor
InventoryStocktaking
InventoryStocktaking
Members & reports
MembersMembership levels
MembersMembership levels
Report centreInventory turnover
Report centreInventory turnover
Dark theme

Business overview in dark mode

🚀 Quick start

Deploy a prebuilt image

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

Container build

Run from source

Use Python 3.10 or newer. The commands below are for macOS / Linux. SQLite is the default, so no separate database server is needed.

  1. 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
    
  2. 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
    
  3. 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.

🛠️ Development & contributions

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.

⭐ Star history

If IOE is useful to you, consider starring the repository, reporting an issue, or contributing a change.

GitHub Star history for zhtyyx/ioe

Chart provided by Star History. Click to explore the interactive timeline.

☕ Support maintenance

You can also support ongoing maintenance using the options below.

Support the project Support via WeChat

🤝 Acknowledgements

Thanks to the Linux DO community.

📄 License

IOE is available under the MIT License. You may use, modify, and distribute it under the licence terms.

zhtyyx/ioe

One-Stop Retail Inventory Solution

HTML

1,614

72 commits

updated Oct 8, 2026

See the code

README

IOE

IOE · Inventory & Checkout

Products, stock, checkout, and member accounts in one place.

GitHub stars GitHub forks License: MIT Python 3.10 or newer Django 4.2 or newer GHCR container image

简体中文 · 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
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.

Business overview with sales, stock alerts, and member information

🧩 Everyday workflows

AreaWhat you can do
📦 Products & stockMaintain categories, barcodes, prices, variants, and images; record receipts, withdrawals, adjustments, and low-stock alerts.
🛒 CheckoutScan or search for products, adjust quantities and prices, apply member discounts, and record payment methods and sale items.
👥 MembersManage membership levels, recharges, balances, and points; review purchases and birthday reminders.
📊 Reports & stocktakingReview sales trends, stock turnover, and member analysis; create stocktakes and reconcile counted quantities.
⚙️ AdministrationManage permissions, operation logs, and backups; switch between Chinese and English or light and dark themes.

🖥️ Interface preview

Checkout

Search for products to build the cart. Member lookup, payment methods, and the amount due sit alongside the item list for review before checkout.

Checkout with an item list and payment controls

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

Sales trend chart and daily details

Products & inventory
Product catalogueProduct editor
Product catalogueProduct editor
InventoryStocktaking
InventoryStocktaking
Members & reports
MembersMembership levels
MembersMembership levels
Report centreInventory turnover
Report centreInventory turnover
Dark theme

Business overview in dark mode

🚀 Quick start

Deploy a prebuilt image

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

Container build

Run from source

Use Python 3.10 or newer. The commands below are for macOS / Linux. SQLite is the default, so no separate database server is needed.

  1. 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
    
  2. 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
    
  3. 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.

🛠️ Development & contributions

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.

⭐ Star history

If IOE is useful to you, consider starring the repository, reporting an issue, or contributing a change.

GitHub Star history for zhtyyx/ioe

Chart provided by Star History. Click to explore the interactive timeline.

☕ Support maintenance

You can also support ongoing maintenance using the options below.

Support the project Support via WeChat

🤝 Acknowledgements

Thanks to the Linux DO community.

📄 License

IOE is available under the MIT License. You may use, modify, and distribute it under the licence terms.

Significant stargazers

smallwhite

92 followers · starred Jun 2025

MomentDerek

11 followers · starred Oct 2026

zemul

9 followers · starred May 2025