[
  {
    "path": ".github/ISSUE_TEMPLATE/correction.md",
    "content": "---\nname: Correction\nabout: Create a report to help us improve\ntitle: \"[Correction]\"\nlabels: correction\nassignees: HarvsG\n\n---\n\n**Describe the error and suggest correction**\nA clear and concise description of what the error is and what the correct emoji/text should be in each box. Reference the boxes to be corrected using `row`/`column` e.g `wireguard vanilla`/`iOS`, `android`\n\n**Evidence and Justification**\nJustify your correction and include evidence.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"[Feature Request]\"\nlabels: enhancement\nassignees: HarvsG\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. This repo is unclear... \n\n**Describe the solution you'd like**\nA clear and concise description of what you would like this repo to include\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered. (If applicable)\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/new-row--or-update-.md",
    "content": "---\nname: New row (or update)\nabout: Use this ready-made template to add a new row to the table or update an existing\n  one\ntitle: \"[Content]\"\nlabels: documentation\nassignees: HarvsG\n\n---\n\n<!-- Legend\n:credit_card: Paid version only\n:globe_with_meridians: Client can join as memeber of the full mesh\n:eight_pointed_black_star: Client can join as a 'spoke' off a node/gateway on the mesh\n:snowflake: Client can join the network but updates to the network are not automatically propgated to the client\n[:exclamation:<sup>0<sup>]() Significant exception to the feature (you must specify what this exception is at the bottom of the issue)\n-->\n\n# Please add and delete the emoji as appropriate and add any from the legend above\n- Software name: \n- Open source: :x: :white_check_mark: \n- Free: :x: :white_check_mark: \n- Full Mesh: :x: :white_check_mark:\n- Auto conf: :x: :white_check_mark:\n- Devices: Unlimited \n- Supports Users: :x: :white_check_mark:\n- Allows full tunnel: :x: :white_check_mark:\n- Subnet Access: :x: :white_check_mark:\n- NAT traversal: :x: :white_check_mark:\n- Linux: :x:  :globe_with_meridians: :eight_pointed_black_star:\n- Windows: :x: :globe_with_meridians: :eight_pointed_black_star:\n- MacOS: :x:  :globe_with_meridians: :eight_pointed_black_star:\n- Android: :x: :globe_with_meridians: :eight_pointed_black_star:\n- iOS: :x: :globe_with_meridians: :eight_pointed_black_star:\n- OpenWRT: :x: :white_check_mark: :globe_with_meridians: :eight_pointed_black_star:\n- Custom DNS: :x: :white_check_mark:\n- Repo URL: \n\n#Explanations\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
    "content": "<!-- \n1. Please use the emoji specified in the legend. If you wish to add an emoji feel free to include that in the PR but you must justify doing so\nLegend:\n- 3️⃣ Limited amount on free tier (e.g 3)\n- 💳 Paid version only\n- 🌐 Client can join as memeber of the full mesh\n- ✳️ Client can join as a 'spoke' off a node/gateway on the mesh\n- ❄️ Client can join the network but updates to the network are not automatically propgated to the client\n- ❗ Significant exception to the feature (should link to explanation)\n2. Use https://www.tablesgenerator.com/markdown_tables# to generate the table (File -> paste table contents) enable the `Compact Mode` Check box\n3. Where possible please only paste/overwrite the lines that you have altered so the git blame remains clean\n--> \n"
  },
  {
    "path": "readme.md",
    "content": "# Compare WireGuard Mesh Tools\n[WireGuard](https://wireguard.com/) is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography and supports mesh networking. However, by default it requires manual configuration. Adding a new client to the network would require the admin to update O(n<sup>2</sup>) client configurations each time. [wg-dynamic](https://git.zx2c4.com/wg-dynamic/about/docs/idea.md) was a proposed native WireGuard tool that would help with autoconfiguration, unfortunately development of this has gone stale. So here are a list of alternatives.\n\n## Table\n| Feature\\Software | Open source | Free | Full Mesh | Auto conf | Devices | Supports Users | Allows full tunnel | Subnet Access | NAT traversal | Linux | Windows | MacOS | Android | iOS | OpenWRT | Custom DNS |\n|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n| [Vanilla WireGuard](https://www.wireguard.com/repositories/) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | Unlimited | :x: | :white_check_mark: | :white_check_mark: | :x: | :eight_pointed_black_star: | :eight_pointed_black_star: | :eight_pointed_black_star: | :eight_pointed_black_star: | :eight_pointed_black_star: | :eight_pointed_black_star: | :white_check_mark: |\n| [Tailscale](https://github.com/tailscale/tailscale) | :white_check_mark:[:exclamation:<sup>0<sup>](#tsexplain1) | :x::free: | :white_check_mark: | :white_check_mark: | Unlimited :one::zero::zero: | :white_check_mark: :three: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians::lock_with_ink_pen: | :globe_with_meridians::lock_with_ink_pen: | :globe_with_meridians: | :globe_with_meridians::lock_with_ink_pen: | :white_check_mark: | :white_check_mark: [:exclamation:<sup>3<sup>](#tsexplain2) |\n| [Headscale](https://github.com/juanfont/headscale) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians: | :globe_with_meridians: | :globe_with_meridians:[:exclamation:<sup>2<sup>](#hsexplain1) | :globe_with_meridians::lock_with_ink_pen:[:exclamation:<sup>2<sup>](#hsexplain1) | :white_check_mark: | :white_check_mark: |\n| [Netmaker](https://github.com/gravitl/netmaker) | :white_check_mark:[:exclamation:<sup>1<sup>](#nmexplain1) | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians: | :globe_with_meridians: | :eight_pointed_black_star::snowflake: | :eight_pointed_black_star::snowflake: | :white_check_mark: | :white_check_mark: |\n| [WGSD](https://github.com/jwhited/wgsd) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | Unlimited | :x: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |\n| [Innernet](https://github.com/tonarino/innernet ) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | Unlimited | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: |  |\n| [Wesher](https://github.com/costela/wesher) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :x: |  |  |  | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: |\n| [NetBird](https://github.com/netbirdio/netbird) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited :one::zero::zero: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians: | :white_check_mark: | :white_check_mark: |\n| [wgmesh](https://github.com/aschmidt75/wgmesh) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :x: | :white_check_mark: | :x: | :x: | :globe_with_meridians: | :x: | :x: | :x: | :x: | :x: | :x: |\n| [wiresmith](https://github.com/svenstaro/wiresmith) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :x: | :x: | :x: | :x: | :globe_with_meridians: | :x: | :x: | :x: | :x: | :x: | :x: |\n| [webmesh](https://github.com/webmeshproj/webmesh) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Unlimited | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians: | :globe_with_meridians: | :soon: | :soon: | :soon: | :white_check_mark: |\n| [NordVPN Meshnet](https://github.com/NordSecurity/libtelio) | :white_check_mark: [:exclamation:<sup>4<sup>](#nvmexplain1) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :one::zero: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :globe_with_meridians: | :globe_with_meridians: :lock_with_ink_pen: | :globe_with_meridians: :lock_with_ink_pen: | :globe_with_meridians: :lock_with_ink_pen: | :globe_with_meridians: :lock_with_ink_pen: | :soon: | :white_check_mark: |\n  \n <sup>0</sup><a name=\"tsexplain1\">Tailscale's client code is open source. Tailscale's control server code is entirely closed source (It's a SaaS product).</a>  \n  \n <sup>1</sup><a name=\"nmexplain1\">Netmaker uses the SSPL license, which is not an \"official\" open source license occording to the OSI.</a>  \n  \n <sup>2</sup><a name=\"hsexplain1\">Headscale uses the tailscale mobile clients. <a href=\"https://github.com/juanfont/headscale/blob/main/docs/android-client.md\">Andriod instructions</a></a>. <a href=\"https://github.com/juanfont/headscale/blob/main/docs/iOS-client.md\">iOS</a></a>\n  \n <sup>3</sup><a name=\"tsexplain2\">When routing all traffic through an exit node tailscale ignores custom DNS. <a href=\"https://github.com/tailscale/tailscale/issues/8237\">Issue</a></a>\n\n <sup>4</sup><a name=\"nvmexplain1\">Open source parts: `libtelio` - multiplatform meshnet library, `nordvpn-linux` - vpn client app for linux with integrated meshnet feature, `libdrop` - multiplatform file-sharing-over-meshnet library.</a>\n\n <sup>5</sup><a name=\"nvmexplain2\">10 peers per account. Can connect to up to 50 devices from other accounts.</a>\n \n## Legend\n- :free: Has free tier\n- :three: Limited amount on free tier (e.g 3)\n- :lock_with_ink_pen: This software version is closed source\n- :credit_card: Paid version only\n- :globe_with_meridians: Client can join as member of the full mesh\n- :eight_pointed_black_star: Client can join as a 'spoke' off a node/gateway on the mesh\n- :snowflake: Client can join the network but updates to the network are not automatically propgated to the client\n- :soon: Developer claims the feature is coming soon\n- [:exclamation:<sup>0<sup>](https://github.com/HarvsG/WireGuardMeshes/blob/main/readme.md#legend) Significant exception to the feature (should link to explanation)\n\n## Disclaimers\n- [WireGuard](https://wireguard.com/) is a registered trademark of Jason A. Donenfeld.\n- I do not independently verify each of the features and generally rely on the honesty of contributors please open an issue if you find any mistakes.\n\n## Changes\nPlease help update this table by using [issues](https://github.com/HarvsG/WireGuardMeshes/issues) or [pull requests](https://github.com/HarvsG/WireGuardMeshes/pulls). You may find https://www.tablesgenerator.com/markdown_tables helpful (File -> paste table data)\n\n## Columns\n| Column | Description |\n|---|---|\n| Feature\\Software | The name and hyperlink to the project's main repository or website. |\n| Open source | Is the project open source. |\n| Free | Is the project entirely free to download, install and use. |\n| Full Mesh | Does the project allow every peer to communicate with every other peer directly. Relying on `AllowedIPs` to route traffic via a central peer in a hub and spoke model does not count. |\n| Auto conf | When a new peer is added to the mesh, are all other peers update automatically. Usually a requirement to be featured in this repo |\n| Devices | How many devices can the mesh support. |\n| Supports Users | Does the project allow users to be configured, usually for user access control. |\n| Allows full tunnel | Is the project capable of tunnelling all external traffic over at least one of the peers. |\n| Subnet Access | Can a device 'expose' the devices on its subnet to peers, usually using wiregaurd's `AllowedIPs`. This could allow you to access resources on your home network if your router was connected to the mesh, for example. |\n| NAT traversal | Can two peers that are each behind a separate NAT communicate with one another. This usually requires some other non-NATed central peer to update each NATed peer with the other's IP and port. Sometimes called NAT hole-punching |\n| Linux | Can the project be set up on a Linux machine e.g Ubuntu |\n| Windows | Can the project be installed on a Windows machine. |\n| MacOS | Can the project be installed on a MacOS machine. |\n| Android | Is there an Android App and can it connect to every other peer. |\n| iOS | Is there an iOS App and can it connect to every other peer. |\n| OpenWRT | Can the project be installed on an OpenWRT router. Useful if you want everything on your network to be able to access the devices on the mesh |\n| Custom DNS | Can the DNS provider used by all peers be configured centrally. |\n"
  }
]