The open protocol for ordering food.
Order from your terminal — or let your AI agent do it. Restaurants keep 100%.
For humans (and their agents)
pip install fftp
Or skip the typing entirely — paste this into Claude or ChatGPT:
Set up fftp on this machine so I can order food from my terminal.
1. Install it: pip install fftp
2. Run `fftp --help` to verify it works
3. Ask me where I'm located and what I like to eat, then help me add restaurants near me
4. Walk me through placing my first order
Docs: https://github.com/OpenSourceRulesz/fftp — if any step fails, diagnose and fix it, don't just describe the problem.
Then it's:
fftp nearby chinese # what's around?
fftp menu china-express # read the menu
fftp order china-express # place a pickup order
fftp watch ord_abc123 # dings + phone alert when it's ready
watch shows the pickup address with a maps link, fires a desktop notification when your food's ready, and with --notify mytopic it pings your phone via ntfy — no account needed.
For restaurants
Zero commission. Your customers, your menu, your money.
bash installer/install.sh # macOS/Linux (installer/install.ps1 on Windows)
~/.fftp/fftp-app # opens your counter dashboard
Upload your existing menu — PDF, Excel, a text file, whatever you've got — and the dashboard converts it for you. Orders ding in live; tap a button to move them along. Pickup-first by design; opt into delivery with your own fee whenever you want.
Customers can also order from their phone browser: the dashboard's Settings tab shows a QR code — print it, stick it on the counter, and scanning it opens a simple order page. No app to install.
Adding a restaurant is one command: fftp add http://<server>:8000 registers it from its counter QR.
The dashboard is protected by an admin token: the server prints your dashboard URL (with ?token=...) on startup, and --app opens it directly. Pass --admin-token to set your own, or it generates and saves one next to the database.
Taking card payments online
Out of the box, customers pay at the counter — the dashboard shows a COLLECT $X badge on unpaid tickets and you tap Mark paid. For online card payment (Apple Pay, Google Pay, and saved cards all appear automatically):
- Create a free Stripe account and grab your secret key.
- Start the server with it set:
STRIPE_SECRET_KEY=sk_live_... ~/.fftp/fftp-app
Customers are offered card payment in the terminal, pay on their phone, and the ticket flips to paid by itself. Card fees (~2.9% + 30¢) go to Stripe, like any card payment — fftp takes nothing.
Ordering from home (not just shop wifi)
By default fftp works on the restaurant's own network. To let customers order from home — still free, still no middleman — use Tailscale (free for up to 100 devices):
- Install Tailscale on the restaurant computer and run
tailscale up. - Customers install Tailscale on their device and join the same tailnet.
- In the customer's
~/.config/fftp/places.yaml, point the restaurant at its Tailscale IP:
places:
- {name: wandering-taco, base_url: http://100.64.0.5:8000, cuisine: Mexican, lat: 40.7, lon: -74.0}
Get the IP with tailscale ip -4 on the restaurant machine. (The installer offers this step too.)
The protocol
Four calls. That's the whole thing:
GET /.well-known/fftp.json → "here's my ordering server"
GET /fftp/v1/menu → structured menu (prices, modifiers, availability)
POST /fftp/v1/orders → place the order
GET /fftp/v1/orders/{id} → received → preparing → ready
Any client can implement it — a terminal app, an AI agent, a mobile app, a script. The restaurant runs one tiny server; everything else is just HTTP.
Principles
- Open — MIT licensed. The protocol is documented and anyone can build on it.
- No telemetry — the software never phones home. Ever.
- Free — the protocol is free forever. No commissions, no rent-seeking.
Development
git clone https://github.com/OpenSourceRulesz/fftp
cd fftp
python -m venv .venv && .venv/bin/pip install -e .
.venv/bin/python demo.py # runs the full self-test
bash examples/serve-test-places.sh # spin up 6 test restaurants
License
MIT — see LICENSE.
Metadata
Release files for fftp 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fftp-0.4.0.tar.gz | 42.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fftp-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 87.0 kB
Release files / fftp-0.4.0.tar.gz
| Download URL | fftp-0.4.0.tar.gz |
|---|---|
| Size | 42.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6a3a646ea26f30ab7f00ab976d5f8f31d2fdbbab0212552e5bf541de00c5032
|
|
BLAKE2b-256 checksum How to use checksums |
9275c96b3fa1f3a623196437c955ff80349a642b58ec2b789252e0777676ccea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / fftp-0.4.0-py3-none-any.whl
| Download URL | fftp-0.4.0-py3-none-any.whl |
|---|---|
| Size | 44.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fcf442f3420db7b6e6e153e7b8f15592071a1fb6be931ea73ad684c1a41356ce
|
|
BLAKE2b-256 checksum How to use checksums |
9e27b18f24ae544b03f8b73b679309d6f9d1f21d4b05c51b8726ed29656cef4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency log