{"id":13614314,"url":"https://github.com/lightninglabs/lightning-node-connect","last_synced_at":"2025-04-04T09:06:41.705Z","repository":{"id":37953025,"uuid":"372755310","full_name":"lightninglabs/lightning-node-connect","owner":"lightninglabs","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-06T11:14:57.000Z","size":1086,"stargazers_count":81,"open_issues_count":9,"forks_count":22,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-03-28T08:04:48.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lightninglabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-01T08:24:06.000Z","updated_at":"2025-03-11T13:03:12.000Z","dependencies_parsed_at":"2023-11-22T13:28:50.290Z","dependency_job_id":"2bc44378-270d-4c0f-8489-b7b328d2678e","html_url":"https://github.com/lightninglabs/lightning-node-connect","commit_stats":{"total_commits":220,"total_committers":10,"mean_commits":22.0,"dds":0.5363636363636364,"last_synced_commit":"ee4e7ff52f83528228f791f543198afbb05134a4"},"previous_names":["lightninglabs/terminal-connect"],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightninglabs%2Flightning-node-connect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightninglabs%2Flightning-node-connect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightninglabs%2Flightning-node-connect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightninglabs%2Flightning-node-connect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lightninglabs","download_url":"https://codeload.github.com/lightninglabs/lightning-node-connect/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247149500,"owners_count":20891954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T20:00:59.762Z","updated_at":"2025-04-04T09:06:41.684Z","avatar_url":"https://github.com/lightninglabs.png","language":"Go","funding_links":[],"categories":["Tools"],"sub_categories":["Architecture"],"readme":"# Lightning Node Connect (LNC)\n\nSecure, private access to a Lightning node over an untrusted web server.\nLNC leverages [Password Authenticated Key Exchange\n(PAKE)](https://en.wikipedia.org/wiki/Password-authenticated_key_agreement) and\nmacaroon-scoped gRPC connections to enable developers/users a trust-minimized\napplication experience. LNC removes various network obstructions (NAT etc.) to\nprovide disintermediated access to user-run Lightning Network infrastructure and\napp UX.\n\nLightning Node Connect improves on prior trust/access efforts at solving this\nproblem (like [LND Connect](https://github.com/LN-Zap/lndconnect)) by using a\nPAKE instead of manually managing TLS certificates and macaroons. Lightning Node\nConnect's PAKE is combined with the [Noise Protocol\nFramework](http://noiseprotocol.org/noise.html) to create a pairing flow where a\nuser only needs to enter a short human-readable passphrase (scan or click a\nlink) to establish a secure end-to-end encrypted/mutually-authenticated\nconnection with an application. LNC uses macaroons to allow users to set a\ngranular set of capabilities a remote website/application is able to access.\n\nLNC leverages Go’s excellent WASM toolchain in order to allow browsers to\nsecurely connect to a remote Lightning Node. This WASM integration will allow\nfor richer web-based Lightning applications, which are a necessary component to\nrealize the Lightning Native Web.\n\n[Read the full LNC launch blog post\nhere](https://lightning.engineering/posts/2021-11-30-lightning-node-connect-deep-dive/).\n\n## Components\n\n![Lightning Node Connect diagram](doc/lnc.svg)\n\nLNC is a secure connection protocol for bridging the gap between any Lightning\nnode and the web. It is designed to work with any Lightning Network\nimplementation but this reference project is built to work with [Lightning\nTerminal](https://github.com/lightninglabs/lightning-terminal) /\n[`lnd`](https://github.com/lightningnetwork/lnd) specifically.\n\nThe following Open Source (MIT licensed) components are required to build a\nsecure LNC connection:\n\n* [Lightning Terminal (LiT)](https://github.com/lightninglabs/lightning-terminal)\n  provides a UI for creating and managing LNC sessions. A session is a\n  time-limited, permission-scoped connection authorization that is identified by\n  a 10 word mnemonic pairing phrase.\n  Once a session is created in LiT, an outbound connection to the mailbox proxy\n  is established from LiT, waiting for a handshake with a browser. This allows\n  a connection to be made to a LiT node that is behind a firewall/NAT or even\n  Tor-only internet connection.\n* A mailbox proxy (built into\n  [aperture](https://github.com/lightninglabs/aperture)): A simple public\n  mailbox server that acts as a\n  [TURN](https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT) relay.\n  The mailbox proxy/relay simply offers a buffered (hence the term \"mailbox\")\n  one-way connection stream. A stream is identified by a 512-bit ID which is\n  derived from the LNC pairing phrase. This makes it virtually impossible for\n  anyone to occupy a stream they weren't authorized to. And the added PAKE/Noise\n  encryption layer prevents anyone (including the mailbox proxy) from listening\n  in on the content.\n* A WASM client embedded in a website: The [WASM reference client provided in\n  this repo](cmd/wasm-client/main.go) is the component that allows JavaScript\n  embedded in a website (such as [Lightning\n  Terminal](https://terminal.lightning.engineering/)) to communicate with a\n  mailbox proxy over WebSockets using the PAKE/Noise encryption protocol. [An\n  example HTML page](example/README.md) shows how the WASM binary can be used\n  by JavaScript to initiate a connection and issue gRPC requests.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightninglabs%2Flightning-node-connect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flightninglabs%2Flightning-node-connect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightninglabs%2Flightning-node-connect/lists"}