Main differences between suite-web and suite-desktop builds
- @trezor/connect API
@trezor/connectis hosted at
[url]/build/static/connectand injected as an iframe into DOM.
@trezor/suiteare replaced to
@trezor/connect-websee webpack config
iframe.postMessage/iframe.onmessageinterface is used as communication channel between suite and connect API.
@trezor/connectis installed as regular node_module and works in nodejs context (electron main process).
@trezor/connectfiles are not hosted on the electron renderer context, there is no iframe or /build/static/connect dir.
On the renderer context all
@trezor/connectmethods from are replaced by
@trezor/ipc-proxymethods. see index
- Firmware binaries
newest firmware binaries are hosted at
[url]/build/static/connect/data/firmwareand they are downloaded using regular
firmware binaries are bundled as application resources in
bindirectory, full path depends on OS but it could be found on the as level as
app.asarfile, and they are downloaded using
fs.readFileAPI. see @trezor/connect/src/utils/assets
- Trezor Bridge (trezord)
App ID and name by environment
|Environment||App ID||App name||User data dir name|
Suite app name and ID are set by the environment so that Suite uses different user data dir and it's not mixed between environments. The main benefit is that you can switch back and forth between Suite dev versions without losing your remembered production wallets. One disadvantage of this solution is checking of other instance running is not so straitforward between environments.
Same concept (user data separated by environment) works on web out of the box (storage per domain name).
Debugging main process (Chrome dev tools)
Open chrome and go to
In "Devices" tab make sure that "Discover network targets" is enabled and "localhost:5858" is added (use Configure button)
"dev:run": "electron ." // to "dev:run": "electron --inspect=5858 ."
Run production build with
--inspect=5858 runtime flag
Logging can be enabled by running Suite with the command line flag
--log-level=LEVEL (replace LEVEL with error, warn, info or debug based on the logging you wish to display). Additional command line flags can be found below.
More technical information can be found on the Desktop Logger page.
|Reload app||F5, Ctrl+R, Cmd+R|
|Hard Reload app||Shift+F5, Shift+Ctrl+R, Shift+Cmd+R|
|Restart app||Alt+F5, Option+F5, Alt+Shift+R, Option+Shift+R|
|Open DevTools||F12, Cmd+Shift+I,Ctrl+Shift+I, Cmd+Alt+I, Ctrl+Alt+I|
Runtime flags can be used when running the Suite Desktop executable, enabling or disabling certain features. For example:
./Trezor-Suite-22.7.2.AppImage --open-devtools will run with this flag turned on, which will result in opening DevTools on app launch.
|Open DevTools on app launch.|
|Tells the auto-updater to fetch pre-release updates.|
|Instruct Bridge to support emulator (starts Bridge with |
|Set the logging level. Available levels are [name (value)]: error (1), warn (2), info(3), debug (4). All logs with a value equal or lower to the selected log level will be displayed.|
|Write log to disk|
|Enables printing of UI console messages in the console.|
|Name of the output file (defaults to |
|Path for the output file (defaults to |
|Enables the auto updater (if disabled in feature flags)|
|Disables the auto updater (if enabled in feature flags)|
|Set custom URL for auto-updater (default is github)|
Some libraries are difficult to test in development environments, such as the auto-updater. In order to still allow certain interactions with the feature in developments, libraries can be mocked.
How to use mocks?
- By default, development builds load mocks.
- Non-development builds can include mocks if the
USE_MOCKSenvironment variable is defined.
How to make a new mock?
- Open the suite-desktop build script located at
- Add a new entry to the
mocksobject. The key should be the name of the package, exactly as written when imported. The value should be the path to the mock file to point to (located in
- Create the file in
/packages/suite-desktop/src/mocksand export mocked properties that you have imported across the project.
The auto-updater has been mocked to simulate similar behavior to the actual library. Unless the command line parameter
--mock-trigger-updater-after=DELAY is passed, checking for updates will always return
not-available. This command line parameter requires a value, representing a delay in seconds before making the update available. Using
0 as a value will make the update available immediately. For example, if you wish to make an update available after 1 minute, you will use the parameter as follows:
--mock-trigger-updater-after=60. Note that his parameter is ONLY available with mocks enabled.
./Trezor\ Suite.app/Contents/MacOS/Trezor\ Suite --log-level=debug
appimage-run ./Trezor-Suite.AppImage --log-level=debug
npx asar extract ./Trezor\ Suite.app/Contents/Resources/app.asar ./decompiled
Run application to get mount-id like:
Trezor-Suite.AppImage installed in ~/.cache/appimage-run/e4f67ae8624c4079527c669d8a3c4bbc1dd00b83b2e1d15807a5863b11bd4f38
npx asar extract ~/.cache/appimage-run/[mount-id]/resources/app.asar ./decompiled