pos-mm
pos-mm is an open-source Point of Sale (POS) library built to replace outdated and expensive systems many restaurants still rely on. It started as a project for my family-owned restaurant and is designed to provide a modern, flexible, and affordable foundation for handling orders, payments, receipts, tables, inventory, and reports.
The library focuses on being reusable and framework-agnostic. It can be integrated into web applications, desktop software, or custom automation workflows. Developers can build complete POS systems on top of pos-mm without having to implement the core business logic themselves.
Features
- Menu Management – create and categorize menu items
- Orders – link orders to menu items, tables, and staff
- Payments – support multiple payment methods per order
- Users and Roles – waiter, cashier, admin with role-based permissions
- Table Management – open, close, and merge tables
- Inventory Tracking – optional stock deduction tied to menu items
- Receipts – generate itemized receipts for orders
- Reports – daily totals, top-selling items, payment breakdowns
- Database Utilities – simple setup and initialization helpers
Installation
Install the package from PyPI:
pip install pos-mm
Requirements
- Python 3.9+
- Dependencies listed in requirements.txt
To install all dependencies for development:
pip install -r requirements.txt
Quick Start
1. Initialize a database
from mm_pos.db import init_db, MenuItemDB
# In-memory SQLite database for testing
Session = init_db("sqlite:///:memory:")
session = Session()
2. Create a menu item
burger = MenuItemDB(name="Burger", price=9.99, category="Food")
session.add(burger)
session.commit()
3. Create a user
from mm_pos.db import UserDB
alice = UserDB(name="Alice", role="waiter")
alice.set_pin("1234") # securely hash the PIN
session.add(alice)
session.commit()
4. Create an order with items
from mm_pos.db import OrderDB, OrderItemDB
order = OrderDB(table_number=1, user=alice)
session.add(order)
session.commit()
session.add(OrderItemDB(order_id=order.id, menu_item_id=burger.id, qty=2))
session.commit()
5. Record a payment
from mm_pos.db import PaymentDB
payment = PaymentDB(order=order, method="cash", amount_given=25.0, user=alice)
session.add(payment)
session.commit()
6. Generate a receipt
from mm_pos.receipt import Receipt
receipt = Receipt(order)
print(receipt.generate_text())
Next Steps
- Explore
InventoryManagerfor stock management - Use
TableManagerfor managing tables in a restaurant - Generate reports with the
Reportsclass - Integrate with FastAPI to expose your POS system as a web service
Metadata
Release files for pos-mm 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pos_mm-0.1.2.tar.gz | 14.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pos_mm-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.8 kB
Release files / pos_mm-0.1.2.tar.gz
| Download URL | pos_mm-0.1.2.tar.gz |
|---|---|
| Size | 14.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8088c29956e1bee79905054782054060a5822b602169f9d5417f3264edabf3fc
|
|
BLAKE2b-256 checksum How to use checksums |
4fb63213b5124571cdc14718bfd99dc380455ed51a273d8e3c4232bfef20aad0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / pos_mm-0.1.2-py3-none-any.whl
| Download URL | pos_mm-0.1.2-py3-none-any.whl |
|---|---|
| Size | 12.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c3204aaf10a733ea5e063ed2093c3a7f35030b0522c7525b3f5539bb61e932f6
|
|
BLAKE2b-256 checksum How to use checksums |
be805e7beded88682110da2ab9a1361ec6d6c7584422ecb5c56b466db11f5801
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|