Открыть доступ к сайту
Откройте домен на телефоне или планшете в той же сети Wi-Fi по QR-коду или отправьте его кому-нибудь по публичной ссылке (cloudflared, ngrok, localhost.run, Pinggy).
Домен .test отвечает только на вашем Mac. Открыть доступ делает его доступным в другом месте: на телефоне или планшете в той же сети, чтобы проверить сайт вживую, или в интернете по публичной ссылке, чтобы показать его клиенту или принять вебхук.
На вкладке Домены проекта нажмите значок общего доступа в строке домена: откроется окно Открыть доступ к <домен> с двумя разделами.

По умолчанию всё выключено, ничего не сохраняется: доступ живёт в памяти и закрывается при выходе из Joppa. Домен должен быть включён, а прокси запущен.
В локальной сети
Включите Открыть доступ в локальной сети. Joppa открывает порт на адресе вашего Mac в сети (Wi-Fi или Ethernet) и показывает адрес, например http://192.168.1.20:41306, с QR-кодом. На телефоне, подключённом к той же сети Wi-Fi, отсканируйте код камерой или введите адрес.
- Один порт на домен, всегда один и тот же для данного домена (от 41000 до 41999), пока он свободен: закладка на телефоне продолжает работать от раза к разу.
- По обычному HTTP. Телефон не доверяет центру сертификации Joppa, установленному только на вашем Mac: адрес по HTTPS показал бы ошибку сертификата. Для безопасного контекста (service worker, камера,
crypto.subtle) используйте публичную ссылку по HTTPS. - Горячая перезагрузка работает. Клиент HMR Vite (а также Next.js, Astro…) переподключается к адресу, с которого пришла страница: его WebSocket идёт через тот же порт, и страница на телефоне обновляется, когда вы сохраняете файл.
- Доступ в локальной сети бесплатен.
Выключение переключателя сразу закрывает порт.
Публичная ссылка
Публичная ссылка даёт временный адрес https://, который может открыть кто угодно, через туннель. Она входит в Joppa Pro; в бесплатной версии раздел показывает «Публичные ссылки входят в Joppa Pro». См. Лицензия и тарифы.
Выберите Туннель, затем нажмите Открыть туннель. Через несколько секунд появится адрес с QR-кодом, кнопкой копирования и кнопкой открытия. Закрыть останавливает туннель.
| Туннель | Аккаунт | Что нужно |
|---|---|---|
| Cloudflare, без аккаунта (по умолчанию) | не нужен | cloudflared, который Joppa скачает, если его нет |
| ngrok, ваш аккаунт | ngrok | Установленный ngrok (brew install ngrok) и ваш токен |
| localhost.run, без аккаунта | не нужен | ssh, уже есть в macOS |
| Pinggy, без аккаунта (60 мин) | не нужен | ssh; бесплатный туннель закрывается через 60 минут |
- cloudflared: если его нет ни в
PATH, ни среди уже скачанного, Скачать cloudflared загружает закреплённую в Joppa версию из релизов Cloudflare на GitHub (около 20 МБ) и проверяет её SHA-256, прежде чем установить в папку Joppa (см. Файлы). Архив с несовпадающим отпечатком удаляется. - ngrok: вставьте свой Authtoken ngrok (dashboard.ngrok.com) и нажмите Сохранить; он хранится в связке ключей. Не нужен, если у ngrok токен уже есть (
ngrok config add-authtoken). Бесплатный аккаунт ngrok показывает посетителям страницу-предупреждение перед сайтом. - localhost.run и Pinggy работают через
ssh; Joppa хранит их ключи хостов в собственном файлеknown_hosts, не трогая~/.ssh.
Пока туннель открыт, строка состояния показывает его оранжевым («1 туннель открыт»); щелчок по нему показывает домены с открытым доступом, с кнопкой Закрыть для каждого и Закрыть все. В списке у домена также появляется значок публично. Если клиент туннеля останавливается (пропала сеть, сервис отказал), окно показывает «Туннель закрылся» с его последними сообщениями и кнопкой Повторить.
Что видит приложение
Оба вида доступа проходят через прокси Joppa, как и браузер вашего Mac:
- сервер разработки получает
Hostдомена (app.acme.test) иX-Forwarded-Proto: https, какой бы адрес ни был введён на телефоне: вallowedHostsVite и в доверенных доменах Laravel или Symfony ничего менять не нужно; OriginиRefererприводятся к домену, чтобы защита от CSRF принимала формы;- запросы видны в Аналитике и в Инспекторе.
В обратную сторону Joppa переписывает абсолютные URL домена на общий адрес: https://app.acme.test/… становится http://192.168.1.20:41306/… или https://….trycloudflare.com/…. Это касается перенаправлений (Location), заголовков CORS и CSP и тела текстовых ответов (HTML, CSS, JavaScript, JSON, XML, SVG) размером до 8 МБ. Cookie теряют атрибут Domain, а в локальной сети по HTTP — и атрибут Secure (иначе телефон отклонил бы их и сессия не держалась бы).
Laravel и npm run dev
Во время npm run dev Laravel записывает адрес Vite в public/hot (https://myproject.test:5173), и страница загружает оттуда свои скрипты и стили — с адреса, который знает только ваш Mac. Пока этот файл существует, общий доступ также отправляет пути Vite (/@vite/client, /resources/…, /node_modules/…) на сервер Vite вашего Mac и заменяет его адрес в ответах на общий адрес. Страница полностью загружается на телефоне без npm run build. Таблица доменов отмечает это пометкой «+ Vite :5173» рядом с целью.
В терминале и для ИИ
joppa share app.acme.test
joppa share app.acme.test --public
joppa share stop app.acme.test
См. Команда joppa и инструменты share_start, share_stop и share_status MCP-сервера.