forked from LedgerHQ/ledger-live
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathREADME.md
More file actions
227 lines (161 loc) · 26.2 KB
/
Copy pathREADME.md
File metadata and controls
227 lines (161 loc) · 26.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<h3 align="center">
<image src="https://user-images.githubusercontent.com/3428394/165078916-06fe0b1b-c11d-4c6f-9c1a-ac9291333852.png" alt="ledger-logo" height="100" />
<image src="https://user-images.githubusercontent.com/3428394/165078595-1b2a55ae-783a-4c8f-8548-c4f050ae5e76.png" alt="js-logo" height="100" />
<br/>
<h3 align="center">The Ledger Live JavaScript ecosystem</h3>
<h4 align="center">
<a href="https://jobs.lever.co/ledger/?department=Consumer%20-%20Engineering&team=Live">
We are hiring, join us! 👨💻👩💻
</a>
</h4>
</h3>
## About
`ledger-live` is a **monorepository** whose purpose is to centralize all the JavaScript code related to the [**Ledger Live**](https://www.ledger.com/ledger-live) applications in one place.
[**Ledger Live**](https://www.ledger.com/ledger-live) is our platform of apps and services integrated specifically to work with your Nano device. It functions as a secure gateway to the crypto ecosystem. This means accessing a variety of crypto, NFT and DeFi based services directly and seamlessly from your hardware wallet – a better, simpler user experience that bypasses a major security concern known as blind signing.
Developers looking to integrate their blockchain in Ledger Live are invited to head to the [**Developer Portal**](https://developers.ledger.com) where they will find the section [**Blockchain Support**](https://developers.ledger.com/docs/coin/general-process).
## Installation
In order to interact with any package contained in this repository you will need to install the following:
- [**Node.js@16.x.x**](https://nodejs.org/)
- [**PnPm@7.x.x**](https://pnpm.io/)
**This is only a minimal setup. You will need to perform additional installation steps depending on the package you want to work on, please refer to its nested readme file.**
Then, clone the repository and install the dependencies:
```bash
git clone git@github.com:LedgerHQ/ledger-live.git
cd ledger-live
pnpm i
# Alternatively, if you want to bypass the postinstall scripts which can be long to run
# pnpm i --ignore-scripts
```
> Note: multiple postinstall steps will be triggered and fail if the applications prerequisites are not met.
> You can safely ignore the errors if you do not plan to work on those apps.
## Usage
**Important: All the commands should be run at the root of the monorepo.**
### Tools
We use [**pnpm workspaces**](https://pnpm.io/) and [**turborepo**](https://turborepo.org/) under the hood to handle local and external dependencies, orchestrate tasks and perform various optimizations like package hoisting or [**remote caching**](https://turborepo.org/docs/features/remote-caching).
For changelog generation releases and package publishing we rely on the [**changesets**](https://github.com/changesets/changesets) library.
### Root scripts
The scripts that are defined inside the root [`/package.json`](https://github.com/LedgerHQ/ledger-live/blob/develop/package.json) file will use _turborepo_ under the hood and automatically perform needed tasks before running the action.
```sh
# This command will first build all the local dependencies needed in the right order.
# Only then it will attempt to build the `Ledger Live Desktop` app.
pnpm build:lld
```
### Aliases
To run nested scripts which are not covered at the root, you should **not** change your working directory.
Every package has an **alias** defined (see application or library tables or check out the [`package.json`](https://github.com/LedgerHQ/ledger-live/blob/develop/package.json) file) that you can use as a prefix when running the script from the root.
```sh
# `pnpm desktop` is one of the shorthands written to to avoid changing the working directory.
# The following command will run the nested `test` script.
# `test` is defined inside the `./apps/ledger-live-desktop/package.json` file.
pnpm desktop test
```
**Note that when using these kind of scripts you will have to make sure that the dependencies are built beforehand.**
### Scoping
You can scope any _pnpm_ or _turborepo_ based script by using the `--filter` flag.
**This is a very powerful feature that you should look into if you are a frequent contributor.**
Please check out the [_pnpm_](https://pnpm.io/filtering) or [_turborepo_](https://turborepo.org/docs/core-concepts/filtering) documentation for more details (the syntax is almost similar albeit _pnpm_ being a bit more powerful).
Here are some examples:
```sh
# Install all the dependencies needed for the packages under ./libs
pnpm i -F "{libs/**}..."
# Run lint only on packages that have been changed compared to origin/develop
pnpm lint --filter=[origin/develop]
# Test every package that has been changed since the last commit excluding the applications
pnpm run test --continue --filter="!./apps/*" --filter="...[HEAD~1]"
# Run typechecks for the Ledger Live Mobile project
pnpm typecheck --filter="live-mobile"
```
## Documentation
Each project folder has a `README.md` file which contains basic documentation.
It includes background info about the project and how to setup, run and build it.
Please check the [**wiki**](https://github.com/LedgerHQ/ledger-live/wiki) for additional documentation.
## Structure
The sub-packages are (roughly) split into three categories.
### `/app` - Applications
The applications are user-facing programs which depend on one or more libraries.
<details><summary><b>Ledger Live Applications</b></summary>
<br/>
<p>
| Name | Alias | Download |
| -------------------------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**Ledger Live Desktop**](https://github.com/LedgerHQ/ledger-live/tree/develop/apps/ledger-live-desktop) | `pnpm desktop` | [Website](https://www.ledger.com/ledger-live/download) |
| [**Ledger Live Mobile**](https://github.com/LedgerHQ/ledger-live/tree/develop/apps/ledger-live-mobile) | `pnpm mobile` | [Android](https://play.google.com/store/apps/details?id=com.ledger.live&hl=fr&gl=US) / [iOS](https://apps.apple.com/fr/app/ledger-live-web3-wallet/id1361671700) |
</p>
</details>
### `/libs` - Libraries
Libraries are public packages which purpose is to be consumed by other libraries or applications.
They are deployed to the official npm repository under the `@ledgerhq` organization.
<details><summary><b>Ledger Live Libraries</b></summary>
<br/>
<p>
| Name | Alias | Umbrella | Package |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**@ledgerhq/ledger-live-common**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledger-live-common) | `pnpm common` | ----- |
| ---- | ----- | ----- | ------- |
| [**@ledgerhq/cryptoassets**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/cryptoassets) | `pnpm ljs:cryoptoassets` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/cryptoassets) |
| [**@ledgerhq/devices**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/devices) | `pnpm ljs:devices` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/devices) |
| [**@ledgerhq/errors**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/errors) | `pnpm ljs:errors` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/errors) |
| [**@ledgerhq/hw-app-algorand**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-algorand) | `pnpm ljs:hw-app-algorand` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-algorand) |
| [**@ledgerhq/hw-app-btc**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-btc) | `pnpm ljs:hw-app-btc` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-btc) |
| [**@ledgerhq/hw-app-cosmos**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-cosmos) | `pnpm ljs:hw-app-cosmos` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-cosmos) |
| [**@ledgerhq/hw-app-eth**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-eth) | `pnpm ljs:hw-app-eth` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-eth) |
| [**@ledgerhq/hw-app-helium**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-helium) | `pnpm ljs:hw-app-helium` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-helium) |
| [**@ledgerhq/hw-app-polkadot**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-polkadot) | `pnpm ljs:hw-app-polkadot` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-polkadot) |
| [**@ledgerhq/hw-app-solana**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-solana) | `pnpm ljs:hw-app-solana` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-solana) |
| [**@ledgerhq/hw-app-str**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-str) | `pnpm ljs:hw-app-str` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-str) |
| [**@ledgerhq/hw-app-tezos**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-tezos) | `pnpm ljs:hw-app-tezos` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-tezos) |
| [**@ledgerhq/hw-app-trx**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-trx) | `pnpm ljs:hw-app-trx` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-trx) |
| [**@ledgerhq/hw-app-xrp**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-xrp) | `pnpm ljs:hw-app-xrp` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-app-xrp) |
| [**@ledgerhq/hw-transport**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport) | `pnpm ljs:hw-transport` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport) |
| [**@ledgerhq/hw-transport-http**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-http) | `pnpm ljs:hw-transport-http` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-http) |
| [**@ledgerhq/hw-transport-mocker**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-mocker) | `pnpm ljs:hw-transport-mocker` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-mocker) |
| [**@ledgerhq/hw-transport-node-ble**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-ble) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-ble) |
| [**@ledgerhq/hw-transport-node-hid**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid) |
| [**@ledgerhq/hw-transport-node-hid-noevents**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid-noevents) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-noevents) |
| [**@ledgerhq/hw-transport-node-hid-singleton**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-hid-singleton) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-hid-singleton) |
| [**@ledgerhq/hw-transport-node-speculos**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-speculos) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-speculos) |
| [**@ledgerhq/hw-transport-node-speculos-http**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-node-speculos-http) | `pnpm ljs:hw-transport-node` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-node-speculos-http) |
| [**@ledgerhq/hw-transport-web-ble**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-web-ble) | `pnpm ljs:hw-transport-web` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-web-ble) |
| [**@ledgerhq/hw-transport-webhid**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-webhid) | `pnpm ljs:hw-transport-webhid` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-webhid) |
| [**@ledgerhq/hw-transport-webusb**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport-webusb) | `pnpm ljs:hw-transport-webusb` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/hw-transport-webusb) |
| [**@ledgerhq/logs**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/logs) | `pnpm ljs:logs` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/logs) |
| [**@ledgerhq/react-native-hid**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/react-native-hid) | `pnpm ljs:react-native-hid` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/react-native-hid) |
| [**@ledgerhq/react-native-hw-transport-ble**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/react-native-hw-transport-ble) | `pnpm ljs:react-native-hw` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/react-native-hw-transport-ble) |
| [**@ledgerhq/types-cryptoassets**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/types-cryptoassets) | `pnpm ljs:types-cryptoassets` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/types-cryptoassets) |
| [**@ledgerhq/types-devices**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/types-devices) | `pnpm ljs:types-devices` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/types-devices) |
| [**@ledgerhq/types-live**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/types-live) | `pnpm ljs:types-live` | [ledgerjs](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs) | [](https://www.npmjs.com/package/@ledgerhq/types-live) |
| ---- | ----- | ----- | ------- |
| [**@ledgerhq/icons-ui**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui/packages/icons) | `pnpm ui:icons` | [ui](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui) | [](https://www.npmjs.com/package/@ledgerhq/icons-ui) |
| [**@ledgerhq/native-ui**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui/packages/native) | `pnpm ui:native` | [ui](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui) | [](https://www.npmjs.com/package/@ledgerhq/native-ui) |
| [**@ledgerhq/react-ui**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui/packages/react) | `pnpm ui:react` | [ui](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui) | [](https://www.npmjs.com/package/@ledgerhq/react-ui) |
| [**@ledgerhq/ui-shared**](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui/packages/shared) | `pnpm ui:shared` | [ui](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ui) | [](https://www.npmjs.com/package/@ledgerhq/ui-shared) |
</p>
</details>
### `/tools` - Tools
> ⚠️ Tools are meant to be used internally and are undocumented for the most part.
A tool can be a github action, a shell script or a piece of JavaScript code that is used throughout this repository.
## Contributing
Please check the general guidelines for contributing to Ledger Live projects: [`CONTRIBUTING.md`](https://github.com/LedgerHQ/ledger-live/blob/develop/CONTRIBUTING.md).
Each separate project may also contain specific guidelines inside their own folder.
In the meantime here are some important highlights:
- Follow the git workflow, prefix your branches and do not create unneeded merge commits.
- Be mindful when creating Pull Requests, specify the reason of the change clearly and write tests if needed.
- Ledger Applications are mostly accepting bugfix contributions. For features we may reject them based on the fact that they do not fit our roadmap or our long-term goals.
## Nightly Releases
Every night a github action merges the `develop` branch into the `nightly` branch.
For more information on the nightly releases, have a look at our [wiki](https://github.com/LedgerHQ/ledger-live/wiki/Release-Process#nightlies).
### Ledger Live Desktop
- Every commit [triggers a workflow](https://github.com/LedgerHQ/ledger-live/actions/workflows/build-desktop.yml) that will build and attach the application binaries to the run.
- _For Ledger Employees:_ Nightly releases are built every night under the protected [ledger-live-build](https://github.com/LedgerHQ/ledger-live-build) repository.
### Ledger Live Mobile
- Every commit [triggers a workflow](https://github.com/LedgerHQ/ledger-live/actions/workflows/build-mobile.yml) that will build and attach the `Android` apk to the run.
- _For Ledger Employees:_ Nightly releases are built and published every night to [Testflight](https://developer.apple.com/testflight/) and the [Google Play Console](https://play.google.com/console).
### Libraries
Nightly version of library packages are pushed every night to npm.
To install a nightly library use the `@nightly` dist-tag.
```sh
npm i @ledgerhq/live-common@nightly
```
## License
Please check each project `LICENSE` file, most of them are under the `MIT` license.