The Antibes List
Five editorial picks, ranked by the only filter that matters: why you are dining.
Louroc
The Eden-Roc's clifftop dining terrace — the most beautiful summer restaurant in France.
Les Pêcheurs
Cap d'Antibes Beach Hotel's starred seafood room — Mediterranean haute cuisine over the rocks.
Le Figuier de Saint-Esprit
The Old Town's beloved fig-tree garden — Christian Morisset's life's work in a candlelit Provençal courtyard.
La Passagère
Hôtel Belles Rives in Juan-les-Pins — Fitzgerald's bay, a Michelin star, and the longest sea-facing terrace on the cap.
Maison de Bacon
The Riviera's most expensive bouillabaisse — and possibly its best — served at the same address since 1948.
Best for First Date in Antibes
Intimate, conversation-friendly rooms. Impressive without being intimidating. The tables where first impressions are made.
Le Figuier de Saint-Esprit
The Old Town's beloved fig-tree garden — Christian Morisset's life's work in a candlelit Provençal courtyard.
La Passagère
Hôtel Belles Rives in Juan-les-Pins — Fitzgerald's bay, a Michelin star, and the longest sea-facing terrace on the cap.
Best for Business Dinner in Antibes
Power tables, private rooms, considered wine lists. Where the deal gets done.
Louroc
The Eden-Roc's clifftop dining terrace — the most beautiful summer restaurant in France.
Les Pêcheurs
Cap d'Antibes Beach Hotel's starred seafood room — Mediterranean haute cuisine over the rocks.
The Top Five in Antibes
Ranked against a single question: if you had one night in Antibes, where would you go?
Louroc
The Eden-Roc's clifftop dining terrace — the most beautiful summer restaurant in France.
Les Pêcheurs
Cap d'Antibes Beach Hotel's starred seafood room — Mediterranean haute cuisine over the rocks.
Le Figuier de Saint-Esprit
The Old Town's beloved fig-tree garden — Christian Morisset's life's work in a candlelit Provençal courtyard.
La Passagère
Hôtel Belles Rives in Juan-les-Pins — Fitzgerald's bay, a Michelin star, and the longest sea-facing terrace on the cap.
Maison de Bacon
The Riviera's most expensive bouillabaisse — and possibly its best — served at the same address since 1948.
The Antibes Dining Guide
Antibes occupies a quieter register than its louder Riviera neighbours. Cannes is louder; Saint-Tropez is more obvious; Nice is bigger. Antibes has the longest yacht harbour in the Mediterranean, a fortified Old Town that the Romans laid out, and a Cap — Cap d'Antibes — that has hosted European luxury since the 1880s. The dining culture mirrors the geography: serious hotel restaurants on the Cap, a constellation of Michelin-starred kitchens inside the ramparts, and a working seaport that still supplies the day's fish to most of them.
What makes the dining unusually good is the concentration of talent in a small footprint. Within twenty minutes of the harbour you can eat at Louroc inside the Hôtel du Cap-Eden-Roc — arguably the most beautiful summer restaurant in France — at Les Pêcheurs over the rocks of Cap d'Antibes, at Le Figuier de Saint-Esprit inside the medieval Old Town, at La Passagère on the terrace of the Belles Rives in Juan-les-Pins, and at Bacon, the institution that has been serving the Riviera's most expensive bouillabaisse since 1948. No other small Riviera town runs this density of serious cooking.
Neighbourhoods
Reservations & Practical Notes
Louroc and Les Pêcheurs are summer-only — open roughly mid-May to early October, booking five to eight weeks ahead in July and August. Le Figuier de Saint-Esprit and L'Arazur run year-round. Dress is Riviera-formal at the Cap restaurants — jacket strongly preferred at dinner — and smart casual elsewhere. Tipping is not expected (service is included) but a discreet 5–10% on top is becoming common in the top rooms. English, French, and Italian are universal in the serious kitchens; Russian is increasingly offered. Lunch on the Cap is the rare meal that justifies a daytime dress code.
For a deeper editorial read, see our ongoing Editorial coverage — including pieces on the Best Restaurants for Every Occasion, and our /* RFK_UNIVERSAL_FILTER_V2 - sitewide occasion filter; reads data-occ + aliases */ (function(){ var SLUGS = {'first-date':'First Date','close-a-deal':'Close a Deal','birthday':'Birthday','impress-clients':'Impress Clients','proposal':'Proposal','solo-dining':'Solo Dining','team-dinner':'Team Dinner'}; var ALIASES = {'date-night':'first-date','anniversary':'birthday','romantic':'proposal'}; function canonical(s){ s=(s||'').trim().toLowerCase(); return ALIASES[s]||s; } function parseHash(){ var h=(location.hash||'').replace(/^#/,''); var m=h.match(/occasion=([a-z-]+)/i); return m?canonical(m[1]):''; } function tagSlug(t){ var s = canonical(t.getAttribute('data-occasion')||''); if (s) return s; var href = t.getAttribute('href')||''; var m = href.match(/#occasion=([a-z-]+)/i); return m ? canonical(m[1]) : ''; } function isAllTag(t){ if (tagSlug(t)) return false; var href = (t.getAttribute('href')||'').trim(); if (!href || href === '#' || href === '#all') return true; return /^\/city\/[^\/?#]+\/?$/.test(href.split('#')[0].split('?')[0]); } function cardOccasions(card){ var raw = (card.getAttribute('data-occ') || card.getAttribute('data-occasions') || card.getAttribute('data-occasion') || ''); var set = {}; raw.split(/[,;\s]+/).forEach(function(s){ var c=canonical(s); if(c) set[c]=1; }); return set; } function badgeMatches(card, slug){ var label = SLUGS[slug]; if (!label) return false; var found = false; card.querySelectorAll('.card-occasion-badge, .card-occasion, .card-occ, .occasion-badge, .card-badge').forEach(function(b){ var t = (b.textContent||'').trim().toLowerCase(); if (t === label.toLowerCase()) found = true; }); return found; } function cardMatches(card, slug){ if (!slug) return true; var occ = cardOccasions(card); if (Object.keys(occ).length) return !!occ[slug]; return badgeMatches(card, slug); } function ensureEmptyState(){ var grid = document.querySelector('.restaurant-grid'); if (!grid) return; var msg = document.getElementById('rfk-empty-state'); if (!msg) { msg = document.createElement('div'); msg.id = 'rfk-empty-state'; msg.style.cssText = 'display:none;padding:48