Skip to main content

FFTP

The open protocol for ordering food.
Order from your terminal — or let your AI agent do it. Restaurants keep 100%.

PyPI License: MIT No telemetry


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):

  1. Create a free Stripe account and grab your secret key.
  2. 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):

  1. Install Tailscale on the restaurant computer and run tailscale up.
  2. Customers install Tailscale on their device and join the same tailnet.
  3. 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)

Source distribution for fftp 0.4.0
File Size Uploaded
fftp-0.4.0.tar.gz 42.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fftp 0.4.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page