Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
81eba50
fix: use targetId as row identifier
LaurenceJJones Apr 6, 2026
7d3d5b2
use targetid also on proxy create as that also has same issue
LaurenceJJones Apr 6, 2026
28ef523
Add CODEOWNERS
oschwartz10612 Apr 7, 2026
028df8b
fix: remove encodeURIComponent from invite link email parameter
jbelke Apr 7, 2026
466f137
Fix migration by testing for orphans
oschwartz10612 Apr 9, 2026
eaa70da
add pluto
miloschwartz Apr 9, 2026
80f5914
add pluto
miloschwartz Apr 9, 2026
34387d9
simplify wildcard domain on non pangolin-dns
miloschwartz Apr 9, 2026
f57012e
dont show international domain warning when capital letter present
miloschwartz Apr 9, 2026
840684a
dont show wildcard in domain picker
miloschwartz Apr 9, 2026
1aedf9d
fix(worldmap): avoid stuck country hover state
AdnanSilajdzic Apr 10, 2026
eac7478
Restrict namespaces to paid plans due to abuse
oschwartz10612 Apr 11, 2026
b1b22c4
Merge pull request #2825 from AdnanSilajdzic/fix/worldmap-hover-stuck…
oschwartz10612 Apr 11, 2026
cd34f0a
Merge pull request #2799 from LaurenceJJones/fix/proxy-target-deletion
oschwartz10612 Apr 11, 2026
825df7d
Merge pull request #2806 from jbelke/fix-invite-email-encoding
oschwartz10612 Apr 11, 2026
f4ea572
Fix #2828
oschwartz10612 Apr 11, 2026
2f386f8
Grandfather in old users
oschwartz10612 Apr 11, 2026
7e4e8ea
add niceId to list user resources
miloschwartz Apr 12, 2026
e118e5b
add list alises endpoint
miloschwartz Apr 12, 2026
0cb04d0
fix(worldmap): correct topojson feature typing
AdnanSilajdzic Apr 12, 2026
89471a0
include site name in target dropdown in public resources table
miloschwartz Apr 12, 2026
f91da2e
fix no default idp selector showing on ce closes #2813
miloschwartz Apr 12, 2026
f5d0694
change user devices column name from online to connected
miloschwartz Apr 12, 2026
34cc2e0
Merge pull request #2841 from AdnanSilajdzic/fix/worldmap-typescript-…
oschwartz10612 Apr 13, 2026
1e77ead
Adjust functioning of ee button
oschwartz10612 Apr 13, 2026
2bd4d2f
Merge branch 'main' into dev
oschwartz10612 Apr 13, 2026
acc6a26
update readme
miloschwartz Apr 13, 2026
92332fb
Hide the home unless you have it
oschwartz10612 Apr 13, 2026
dc63ef1
New translations en-us.json (French)
oschwartz10612 Apr 13, 2026
c8a3fc3
New translations en-us.json (Bulgarian)
oschwartz10612 Apr 13, 2026
2f08e6b
New translations en-us.json (Czech)
oschwartz10612 Apr 13, 2026
ee32307
New translations en-us.json (German)
oschwartz10612 Apr 13, 2026
0189a86
New translations en-us.json (Italian)
oschwartz10612 Apr 13, 2026
3ec32af
New translations en-us.json (Korean)
oschwartz10612 Apr 13, 2026
e596a63
New translations en-us.json (Dutch)
oschwartz10612 Apr 13, 2026
5cb62a3
New translations en-us.json (Polish)
oschwartz10612 Apr 13, 2026
0053cfc
New translations en-us.json (Portuguese)
oschwartz10612 Apr 13, 2026
682653b
New translations en-us.json (Russian)
oschwartz10612 Apr 13, 2026
0644e26
New translations en-us.json (Turkish)
oschwartz10612 Apr 13, 2026
8b808e4
New translations en-us.json (Chinese Simplified)
oschwartz10612 Apr 13, 2026
93cbd47
New translations en-us.json (Norwegian Bokmal)
oschwartz10612 Apr 13, 2026
ccc7003
New translations en-us.json (Spanish)
oschwartz10612 Apr 13, 2026
96e33d3
Merge pull request #2851 from fosrl/crowdin_dev
oschwartz10612 Apr 13, 2026
9cb1043
Push back date
oschwartz10612 Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @oschwartz10612 @miloschwartz
44 changes: 30 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,27 +45,43 @@ Pangolin is an open-source, identity-based remote access platform built on WireG

## Installation

- Check out the [quick install guide](https://docs.pangolin.net/self-host/quick-install) for how to install and set up Pangolin.
- Install from the [DigitalOcean marketplace](https://marketplace.digitalocean.com/apps/pangolin-ce-1?refcode=edf0480eeb81) for a one-click pre-configured installer.
- Get started for free with [Pangolin Cloud](https://app.pangolin.net/).
- Or, check out the [quick install guide](https://docs.pangolin.net/self-host/quick-install) for how to self-host Pangolin.
- Install from the [DigitalOcean marketplace](https://marketplace.digitalocean.com/apps/pangolin-ce-1?refcode=edf0480eeb81) for a one-click pre-configured installer.

<img src="public/screenshots/hero.png" />
<img src="public/screenshots/hero.png" alt="Pangolin" width="100%" />

## Deployment Options

| <img width=500 /> | Description |
|-----------------|--------------|
| **Pangolin Cloud** | Fully managed service - no infrastructure required. |
| **Self-Host: Community Edition** | Free, open source, and licensed under AGPL-3. |
| **Self-Host: Enterprise Edition** | Licensed under Fossorial Commercial License. Free for personal and hobbyist use, and for businesses making less than \$100K USD gross annual revenue. |
- **Pangolin Cloud** — Fully managed service - no infrastructure required.
- **Self-Host: Community Edition** — Free, open source, and licensed under AGPL-3.
- **Self-Host: Enterprise Edition** — Licensed under Fossorial Commercial License. Free for personal and hobbyist use, and for businesses making less than \$100K USD gross annual revenue.

## Key Features

| <img width=500 /> | <img width=500 /> |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
| **Connect remote networks with sites**<br /><br />Pangolin's site connectors create secure tunnels from remote networks without requiring public IP addresses or open ports. Sites make any network anywhere available for authorized access. | <img src="public/screenshots/sites.png" width=500 /><tr></tr> |
| **Browser-based reverse proxy access**<br /><br />Expose web applications through identity and context-aware tunneled reverse proxies. Users access applications through any web browser with authentication and granular access control. Pangolin handles routing, load balancing, health checking, and automatic SSL certificates without exposing your network directly to the internet. | <img src="public/clip.gif" width=500 /><tr></tr> |
| **Client-based private resource access**<br /><br />Access private resources like SSH servers, databases, RDP, and entire network ranges through Pangolin clients. Intelligent NAT traversal enables connections even through restrictive firewalls, while DNS aliases provide friendly names and fast connections to resources across all your sites. | <img src="public/screenshots/private-resources.png" width=500 /><tr></tr> |
| **Zero-trust granular access**<br /><br />Grant users access to specific resources, not entire networks. Unlike traditional VPNs that expose full network access, Pangolin's zero-trust model ensures users can only reach the applications and services you explicitly define, reducing security risk and attack surface. | <img src="public/screenshots/user-devices.png" width=500 /><tr></tr> |
### Connect remote networks with sites and NAT traversal

Pangolin's site connectors provide gateways into networks so you can access any networked resources. Sites use outbound tunnels and intelligent NAT traversal to make networks behind restrictive firewalls available for authorized access without public IPs or open ports. Easily deploy a site as a binary or container on any platform.

<img src="public/screenshots/sites.png" alt="Sites" width="100%" />

### Browser-based reverse proxy access

Expose web applications through identity and context-aware tunneled reverse proxies. Users access applications through any web browser with authentication and granular access control without installing a client. Pangolin handles routing, load balancing, health checking, and automatic SSL certificates without exposing your network directly to the internet.

<img src="public/clip.gif" alt="Reverse proxy access" width="100%" />

### Client-based private resource access

Access private resources like SSH servers, databases, RDP, and entire network ranges through Pangolin clients. Intelligent NAT traversal enables connections even through restrictive firewalls, while DNS aliases provide friendly names and fast connections to resources across all your sites. Add redundancy by routing traffic through multiple connectors in your network.

<img src="public/screenshots/private-resources.png" alt="Private resources" width="100%" />

### Give users and roles access to resources

Use Pangolin's built in users or bring your own identity provider and set up role based access control (RBAC). Grant users access to specific resources, not entire networks. Unlike traditional VPNs that expose full network access, Pangolin's zero-trust model ensures users can only reach the applications, services, and routes you explicitly define.

<img src="public/screenshots/users.png" alt="Users from identity provider with roles" width="100%" />

## Download Clients

Expand Down
6 changes: 6 additions & 0 deletions messages/bg-BG.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Неуспешно активиране на лицензионния ключ",
"licenseErrorKeyActivateDescription": "Възникна грешка при активирането на лицензионния ключ.",
"licenseAbout": "Относно лицензите",
"licenseBannerTitle": "Активирайте своята корпоративна лицензия",
"licenseBannerDescription": "Отключете корпоративните функции за вашият хостинг на Pangolin. Закупете лицензионен ключ, за да активирате премиум възможности, след това го добавете по-долу.",
"licenseBannerGetLicense": "Вземете лиценз",
"licenseBannerViewDocs": "Преглед на документацията",
"communityEdition": "Комюнити издание",
"licenseAboutDescription": "Това е за бизнес и корпоративни потребители, които използват Pangolin в търговска среда. Ако използвате Pangolin за лична употреба, можете да игнорирате този раздел.",
"licenseKeyActivated": "Лицензионният ключ е активиран",
Expand Down Expand Up @@ -2114,8 +2118,10 @@
"selectDomainForOrgAuthPage": "Изберете домейн за страницата за удостоверяване на организацията",
"domainPickerProvidedDomain": "Предоставен домейн",
"domainPickerFreeProvidedDomain": "Безплатен предоставен домейн",
"domainPickerFreeDomainsPaidFeature": "Предоставените домейни са платена функция. Абонирайте се, за да получите домейн, включен във вашия план - няма нужда да използвате вашия собствен.",
"domainPickerVerified": "Проверено",
"domainPickerUnverified": "Непроверено",
"domainPickerManual": "Ръчно",
"domainPickerInvalidSubdomainStructure": "Този поддомен съдържа невалидни знаци или структура. Ще бъде автоматично пречистен при запазване.",
"domainPickerError": "Грешка",
"domainPickerErrorLoadDomains": "Неуспешно зареждане на домейни на организацията",
Expand Down
6 changes: 6 additions & 0 deletions messages/cs-CZ.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Nepodařilo se aktivovat licenční klíč",
"licenseErrorKeyActivateDescription": "Došlo k chybě při aktivaci licenčního klíče.",
"licenseAbout": "O licencích",
"licenseBannerTitle": "Aktivovat vaši firemní licenci",
"licenseBannerDescription": "Odemkněte firemní funkce pro vaši samohostovanou instanci Pangolin. Zakupte si licenční klíč pro aktivaci prémiových možností a poté jej přidejte níže.",
"licenseBannerGetLicense": "Zakoupit licenci",
"licenseBannerViewDocs": "Zobrazit dokumentaci",
"communityEdition": "Komunitní edice",
"licenseAboutDescription": "To je pro obchodní a podnikové uživatele, kteří používají Pangolin v komerčním prostředí. Pokud používáte Pangolin pro osobní použití, můžete tuto sekci ignorovat.",
"licenseKeyActivated": "Licenční klíč aktivován",
Expand Down Expand Up @@ -2114,8 +2118,10 @@
"selectDomainForOrgAuthPage": "Vyberte doménu pro ověřovací stránku organizace",
"domainPickerProvidedDomain": "Poskytnutá doména",
"domainPickerFreeProvidedDomain": "Zdarma poskytnutá doména",
"domainPickerFreeDomainsPaidFeature": "Poskytnuté domény jsou placenou funkcí. Předplaťte si plán, abyste získali doménu zahrnutou v plánu – nemusíte si přinést vlastní.",
"domainPickerVerified": "Ověřeno",
"domainPickerUnverified": "Neověřeno",
"domainPickerManual": "Ruční nastavení",
"domainPickerInvalidSubdomainStructure": "Tato subdoména obsahuje neplatné znaky nebo strukturu. Bude automaticky sanitována při uložení.",
"domainPickerError": "Chyba",
"domainPickerErrorLoadDomains": "Nepodařilo se načíst domény organizace",
Expand Down
6 changes: 6 additions & 0 deletions messages/de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Fehler beim Aktivieren des Lizenzschlüssels",
"licenseErrorKeyActivateDescription": "Beim Aktivieren des Lizenzschlüssels ist ein Fehler aufgetreten.",
"licenseAbout": "Über Lizenzierung",
"licenseBannerTitle": "Aktivieren Sie Ihre Enterprise-Lizenz",
"licenseBannerDescription": "Schalten Sie Unternehmensfunktionen für Ihre selbstgehostete Pangolin-Instanz frei. Kaufen Sie einen Lizenzschlüssel, um Premium-Funktionen zu aktivieren, und fügen Sie ihn dann unten hinzu.",
"licenseBannerGetLicense": "Lizenz erhalten",
"licenseBannerViewDocs": "Dokumentation anzeigen",
"communityEdition": "Community-Edition",
"licenseAboutDescription": "Dies ist für Geschäfts- und Unternehmensanwender, die Pangolin in einem kommerziellen Umfeld einsetzen. Wenn Sie Pangolin für den persönlichen Gebrauch verwenden, können Sie diesen Abschnitt ignorieren.",
"licenseKeyActivated": "Lizenzschlüssel aktiviert",
Expand Down Expand Up @@ -2114,8 +2118,10 @@
"selectDomainForOrgAuthPage": "Wählen Sie eine Domain für die Authentifizierungsseite der Organisation",
"domainPickerProvidedDomain": "Angegebene Domain",
"domainPickerFreeProvidedDomain": "Kostenlose Domain",
"domainPickerFreeDomainsPaidFeature": "Bereitgestellte Domains sind ein kostenpflichtiges Feature. Abonnieren Sie, um eine Domain in Ihrem Tarif zu erhalten – keine Notwendigkeit, Ihre eigene mitzubringen.",
"domainPickerVerified": "Verifiziert",
"domainPickerUnverified": "Nicht verifiziert",
"domainPickerManual": "Manuell",
"domainPickerInvalidSubdomainStructure": "Diese Subdomain enthält ungültige Zeichen oder Struktur. Sie wird beim Speichern automatisch bereinigt.",
"domainPickerError": "Fehler",
"domainPickerErrorLoadDomains": "Fehler beim Laden der Organisations-Domains",
Expand Down
8 changes: 7 additions & 1 deletion messages/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Failed to activate license key",
"licenseErrorKeyActivateDescription": "An error occurred while activating the license key.",
"licenseAbout": "About Licensing",
"licenseBannerTitle": "Enable Your Enterprise License",
"licenseBannerDescription": "Unlock enterprise features for your self-hosted Pangolin instance. Purchase a license key to activate premium capabilities, then add it below.",
"licenseBannerGetLicense": "Get a License",
"licenseBannerViewDocs": "View Documentation",
"communityEdition": "Community Edition",
"licenseAboutDescription": "This is for business and enterprise users who are using Pangolin in a commercial environment. If you are using Pangolin for personal use, you can ignore this section.",
"licenseKeyActivated": "License key activated",
Expand Down Expand Up @@ -2113,9 +2117,11 @@
"addDomainToEnableCustomAuthPages": "Users will be able to access the organization's login page and complete resource authentication using this domain.",
"selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page",
"domainPickerProvidedDomain": "Provided Domain",
"domainPickerFreeProvidedDomain": "Free Provided Domain",
"domainPickerFreeProvidedDomain": "Provided Domain",
"domainPickerFreeDomainsPaidFeature": "Provided domains are a paid feature. Subscribe to get a domain included with your plan — no need to bring your own.",
"domainPickerVerified": "Verified",
"domainPickerUnverified": "Unverified",
"domainPickerManual": "Manual",
"domainPickerInvalidSubdomainStructure": "This subdomain contains invalid characters or structure. It will be sanitized automatically when you save.",
"domainPickerError": "Error",
"domainPickerErrorLoadDomains": "Failed to load organization domains",
Expand Down
6 changes: 6 additions & 0 deletions messages/es-ES.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Error al activar la clave de licencia",
"licenseErrorKeyActivateDescription": "Se ha producido un error al activar la clave de licencia.",
"licenseAbout": "Acerca de la licencia",
"licenseBannerTitle": "Habilitar su Licencia Enterprise",
"licenseBannerDescription": "Desbloquea funciones empresariales para tu instancia autohospedada de Pangolin. Compra una clave de licencia para activar capacidades premium, luego agréguela a continuación.",
"licenseBannerGetLicense": "Obtener una Licencia",
"licenseBannerViewDocs": "Ver Documentación",
"communityEdition": "Edición comunitaria",
"licenseAboutDescription": "Esto es para usuarios empresariales y empresariales que utilizan Pangolin en un entorno comercial. Si estás usando Pangolin para uso personal, puedes ignorar esta sección.",
"licenseKeyActivated": "Clave de licencia activada",
Expand Down Expand Up @@ -2114,8 +2118,10 @@
"selectDomainForOrgAuthPage": "Seleccione un dominio para la página de autenticación de la organización",
"domainPickerProvidedDomain": "Dominio proporcionado",
"domainPickerFreeProvidedDomain": "Dominio proporcionado gratis",
"domainPickerFreeDomainsPaidFeature": "Los dominios proporcionados son una función de pago. Suscríbete para obtener un dominio incluido con tu plan — no necesitas traer el tuyo propio.",
"domainPickerVerified": "Verificado",
"domainPickerUnverified": "Sin verificar",
"domainPickerManual": "Manual",
"domainPickerInvalidSubdomainStructure": "Este subdominio contiene caracteres o estructura no válidos. Se limpiará automáticamente al guardar.",
"domainPickerError": "Error",
"domainPickerErrorLoadDomains": "Error al cargar los dominios de la organización",
Expand Down
6 changes: 6 additions & 0 deletions messages/fr-FR.json
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,10 @@
"licenseErrorKeyActivate": "Échec de l'activation de la clé de licence",
"licenseErrorKeyActivateDescription": "Une erreur s'est produite lors de l'activation de la clé de licence.",
"licenseAbout": "À propos de la licence",
"licenseBannerTitle": "Activer Votre Licence Entreprise",
"licenseBannerDescription": "Débloquez les fonctionnalités d'entreprise pour votre instance autohébergée de Pangolin. Achetez une clé de licence pour activer les capacités premium, puis ajoutez-la ci-dessous.",
"licenseBannerGetLicense": "Obtenez une Licence",
"licenseBannerViewDocs": "Afficher la Documentation",
"communityEdition": "Edition Communautaire",
"licenseAboutDescription": "Ceci est destiné aux entreprises qui utilisent Pangolin dans un environnement commercial. Si vous utilisez Pangolin pour un usage personnel, vous pouvez ignorer cette section.",
"licenseKeyActivated": "Clé de licence activée",
Expand Down Expand Up @@ -2114,8 +2118,10 @@
"selectDomainForOrgAuthPage": "Sélectionnez un domaine pour la page d'authentification de l'organisation",
"domainPickerProvidedDomain": "Domaine fourni",
"domainPickerFreeProvidedDomain": "Domaine fourni gratuitement",
"domainPickerFreeDomainsPaidFeature": "Les domaines fournis sont une fonctionnalité payante. Abonnez-vous pour obtenir un domaine inclus avec votre plan — plus besoin de fournir le vôtre.",
"domainPickerVerified": "Vérifié",
"domainPickerUnverified": "Non vérifié",
"domainPickerManual": "Manuel",
"domainPickerInvalidSubdomainStructure": "Ce sous-domaine contient des caractères ou une structure non valide. Il sera automatiquement nettoyé lorsque vous enregistrez.",
"domainPickerError": "Erreur",
"domainPickerErrorLoadDomains": "Impossible de charger les domaines de l'organisation",
Expand Down
Loading
Loading