10,000+ Restaurants — 830 Cities

Search the Directory

Type a name, a city, a cuisine, a neighbourhood. Filter by occasion. Sort by score. Open the right table for the right night.

Occasion:
Price:
Loading 10,000+ restaurants…
Loading directory…
target.value; render(); }, 120); }); // URL params: ?q=, ?occ=, ?price=, ?city= (slug), ?cu= (cuisine substring), ?michelin=1 const urlParams = new URLSearchParams(window.location.search); if (urlParams.get('q')) { document.getElementById('q').value = urlParams.get('q'); activeQuery = urlParams.get('q'); } if (urlParams.get('occ')) { const b = document.querySelector('.occ-chip[data-occ="' + urlParams.get('occ') + '"]'); if (b) { b.click(); } else { activeOcc = urlParams.get('occ'); } } if (urlParams.get('price')) { const b = document.querySelector('.price-chip[data-price="' + urlParams.get('price') + '"]'); if (b) { b.click(); } else { activePrice = urlParams.get('price'); } } if (urlParams.get('city')) activeCity = urlParams.get('city'); if (urlParams.get('cu')) activeCuisine = urlParams.get('cu'); if (urlParams.get('michelin') === '1') activeMichelin = true; // Active-filter ribbon for params that have no chip in the UI. (function () { var pieces = []; if (activeCity) pieces.push({ k: 'city', label: 'City: ' + activeCity }); if (activeCuisine) pieces.push({ k: 'cu', label: 'Cuisine: ' + activeCuisine }); if (activeMichelin) pieces.push({ k: 'michelin', label: 'Michelin-starred' }); if (!pieces.length) return; var summary = document.querySelector('.result-summary'); if (!summary) return; var ribbon = document.createElement('div'); ribbon.style.cssText = 'max-width:1400px;margin:0 auto 8px;padding:8px 48px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;'; var head = 'Filters:'; var body = pieces.map(function (p) { return '' + escapeHtml(p.label) + ' ×'; }).join(''); ribbon.innerHTML = head + body; summary.parentNode.insertBefore(ribbon, summary); ribbon.querySelectorAll('a[data-rm]').forEach(function (a) { a.addEventListener('click', function (ev) { ev.preventDefault(); var k = a.dataset.rm; if (k === 'city') activeCity = ''; if (k === 'cu') activeCuisine = ''; if (k === 'michelin') activeMichelin = false; var u = new URL(window.location.href); u.searchParams.delete(k); window.history.replaceState(null, '', u.toString()); a.parentElement.remove(); render(); }); }); })(); // Load index fetch('/assets/data/restaurants.json').then(function (r) { return r.json(); }).then(function (d) { DATA = d; render(); }).catch(function (e) { document.getElementById('results').innerHTML = '

Couldn’t load directory

' + escapeHtml(String(e)) + '

'; });