We are hiring, join us! π¨βπ»π©βπ»
- Related: ledger-live-mobile
- Backed by: ledger-live-common
Ledger Live is a new generation wallet desktop application providing a unique interface to maintain multiple cryptocurrencies for your Ledger Nano S / Blue. Manage your device, create accounts, receive and send cryptoassets, ...and many more.
Ledger Live is an hybrid desktop application built with Electron, React, Redux, RxJS,.. and highly optimized with ledger-core C++ library to deal with blockchains (sync, broadcast,..) via ledger-core-node-bindings. It communicates to Ledger hardware wallet devices (Nano X / Nano S / Blue) to verify address and sign transactions with ledgerjs. Some logic is shared with live-common.
The latest stable release is available on ledger.com/ledger-live.
Previous versions and pre-releases can be downloaded on here from the Releases section.
- macOS 10.14+
- Windows 8.1+ (x64)
- Linux (x64)
Ledger Live releases are signed. The automatic update mechanism makes use of the signature to verify that each subsequent update is authentic. Instructions for verifying the hash and signatures of the installation packages are available on this page, which will be integrated into the official download page.
- NodeJS
lts/fermium
(Node 14.x) - Yarn 1.x (Classic)
- Python 2.7 or 3.5+
- A C/C++ toolchain (see node-gyp documentation)
- On Linux:
sudo apt-get update && sudo apt-get install libudev-dev libusb-1.0-0-dev
# install dependencies
yarn
# launch the app
yarn start
# Build & package the whole app
# Creates a .dmg for Mac, .exe installer for Windows, or .AppImage for Linux
# Output files will be created in dist/ folder
yarn dist
If you are using Visual Studio Code IDE, here is a Launch Configuration that should allow you to run and debug the main process as well as the render process of the application.
As stated in the debugging documentation, this file should be named launch.json
and located under the .vscode
folder.
{
"version": "0.2.0",
"compounds": [
{
"name": "Run and Debug LLD",
"configurations": ["Debug Main Process", "Debug Renderer Process"],
"stopAll": true
}
],
"configurations": [
{
"name": "Debug Main Process",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "yarn",
"args": ["start"],
"outputCapture": "std",
"resolveSourceMapLocations": null,
"env": {
"ELECTRON_ARGS": "--remote-debugging-port=8315"
}
},
{
"name": "Debug Renderer Process",
"type": "chrome",
"request": "attach",
"address": "localhost",
"port": 8315,
"timeout": 60000
}
]
}
(you can use a .env or export environment variables)
NO_DEBUG_COMMANDS=1
NO_DEBUG_DB=1
NO_DEBUG_ACTION=1
NO_DEBUG_TAB_KEY=1
NO_DEBUG_NETWORK=1
NO_DEBUG_ANALYTICS=1
NO_DEBUG_WS=1
NO_DEBUG_DEVICE=1
NO_DEBUG_COUNTERVALUES=1
other envs can be seen in live-common:src/env.js
In a terminal you need to have webpack dev server running
yarn start
In an other terminal you need to launch the webdriver/electron container. First run will be slow. Next ones will be fast unless some changes are made to the container or package.json. You need to kill and re run the command if package.json changed. Make sure you are running Docker.
yarn start-electron-webdriver
You can point VNCViewer to localhost::5900
to check what is happening in the container. secret
is the password.
Then you can launch tests.
yarn spectron
or
node_modules/.bin/jest tests/specs/<FILEREGEX>.spec.js
By default it uses --runInBand jest option otherwise it explodes!
If you need to create an app.json, run a test that set up what you need and run it with the env var SPECTRON_DUMP_APP_JSON
set. It will create tests/dump.json
at the end of the spec.
Please put the image expectations at the end of the it(...) tests so that it does not break the whole flow if a snapshot breaks
yarn ci
src
βββ main : the main process is the mother of all process. it boots internal and renderer process and starts the window.
βββ internal : related to internal thread that runs commands, device logic, libcore,..
βββ renderer : everything related to the UI.
βΒ Β βββ screens
βΒ Β βββ modals
βΒ Β βββ components : all components that are not screens or modals, flattened.
βΒ Β βββ animations
βΒ Β βββ icons
βΒ Β βββ images
βΒ Β βββ styles
βΒ Β βββ bridge : logic related to interacting with accounts and currencies.
βΒ Β βββ families : per currency specific logic and components
βΒ Β βββ actions : redux actions
βΒ Β βββ reducers : redux reducers
βΒ Β βββ middlewares
βΒ Β βββ analytics
βΒ Β βββ fonts
βΒ Β βββ hooks
βΒ Β βββ i18n : all translation files
βΒ Β βββ index.html : html point point
βΒ Β βββ index.js : js entry point
βΒ Β βββ init.js : initialize the rendering
βΒ Β βββ live-common-setup.js : set up live-common for renderer specific parts
βΒ Β βββ ... other files related to renderer
βββ config : constants files. DEPRECATED. will be moved to live-common.
βββ helpers : helpers. DEPRECATED. will be moved to live-common or in relevant places.
βββ live-common-set-supported-currencies.js : generic set up of supported coins
βββ live-common-setup.js : generic set up of live-common
βββ logger : internal logging library. used by all thread. produces the "export logs".
βββ network.js : network implementation. will eventually move back to live-common.
βββ sentry : related to bug report API
Translations from English to other languages are handled internally so it is not possible to directly contribute to them, however if you spot a bug (e.g. a wrong variable name) or any issue in translation files, feel free to report a bug to Ledger's support team and it will be taken care of.