Comparison
10 min read
78 views

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

IT
InstaTunnel Team
Published by the InstaTunnel team | Editorial policy
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 guide

Quick 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-warning ou un User-Agent non 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 retourne 200 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 :

  1. 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)
  2. 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”)
  3. 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-warning ou un User-Agent personnalisé, sans impact sur API/webhook. (Source : docs ngrok, Limites du plan gratuit — “Suppression de la page d’interstitial”)
  4. 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)
  5. Correction de la commande Composer pour Expose. La documentation indique composer global require exposedev/expose (le org a changé de beyondcode à exposedev) ; ajout de l’installation via PHAR comme alternative. (Source : expose.dev/docs/getting-started/installation)
  6. 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)
  7. 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)
  8. 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)
  9. Correction de l’intégration Laravel Valet. Valet 4+ ne remplace pas ngrok par Expose ; il supporte trois outils interchangeables (ngrok, expose, cloudflared) via valet share-tool <outil>. ngrok reste par défaut. (Sources : laravel.com/docs Valet ; notes de version Valet 4.0)
  10. 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)
  11. 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)
  12. Suppression des affirmations non vérifiables (ex. coût VPS à 4$/mois) pour un langage plus généraliste.
  13. Suppression du langage SEO et de la promotion dans le titre et la description, pour une approche plus neutre.

Continue from this article into the most relevant product guides and workflows.

Related Topics

#ngrok vs expose, beyond code expose, expose vs ngrok, ngrok alternative, open source ngrok alternative, best ngrok alternative for web developers, php tunneling tool, laravel tunneling tool, expose local web server, share local sites securely, self hosted tunnel free, bypass ngrok free tier, ngrok domain limits, local http dashboard, inspect incoming http requests, replay http requests, modify http headers, web developer tunnel, php ngrok alternative, laravel ecosystem tools, open source reverse proxy, free tunnel for localhost, expose php binary, beyond code tools, share localhost to internet, secure tunnel for web developers, ngrok paid features free, expose pro tier, self host expose server, open source tunneling software, web hooks local testing, expose localhost free, expose local site, local dev environment sharing, webhook inspection tool, free ngrok premium features, managed tunnel service, custom domains local tunnel, beyond code php, laravel web development tools, web app testing tunnel, localhost sharing tool, secure localhost tunnel, expose cli, web testing proxy, local server to internet, unmetered custom domains tunnel, php reverse proxy, laravel local sharing, web traffic inspector, http request replay tool, http header modifier, alternative to ngrok for web developers

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles