

OpenResto
Like
An open source booking management system for restaurants. No fees, data collection or ads. Set up multiple restaurants per instance, and use your own email address to communicate with your customers.
Cost / License
- Free
- Open Source (MIT)
Platforms
- Self-Hosted
- Docker
Features
Properties
- Privacy focused
Features
- Ad-free
- No Tracking
- White-labeled
- Restaurant Reservation
- White Label Solution
OpenResto News & Activities
Highlights All activities
Recent activities
OpenResto information
No comments or reviews, maybe you want to be first?
What is OpenResto?
A self-hosted, zero-dependency restaurant booking system. Customers browse restaurants, hold tables in real-time, and book instantly. Admins manage reservations, tables, floor sections, branding, and booking pauses from a dedicated dashboard - all from a single Docker Compose command with no external services required beyond optional SMTP.
Key features:
Booking flow
- Real-time table holds — when a customer selects a time slot, a 5-minute hold is placed on the specific table via a thread-safe in-memory ConcurrentDictionary. The holdId must be echoed back at booking time, preventing any other customer from snatching the same table during checkout. Holds auto-expire and are released atomically if the customer changes their selection.
- Popular-times categorisation — every 30-minute slot is tagged Lunch, Dinner, or Off-Peak using restaurant industry data (Toast/Square/Yelp benchmarks). The frontend groups available slots into labelled pill tabs so customers can quickly jump to the time period they want.
- Paused bookings — admins can halt new reservations until a specific date/time (e.g. during a private event) without touching any configuration files. The availability API checks BookingsPausedUntil before returning slots.
- IANA timezone awareness — all DateTime values are stored in UTC. Restaurant-local open/close hours and slot generation are computed using the restaurant's IANA timezone (America/New_York, Europe/London, …), so the availability calendar is always correct regardless of where the server runs.
Admin & management
- Multi-restaurant support — manage multiple locations from one instance; each has its own tables, sections, hours, timezone, and branding.
- Floor sections — tables are grouped into named sections (e.g. "Patio", "Bar", "Main") so admins can organize seating and customers see which section they're booking.
- Admin dashboard — live bookings list with status filtering (active / past / cancelled), extend or cancel reservations, and a customer-name field for front-of-house use.
- Booking pause — temporarily suspend new reservations for a restaurant without taking it offline or editing config.
Branding & UI
- Full white-label branding — app name, primary color, favicon icon, and PWA identity are all stored in the database and configurable from the admin settings panel. Choose from 10 Lucide icons (utensils, wine, coffee, pizza, flame, leaf, star, heart, chef-hat, fish); the favicon updates live in the browser tab without a page reload. The frontend fetches brand settings on boot and applies them globally via BrandContext.
- Dynamic PWA icons — GET /api/brand/pwa-icon.svg returns an SVG with the brand-colored background and white icon on the fly. GET /api/brand/pwa-icon-{192|512}.png rasterizes it with Magick.NET (cross-platform, no ImageMagick apt package needed) for PWA manifest compliance.
- Skeleton loaders & splash screens — branded loading states throughout the app; no blank white flashes.







