Skip to main content

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 InventoryManager for stock management
  • Use TableManager for managing tables in a restaurant
  • Generate reports with the Reports class
  • Integrate with FastAPI to expose your POS system as a web service

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pos_mm-0.1.0.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pos_mm-0.1.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

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

Hashes for pos_mm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 739c284512d21f1b5d82ea0da9fac2c2ef69c7f56fb6b244c848b8472e1316d1
MD5 7ddd3ab6f66501c40b054103352c7c48
BLAKE2b-256 fbb1e50518dfae3b6a496820f8e59900207ba40ec5c442ec837cf8560b9ab199

See more details on using hashes here.

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

Hashes for pos_mm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da52b2c75dddefd5b039582f9e60e606803cefa674e959e600ff1eb1861f8e76
MD5 c79395da147f2bde55940412537b2ee2
BLAKE2b-256 12d34efabf78807e6401ceed41b38d9b2ef50f7a934dd89d3c650f64660f089e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page