ngrok vs. Expose : Le tunnel PHP open-source conçu pour les développeurs web

Current comparison
Looking for the main ngrok alternative guide?
We keep the latest ngrok alternative comparison, CLI commands, pricing notes, and webhook examples on one canonical page.
Open the InstaTunnel ngrok alternative guideQuick answer
ngrok vs Beyond Code's Expose : Le tunnel open-source: quick answer
If free tunnel limits interrupt your workflow, compare session length, stable URLs, concurrent tunnels, and paid-plan pricing before choosing a localhost tunnel tool.
What free tunnel limits should developers check first?
Check session duration, URL stability, concurrent tunnels, custom subdomains, bandwidth or request limits, and whether webhook callbacks survive restarts.
How does InstaTunnel handle longer development sessions?
InstaTunnel Free is designed around 24-hour sessions, with Pro available for higher limits and MCP endpoint tunnel workflows.
Si vous créez des API, configurez des webhooks de Stripe, Shopify ou GitHub, ou si vous devez fournir à un client une prévisualisation fonctionnelle sans déployer en staging, vous avez presque certainement utilisé ngrok à un moment donné. Depuis plus d’une décennie, c’est la réponse par défaut à “comment partager mon localhost ?”
Mais le produit ngrok a évolué. Il est passé d’un simple utilitaire pour développeurs à une plateforme complète d’ingress et de gateway API, et son niveau gratuit reflète cette transformation. Cela a ouvert la voie à des alternatives plus ciblées pour les développeurs — l’une des plus établies étant Expose, un tunnel PHP open-source développé par Beyond Code (les créateurs de Laravel Herd et Tinkerwell).
Ce comparatif analyse les deux outils tels qu’ils existent aujourd’hui, et non comme ils sont souvent décrits dans d’anciens articles de blog.
(Note : ici, Expose de Beyond Code, pas LocalXpose, un autre outil de tunneling multi-protocoles abordé ailleurs sur ce site. Produits différents, noms similaires.)
Pourquoi existent les tunnels locaux
Un serveur local (http://localhost:8000) n’est pas accessible depuis Internet — c’est la configuration par défaut correcte. Mais cela devient problématique lorsque vous avez besoin de :
- Webhooks : Stripe, GitHub, et autres services ont besoin d’une URL publique pour POSTer des événements.
- Tests mobiles : un téléphone ou un émulateur doit communiquer avec un endpoint réel pour tester votre backend local.
- Démos client : montrer un travail en cours sans étape de déploiement.
Les outils de tunneling résolvent cela en exécutant un client sur votre machine qui ouvre une connexion sortante vers un serveur relais. Ce serveur vous fournit une URL publique et redirige le trafic via le tunnel vers votre port local.
ngrok : l’indéboulonnable
Créé en 2013 par Alan Shreve et écrit en Go, ngrok est l’outil que la majorité des développeurs ont appris à utiliser pour le tunneling. Il s’est depuis repositionné comme ce que sa propre communication qualifie de “passerelle universelle” — proposant l’ingress Kubernetes via son propre opérateur, des règles de politique de trafic (WAF, OAuth/OIDC, SAML), un pool d’endpoints pour l’équilibrage de charge, et la conformité SOC 2/HIPAA pour les clients enterprise. Il supporte HTTP, HTTPS, TCP, et (sur les plans payants) le trafic TLS, ce qui en fait encore l’outil idéal pour tunneliser autre chose qu’un serveur web — une session SSH, un serveur de jeux, un port de base de données.
Ce que limite réellement le niveau gratuit (et ce qu’il ne limite pas)
Les limites actuelles publiées pour le plan gratuit de ngrok :
| Ressource | Limite niveau gratuit |
|---|---|
| Endpoints en ligne | Jusqu’à 3 |
| Transfert de données sortant | 1 Go/mois |
| Requêtes HTTP/S | 20 000/mois |
| Connexions TCP | 5 000/mois (nécessite vérification de carte pour activer TCP) |
| Endpoints TLS | Non disponible |
| Membres d’équipe | 1 |
Quelques précisions sur des affirmations circulant au sujet du niveau gratuit :
- Il n’y a pas de timeout de session de 2 heures. La documentation officielle de ngrok indique clairement que le niveau gratuit n’impose pas de timeout sur les endpoints, et que vous pouvez faire tourner un tunnel indéfiniment en tant que service en arrière-plan. Cette information est souvent reprise comme un fait dans des comparatifs ; ce n’est pas exact selon la documentation actuelle.
- L’URL du niveau gratuit n’est pas aléatoire à chaque redémarrage. Chaque compte ngrok — y compris gratuit — se voit attribuer un “domaine de développement” (comme
your-name.ngrok-free.app) lié au compte, et non régénéré à chaque session. Vous ne pouvez pas la personnaliser ni ajouter votre propre domaine sur le plan gratuit, mais elle ne change pas comme le décrivent d’anciens articles. - La page d’avertissement intermédiaire peut être contournée sans mise à niveau. ngrok injecte une page d’interstitial de sécurité devant le trafic HTML sur les endpoints gratuits pour dissuader le phishing. Cela n’affecte pas le trafic API/webhook programmatique, et pour le trafic navigateur, cela peut être évité en envoyant un en-tête
ngrok-skip-browser-warningou unUser-Agentnon par défaut — aucune nécessité de payer. La mise à niveau la supprime complètement, mais ce n’est pas un obstacle sérieux sur le plan gratuit comme certains le présentent.
Ce qui est réellement restrictif : 1 Go de transfert mensuel et 20 000 requêtes, qui s’épuisent rapidement avec du trafic réel, et les tunnels TCP nécessitent une vérification de carte même pour une utilisation gratuite.
Tarification payante actuelle
ngrok a simplifié ses noms de plans. Actuellement, il n’y a pas de niveau “Personnel” — ce sont Free, Hobbyist, Pay-as-you-go, et Enterprise :
- Hobbyist — 8$/mois facturé annuellement (10$ mois à mois) : 3 endpoints en ligne, 5 Go de transfert inclus, 100 000 requêtes incluses, pas d’interstitial, domaines ngrok-branded.
- Pay-as-you-go — 20$/mois de base (inclut 20$ d’utilisation) + dépassement facturé : nombre illimité d’endpoints en ligne, domaine personnalisé, jusqu’à 3 membres d’équipe.
- Enterprise — tarif personnalisé, SSO/SCIM, HIPAA BAAs, support dédié.
Expose : l’alternative native PHP
Expose est développé par Marcel Pociot et l’équipe de Beyond Code (également derrière Laravel Herd et Tinkerwell). Contrairement à ngrok, il est entièrement écrit en PHP et ciblé délibérément sur HTTP/HTTPS — il ne gère pas le TCP ou UDP brut, et ne cherche pas à devenir un contrôleur d’ingress Kubernetes. Il vise précisément le workflow que ce blog couvre souvent : développement web local, tests webhook, prévisualisations client.
Il est véritablement open source (licence MIT, client et serveur), ce qui constitue la principale différence avec ngrok.
Installation
Méthodes d’installation officielles actuelles, selon la documentation d’Expose :
Composer (installation globale) :
composer global require exposedev/expose
Assurez-vous que le répertoire bin global de Composer est dans votre PATH.
Archive PHP (PHAR), sans Composer :
curl https://github.com/exposedev/expose/raw/master/builds/expose -L --output expose
chmod +x expose
sudo mv expose /usr/local/bin/expose
Une précision importante : Expose nécessite toujours une installation PHP locale même lorsqu’il est installé via le PHAR “binaire” — la FAQ de Beyond Code le confirme. Si vous n’avez pas déjà PHP en usage pour d’autres raisons, c’est une dépendance que ngrok, en tant que binaire Go, n’a pas.
L’organisation GitHub du projet est passée de beyondcode à exposedev ; le package Composer beyondcode/expose existe encore et est mis à jour, mais la documentation pointe désormais vers exposedev/expose.
Authentification et partage d’un site
expose token VOTRE_TOKEN
expose share http://localhost:8000
Si vous avez un compte Pro ou Équipe (ou si vous gérez votre propre serveur), vous pouvez demander un sous-domaine fixe :
expose share http://localhost:8000 --subdomain=mon-super-app
Le tableau de bord
Expose fournit un tableau de bord web local (http://127.0.0.1:4040, même convention que ngrok) pour inspecter et rejouer les requêtes HTTP entrantes. La version majeure actuelle, Expose 3, a ajouté plusieurs fonctionnalités intéressantes si vous ne l’avez pas regardé récemment :
- Rejouer avec modifications — vous pouvez désormais éditer les en-têtes, l’URI ou la charge utile avant de rejouer une requête capturée, pas seulement la renvoyer telle quelle.
- Plugins de requêtes — Expose peut reconnaître certains formats de webhook (GitHub et Paddle Billing intégrés) et afficher directement dans le tableau de bord et la CLI les champs pertinents du payload, sans avoir à fouiller dans du JSON brut.
- Détection Vite — si vous partagez un site avec un serveur de développement Vite en cours d’exécution, Expose le détecte et route automatiquement le tunnel Vite, résolvant un problème récurrent où le CSS/JS en hot-reload pouvait se casser silencieusement.
- Commande
catch-all— lance un tunnel qui retourne200 OKà tout, utile pour inspecter rapidement un payload webhook sans avoir besoin d’un endpoint implémenté.
Auto-hébergement vs. niveau gratuit géré — une distinction importante
C’est là que beaucoup de comparatifs simplifient à l’extrême. “Expose est open source, donc tout est gratuit” n’est pas tout à fait vrai si vous ne gérez pas vous-même le serveur.
Le niveau gratuit (“Hobby”) géré par Expose impose de vraies contraintes, selon la documentation de Beyond Code : un seul emplacement serveur (leur centre de données EU), noms de tunnels aléatoires à chaque connexion, et une limite de temps par connexion. C’est une offre très différente du niveau gratuit de ngrok, qui fournit un domaine stable par compte sans timeout.
L’auto-hébergement du serveur open-source est réellement gratuit et supprime ces contraintes — vous contrôlez le domaine, il n’y a pas de limite de temps, et vous êtes limité uniquement par la bande passante de votre infrastructure. Mais cela implique de déployer et maintenir votre propre serveur (un VPS basique d’un fournisseur comme Hetzner ou DigitalOcean suffit), ce qui constitue une responsabilité continue, pas une simple configuration initiale.
Expose Pro et Équipe (les niveaux payants gérés) se situent entre les deux : URLs persistantes, domaines personnalisés, sous-domaines réservés, et le réseau mondial de serveurs de Beyond Code, sans que vous ayez à faire tourner quoi que ce soit vous-même.
Tarification actuelle publiée :
| Plan | Prix | Ce que vous obtenez |
|---|---|---|
| Hobby | Gratuit | Un serveur EU, noms de tunnels aléatoires, limite de temps |
| Auto-hébergement | Gratuit (coût infra) | Contrôle total, domaine personnalisé, pas de limite de temps, votre bande passante |
| Pro | 79$/utilisateur/an | URLs persistantes, domaines personnalisés, sous-domaines réservés, réseau mondial, pas de limite de temps |
| Équipe | 229$/équipe/an | Tout en Pro, jusqu’à 10 utilisateurs, support prioritaire |
Intégration Laravel, correction
Une affirmation courante est que Expose “a remplacé ngrok comme outil par défaut” dans Laravel Valet. Ce n’est pas exact — Valet 4+ supporte trois outils de partage interchangeables (ngrok, expose, et cloudflared), sélectionnés explicitement via valet share-tool <outil>. ngrok reste le choix par défaut de Valet sauf si vous le changez.
Ce que Expose intègre de façon plus étroite et récente, c’est Laravel Herd, l’environnement de développement local moderne de Beyond Code (successeur de Valet, disponible pour macOS et Windows) : Expose est intégré dans Herd, et vous pouvez définir votre token d’authentification Expose directement depuis l’interface de Herd plutôt que via la CLI.
Comparatif des fonctionnalités
| Fonctionnalité | ngrok | Expose |
|---|---|---|
| Cas d’usage principal | Ingress réseau générique ; gateway API enterprise | Tunneling HTTP/HTTPS pour développement web |
| Langage / runtime | Go (binaire unique) | PHP (PHAR nécessite PHP local) |
| Protocoles | HTTP/S, TCP, TLS (payant) | HTTP, HTTPS uniquement |
| Open source | Non | Oui (MIT, client + serveur) |
| Bande passante / requêtes niveau gratuit | 1 Go / 20 000 requêtes par mois | Non limité par volume, mais tunnel unique + connexions temporisées |
| URL niveau gratuit | Un domaine dev persistant par compte | Sous-domaine aléatoire par connexion |
| Interstitial webhook | Oui en niveau gratuit (contournable via en-tête sans mise à niveau) | Aucun |
| Inspection des requêtes | Tableau de bord local, rejouer | Tableau de bord local, rejouer avec modifications, Plugins webhook intelligents |
| Domaines personnalisés | Plans payants uniquement (8-10$/mois) | Gratuit si auto-hébergé, ou Pro (79$/utilisateur/an) |
| Kubernetes / ingress enterprise | Oui (opérateur intégré, SSO/SCIM, HIPAA) | Pas une cible d’usage |
Quand chaque outil est pertinent
Privilégiez ngrok si : - Vous devez tunneliser autre chose qu’HTTP — SSH, port de base de données, serveur de jeux, TCP/TLS brut. - Vous avez besoin d’ingress Kubernetes, SSO/SAML, ou de conformité réglementaire (HIPAA BAAs, SOC 2). - Vous ne souhaitez pas dépendre de PHP sur une machine qui n’en a pas besoin.
Considérez Expose si : - Votre travail concerne HTTP/webhook et vous utilisez déjà un environnement PHP/Laravel (Herd, Valet, Sail). - Vous souhaitez une solution totalement gratuite, illimitée, et êtes prêt à auto-héberger le serveur open-source sur votre VPS. - Le tableau de bord webhook (détection payload GitHub/Paddle, routage Vite automatique) correspond à votre façon de déboguer les intégrations.
Aucun outil n’a “gagné” ici — ils résolvent des problématiques qui se recoupent mais sont distinctes, et la comparaison honnête dépend surtout de si vous avez besoin de TCP brut / ingress enterprise (territoire ngrok) ou d’un tunnel HTTP léger, auto-hébergeable, avec workflow PHP natif (territoire Expose).
Changelog
Corrections et ajouts apportés à la version initiale, avec sources :
- Suppression de l’affirmation “timeout de session de 2 heures” pour le niveau gratuit de ngrok. La documentation officielle indique que le niveau gratuit n’impose pas de timeout sur les endpoints, et supporte un fonctionnement en arrière-plan indéfini. (Source : docs ngrok, Limites du plan gratuit)
- Correction de l’affirmation “URL aléatoire changeant à chaque redémarrage”. ngrok attribue un domaine de développement à chaque compte, pas une URL aléatoire à chaque session ; cela est vrai depuis la mise à jour des domaines ngrok en 2023. (Source : docs ngrok, Limites du plan gratuit — “Domaine de développement spécifique à votre compte”)
- Correction de la description de la page d’interstitial comme étant une nécessité payante. Elle peut être contournée via l’en-tête
ngrok-skip-browser-warningou un User-Agent personnalisé, sans impact sur API/webhook. (Source : docs ngrok, Limites du plan gratuit — “Suppression de la page d’interstitial”) - Mise à jour des noms et prix des plans ngrok. Suppression de l’ancien “Personnel” ; les plans actuels sont Free, Hobbyist (8$/mois annuel, 10$/mois mensuel), Pay-as-you-go (20$/mois + usage), et Enterprise. (Source : ngrok.com/pricing)
- Correction de la commande Composer pour Expose. La documentation indique
composer global require exposedev/expose(le org a changé debeyondcodeàexposedev) ; ajout de l’installation via PHAR comme alternative. (Source : expose.dev/docs/getting-started/installation) - Précision que le “binaire” PHAR d’Expose nécessite toujours PHP local. Ce n’est pas une solution totalement autonome comme ngrok. (Source : expose.dev FAQ)
- Correction de la tarification d’Expose. Remplacement par les niveaux actuels : Hobby (gratuit, restrictions), Pro (79$/utilisateur/an), Équipe (229$/équipe/an, jusqu’à 10 utilisateurs). (Source : expose.dev/pricing)
- Ajout d’une restriction importante : le niveau gratuit “Hobby” d’Expose impose des noms de tunnels aléatoires, une limite de temps, et un seul serveur EU. La promesse “tout gratuit” ne s’applique que si vous auto-hébergez. (Source : expose.dev/docs/getting-started/authentication)
- Correction de l’intégration Laravel Valet. Valet 4+ ne remplace pas ngrok par Expose ; il supporte trois outils interchangeables (
ngrok,expose,cloudflared) viavalet share-tool <outil>. ngrok reste par défaut. (Sources : laravel.com/docs Valet ; notes de version Valet 4.0) - Remplacement par Laravel Herd, environnement local moderne de Beyond Code avec intégration native d’Expose (configuration du token via UI). (Source : expose.dev/docs/getting-started/authentication)
- Ajout de contenu vérifié sur Expose 3.0, la version majeure actuelle : nouveau tableau de bord, rejouer avec modifications, Plugins webhook (GitHub, Paddle), détection automatique Vite, commande
catch-all. (Source : expose.dev/docs/release-notes) - Suppression des affirmations non vérifiables (ex. coût VPS à 4$/mois) pour un langage plus généraliste.
- Suppression du langage SEO et de la promotion dans le titre et la description, pour une approche plus neutre.
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.