{"id":13499199,"url":"https://github.com/shesek/spark-wallet","last_synced_at":"2025-04-13T02:20:07.990Z","repository":{"id":32927722,"uuid":"145432611","full_name":"shesek/spark-wallet","owner":"shesek","description":"⚡️ A minimalistic wallet GUI for c-lightning, accessible over the web or through mobile and desktop apps.","archived":false,"fork":false,"pushed_at":"2023-11-08T13:22:35.000Z","size":10530,"stargazers_count":342,"open_issues_count":91,"forks_count":75,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-04-24T17:42:05.302Z","etag":null,"topics":["bitcoin","c-lightning","cordova-app","electron-app","lightning","lightning-network","lightning-wallet","wallet"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/shesek.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2018-08-20T15:02:12.000Z","updated_at":"2024-03-03T02:14:41.000Z","dependencies_parsed_at":"2024-01-14T03:49:41.722Z","dependency_job_id":"56a3eb7c-459e-49b7-ba23-42c2f1f76cb0","html_url":"https://github.com/shesek/spark-wallet","commit_stats":{"total_commits":814,"total_committers":9,"mean_commits":90.44444444444444,"dds":"0.013513513513513487","last_synced_commit":"112fd9bb835f4ee10feeeb46d6c6ebeb78db1c61"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shesek%2Fspark-wallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shesek%2Fspark-wallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shesek%2Fspark-wallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shesek%2Fspark-wallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shesek","download_url":"https://codeload.github.com/shesek/spark-wallet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248654569,"owners_count":21140325,"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":["bitcoin","c-lightning","cordova-app","electron-app","lightning","lightning-network","lightning-wallet","wallet"],"created_at":"2024-07-31T22:00:30.747Z","updated_at":"2025-04-13T02:20:07.964Z","avatar_url":"https://github.com/shesek.png","language":"JavaScript","funding_links":[],"categories":["Applications","Ecosystem","JavaScript"],"sub_categories":["Desktop Interfaces","Wallet"],"readme":"# Spark Lightning Wallet\n\n[![npm release](https://img.shields.io/npm/v/spark-wallet.svg)](https://www.npmjs.com/package/spark-wallet)\n[![build status](https://api.travis-ci.org/shesek/spark-wallet.svg)](https://travis-ci.org/shesek/spark-wallet)\n[![docker pulls](https://img.shields.io/docker/pulls/shesek/spark-wallet.svg)](https://hub.docker.com/r/shesek/spark-wallet)\n[![npm installs](https://img.shields.io/npm/dt/spark-wallet?label=npm%20installs)](https://www.npmjs.com/package/spark-wallet)\n[![downloads](https://img.shields.io/github/downloads/shesek/spark-wallet/total.svg?color=blueviolet)](https://github.com/shesek/spark-wallet/releases)\n[![MIT license](https://img.shields.io/github/license/shesek/spark-wallet.svg)](https://github.com/shesek/spark-wallet/blob/master/LICENSE)\n[![Pull Requests Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)\n[![IRC](https://img.shields.io/badge/chat-on%20freenode-brightgreen.svg)](https://webchat.freenode.net/?channels=spark-wallet)\n\n:zap: Simple \u0026 minimalistic\n:zap: Purely off-chain\n:zap: Progressive Web App\n:zap: Personalizable themes\n:zap: Mobile and desktop apps\n:zap: Automatic self-signed TLS\n:zap: LetsEncrypt integration\n:zap: Tor hidden service (v3)\n:zap:\n\n![Spark screenshot](doc/img/spark-header.png)\n\n\n\u003cimg align=\"right\" width=\"25%\" src=\"doc/img/payment.gif\"\u003e\n\n## Contents\n\n- [Introduction](#introduction)\n- [Server installation](#server-installation) (for web access)\n- [Desktop apps](#desktop-apps) (for Linux, macOS and Windows)\n- [Mobile app](#mobile-app) (for Android, iOS coming soon)\n- [Progressive Web App](#progressive-web-app)\n- [GUI settings \u0026 controls](#gui-settings--controls)\n- [Browser support](#browser-support)\n- [Developing](#developing)\n- [Code signing \u0026 reproducible builds](#code-signing--reproducible-builds)\n- [CLI options](#cli-options)\n\n## Introduction\n\nSpark is a minimalistic wallet GUI for c-lightning, accessible over the web or\nthrough mobile and desktop apps (for Android, Linux, macOS and Windows).\nIt is currently oriented for technically advanced users and is not an all-in-one package,\nbut rather a \"remote control\" interface for a c-lightning node that has to be managed separately.\n\nSparks supports sending and receiving payments, viewing history, and managing channels.\n\nSpark is a purely off-chain wallet, with no on-chain payments.\nThis allows Spark to fully realize the awesome UX enabled by lightning,\nwithout worrying about the complications and friction of on-chain.\nThis might change someday.\n\nSpark has a responsive UI suitable for mobile, tablet and desktop devices,\nbut is best optimized for use on mobile.\n\n\u003e ⚠️ Spark is beta-quality software under active development, please use with care.\n\nBig shout out to [Blockstream](https://blockstream.com) for generously sponsoring this work!\n\n## Server installation\n\nRequires a running [c-lightning](https://github.com/ElementsProject/lightning) node\n(see setup instructions in [the official docs](https://github.com/ElementsProject/lightning/blob/master/doc/INSTALL.md)\nor [this tutorial](https://hackernoon.com/harnessing-lightning-for-instant-bitcoin-transacting-a-tutorial-3b9dcdc00552))\nand nodejs v6.0 or newer (nodejs v8 is recommended, see [instructions here](https://nodejs.org/en/download/package-manager/).\nIf you're running into permission issues,\n[try this](https://docs.npmjs.com/getting-started/fixing-npm-permissions#option-two-change-npms-default-directory).)\n\n```bash\n$ npm install -g spark-wallet\n\n$ spark-wallet # defaults: --ln-path ~/.lightning --port 9737\n```\n\nOr simply `$ npx spark-wallet`, which will install and start Spark in one go.\n\nSpark will generate and print a random username and password that'll be used to login into the wallet,\nand persist them to `~/.spark-wallet/cookie` (can be controlled with `--cookie-file \u003cpath\u003e`).\nTo specify your own login credentials, set `--login [user]:[pass]` or the `LOGIN` environment variable.\n\nTo access the wallet, open `http://localhost:9737/` in your browser and login with the username/password.\n\nYou may also start Spark with `--pairing-url`, which will print a URL with an embedded access token,\nwhich you can open in your browser to login into the wallet without using the username/password.\n`--pairing-qr` provides the same URL as a QR (useful for mobile pairing).\n\nSee `$ spark-wallet --help` for the full list of command-line options (also available under [*CLI options*](#cli-options)).\n\n#### Configuration file\n\nSpark reads configuration options from `~/.spark-wallet/config` (can be overridden with `--config/-c \u003cpath\u003e`).\nThe expected format is one `key=value` per line, like so:\n\n```ini\nln-path=/data/lightning/testnet\nlogin=bob:superSecretPassword\nport=8000\n```\n\n#### Connecting remotely\n\nTo accept remote connections, set `--host \u003clisten-address\u003e` (shorthand `-i`, e.g. `-i 0.0.0.0`).\nThis will automatically enable TLS with a self-signed certificate.\n\nFor more information on TLS, instructions for setting up a CA-signed certificate using the built-in LetsEncrypt integration\nand for adding the self-signed certificate to Android,\nsee [`doc/tls.md`](doc/tls.md).\n\nTo start Spark as a Tor hidden service, set `--onion`. You don't need Tor pre-installed for this to work.\nSee [`doc/onion.md`](doc/onion.md) for more details,\nthe advantages of using an hidden service, and instructions for connecting from Android.\n*This is highly recommended.*\n\n#### Deploy with Docker\n\nSpark is also available as a Docker image that comes bundled with bitcoind and c-lightning.\nSee [`doc/docker.md`](doc/docker.md) for details.\n\n#### Adding to startup with `systemd`\n\nSee [`doc/startup-systemd.md`](doc/startup-systemd.md).\n\n## Desktop apps\n\nElectron-based desktop apps for Linux (packaged as `deb`, `AppImage`, `snap` and `tar.gz`),\nmacOS (as `zip`) and Windows (installer and a portable) are available for download from the\n[releases page](https://github.com/shesek/spark-wallet/releases).\n\nThe desktop apps comes bundled with the Spark server-side component. If you're connecting to a local\nc-lightning instance, you [can configure](https://user-images.githubusercontent.com/877904/44618385-68f40100-a87d-11e8-891b-79a0f2d59751.png)\nthe desktop app to connect to it directly without manually setting up the Spark server.\n\nConnecting to a remote c-lightning instance requires setting up the Spark server on the same machine\nrunning c-lightning and connecting through it.\n\n## Mobile app\n\nA Cordova-based native app for Android is available for download from the\n[Google Play app store](https://play.google.com/store/apps/details?id=com.spark.wallet)\nor from the [releases page](https://github.com/shesek/spark-wallet/releases).\n\nThe app requires a Spark server to communicate with, which you need [to setup](#server-installation) as a prerequisite.\n\nWhen the app starts for the first time, you'll need to configure your Spark server URL and API access key.\nYou can print your access key to the console by starting Spark with `--print-key/-k`.\nYou can also scan this information from a QR, which you can get with `--pairing-qr/-Q`.\n\nFor the native app to properly communicate with the server, the TLS certificate has to be\n[signed by a CA](doc/tls.md#letsencrypt-integration)\nor manually [added as a user trusted certificate](doc/tls.md#add-as-trusted-certificate-to-android).\n\n## Progressive Web App\n\nYou can install Spark as a [PWA](https://developer.mozilla.org/en-US/Apps/Progressive) (on mobile and desktop) to get a more native-app-like experience,\nincluding an home launcher that opens up in full screen, system notifications and faster load times.\n\nAvailable in Chrome mobile under `⋮` -\u003e `Add to homescreen` ([see here](https://imgur.com/zVe1sOH)),\nin Chrome desktop under `More tools` -\u003e `Install to desktop` ([see here](https://i.imgur.com/Pj6FpGA.png))\nand in Firefox mobile with an icon next to the address bar ([see here](https://mdn.mozillademos.org/files/15762/add-to-home-screen-icon.png)).\n\nInstalling the PWA requires TLS and a [CA-signed certificate](doc/tls.md#letsencrypt-integration)\n(unless accessed via `localhost`).\n\nCompared to the PWA, the main advantages of the mobile and desktop apps are\nthe ability to handle `lightning:` URIs,\nbetter security sandbox (detached from the browser)\nand static client-side code.\n\n**Note for iOS users:** iOS [does](https://github.com/webrtc/samples/issues/933) [not](https://stackoverflow.com/questions/46228218/how-to-access-camera-on-ios11-home-screen-web-app/46350136)\nallow PWAs to use WebRTC (required for the QR scanner), but it works otherwise.\nThe QR scanner works if you access Spark without using the PWA \"Add to homescreen\" feature.\n\n\u003cimg align=\"right\" width=\"33%\" src=\"doc/img/gui-controls.gif\"\u003e\n\n## GUI settings \u0026 controls\n\n- **Pay** and **Request** are pretty intuitive and don't require much explaining. Try them!\n\n- **Display unit:** Click the balance on the top-right or the unit in the \"request payment\" page to toggle the currency display unit.\n  The available options are sat, bits, milli, btc and usd.\n\n- **Theme switcher:** Click the theme name on the bottom-right to change themes (you can choose between 16 [bootswatch](https://bootswatch.com) themes).\n\n- **Payment details:** Click on payments in the list to display more details.\n  (note that the fee shown includes c-lightning's [overpayment randomization](https://github.com/ElementsProject/lightning/issues/1089))\n\n- **Expert mode:** Click the version number on the bottom-left to toggle expert mode.\n  This will add two new menu items, \"*Logs*\" and\n  [\"*RPC Console*\"](https://user-images.githubusercontent.com/877904/44295439-7fb0bb80-a2b1-11e8-8506-f5afb1c9f1d7.png),\n  and display yaml dumps with additional information throughout the app.\n\n- **Node address:** Click the node id on the footer to open the node info page which displays your node address (as text and QR).\n\n- **Channel management:** Click the \"*Channels*\" button inside the node info page to show and manage channels.\n\n## Browser support\n\nSupported on recent desktop and mobile version of Chrome, Firefox and Safari.\nIE is unsupported.\n\nRequires iOS 11.2+ for WebRTC (used by the QR scanner), but works otherwise with iOS 9+.\nChrome on iOS does not support WebRTC.\n\n## Developing\n\nSpark is written in a reactive-functional style using [rxjs](https://github.com/ReactiveX/rxjs) and [cycle.js](https://cycle.js.org),\nwith bootstrap for theming and a nodejs/express server as the backend.\n\nTo start a development server with live compilation for babel, browserify, pug and stylus, run:\n\n```bash\n$ git clone https://github.com/shesek/spark-wallet \u0026\u0026 cd spark-wallet\n$ npm install\n$ npm start -- --ln-path /data/lightning\n```\n\nSpark can be built from source using the following commands (more efficient than running the live compliation development server):\n\n```bash\n$ git clone https://github.com/shesek/spark-wallet \u0026\u0026 cd spark-wallet\n$ npm install\n$ npm run dist:npm\n$ ./dist/cli.js --ln-path /data/lightning\n```\n\nCordova builds can be prepared with `npm run dist:cordova`.\nThe `.apk` file will be available in `cordova/platforms/android/app/build/outputs/apk/debug/`.\n\nElectron builds can be prepared with `npm run dist:electron`.\nThey will be available under `electron/dist`.\n\nTo get more verbose server-side logging, start the server with `--verbose` (or `-V`).\n\nTo get more verbose output in the browser developer console, set `localStorage.debug = 'spark:*'`.\n\nSee [`doc/dev-regtest-env.md`](doc/dev-regtest-env.md) for instructions setting up a regtest environment with multiple wallets.\n\nPull requests, suggestions and comments are welcome!\n\n## Code signing \u0026 reproducible builds\n\nSigned distribution checksums are available in the git repo at\n[`SHA256SUMS.asc`](SHA256SUMS.asc)\n(updated with every versioned release)\nand on the [releases page](https://github.com/shesek/spark-wallet/releases).\nGit version tags are signed too.\n\nThe releases are signed by Nadav Ivgi (@shesek).\nThe public key can be verified on [keybase](https://keybase.io/nadav),\n[github](https://api.github.com/users/shesek/gpg_keys),\n[twitter](https://twitter.com/shesek) (under bio),\n[HN](https://news.ycombinator.com/user?id=nadaviv)\nor on [a domain he's known to control](https://www.bitrated.com/.keys/staff/nadav.asc).\n\nTo install the signed NPM package, download it from\n[the releases page](https://github.com/shesek/spark-wallet/releases), verify the hash\nand install using `$ npm install -g spark-wallet-[x.y.z]-npm.tgz`.\n\nTo install the signed Docker image, get the image hash from `SHA256SUMS.asc` and install it with\n`$ docker pull shesek/spark-wallet@sha256:[image-hash-verified-by-be-signed]`.\n\nThe NPM package, Linux `AppImage`/`snap`/`tar.gz` builds, macOS `zip` builds and the Windows installer\n[are deterministically reproducible](doc/reproducible-builds.md).\n\n## CLI options\n\n```bash\n$ spark-wallet --help\n\n  A minimalistic wallet GUI for c-lightning\n\n  Usage\n    $ spark-wallet [options]\n\n  Options\n    -l, --ln-path \u003cpath\u003e     path to c-lightning data directory [default: ~/.lightning]\n    -p, --port \u003cport\u003e        http(s) server port [default: 9737]\n    -i, --host \u003chost\u003e        http(s) server listen address [default: localhost]\n    -u, --login \u003cuserpwd\u003e    http basic auth login, \"username:password\" format [default: generate random]\n    -C, --cookie-file \u003cpath\u003e persist generated login credentials to \u003cpath\u003e or load them [default: ~/.spark-wallet/cookie]\n    --no-cookie-file         disable cookie file [default: false]\n\n    --rate-provider \u003cname\u003e   exchange rate provider, one of \"bitstamp\" or \"wasabi\" (requires tor) [default: bitstamp]\n    --no-rates               disable exchange rate lookup [default: false]\n    --proxy \u003curi\u003e            set a proxy for looking up rates, e.g. socks5h://127.0.0.1:9050 [default: none]\n\n    --force-tls              enable TLS even when binding on localhost [default: enable for non-localhost only]\n    --no-tls                 disable TLS for non-localhost hosts [default: false]\n    --tls-path \u003cpath\u003e        directory to read/store key.pem and cert.pem for TLS [default: ~/.spark-wallet/tls/]\n    --tls-name \u003cname\u003e        common name for the TLS cert [default: {host}]\n\n    --letsencrypt \u003cemail\u003e    enable CA-signed certificate via LetsEncrypt [default: false]\n    --le-port \u003cport\u003e         port to bind LetsEncrypt verification server [default: 80]\n    --le-noverify            skip starting the LetsEncrypt verification server [default: start when {letsencrypt} is set]\n    --le-debug               display additional debug information for LetsEncrypt [default: false]\n\n    -o, --onion              start Tor Hidden Service (v3) [default: false]\n    -O, --onion-path \u003cpath\u003e  directory to read/store hidden service data [default: ~/.spark-wallet/tor/]\n    --onion-nonanonymous     setup hidden service in non-anonymous mode [default: false]\n\n    -k, --print-key          print access key to console (for use with the Cordova/Electron apps) [default: false]\n    -q, --print-qr           print QR code with the server URL [default: false]\n    -Q, --pairing-qr         print QR code with embedded access key [default: false]\n    -P, --pairing-url        print URL with embedded access key [default: false]\n    --public-url \u003curl\u003e       override public URL used for QR codes [default: http(s)://{host}/]\n\n    --allow-cors \u003corigin\u003e    allow browser CORS requests from \u003corigin\u003e (USE WITH CARE) [default: off]\n    --no-webui               run API server without serving client assets [default: false]\n    --no-test-conn           skip testing access to c-lightning rpc (useful for init scripts) [default: false]\n\n    -c, --config \u003cpath\u003e      path to config file [default: ~/.spark-wallet/config]\n    -V, --verbose            display debugging information [default: false]\n    -h, --help               output usage information\n    -v, --version            output version number\n\n  Example\n    $ spark-wallet -l ~/.lightning\n\n  All options may also be specified as environment variables:\n    $ LN_PATH=/data/lightning PORT=8070 NO_TLS=1 spark-wallet\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshesek%2Fspark-wallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshesek%2Fspark-wallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshesek%2Fspark-wallet/lists"}