An open-source Point of Sale library for restaurants.
Project description
mm-pos
mm-pos 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 mm-pos 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 mm-pos
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pos_mm-0.1.0.tar.gz.
File metadata
- Download URL: pos_mm-0.1.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
739c284512d21f1b5d82ea0da9fac2c2ef69c7f56fb6b244c848b8472e1316d1
|
|
| MD5 |
7ddd3ab6f66501c40b054103352c7c48
|
|
| BLAKE2b-256 |
fbb1e50518dfae3b6a496820f8e59900207ba40ec5c442ec837cf8560b9ab199
|
File details
Details for the file pos_mm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pos_mm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da52b2c75dddefd5b039582f9e60e606803cefa674e959e600ff1eb1861f8e76
|
|
| MD5 |
c79395da147f2bde55940412537b2ee2
|
|
| BLAKE2b-256 |
12d34efabf78807e6401ceed41b38d9b2ef50f7a934dd89d3c650f64660f089e
|