Safe{Wallet} – smart account wallet
Find a file
valleXYZ fe0a6dd697
Some checks are pending
Web Checks / lint (push) Waiting to run
Web Checks / prettier (push) Waiting to run
Web Checks / type-check (push) Waiting to run
Web Deploy to dev/staging / Deploy to dev/staging (push) Waiting to run
Web Deploy to Dockerhub / dockerhub-push (push) Waiting to run
Web Next.js Bundle Analysis / analyze (push) Waiting to run
feature(portfolio): finalize call architecture and portfolio ui (#6834)
* fix(dashboard): remove empty position container from dashboard when no positions (#6818)

* fix(portfolio): Optimize total fiat value for different token lists (#6744)

* feat(portfolio): use legacy endpoint for ALL tokens list

* refactor

* feature(portfolio): change tooltip text

* feature(portfolio): add positions to hint text of total fiat (#6836)

* feature(portfolio): optimize calls to portfolio (#6829)

* feat(portfolio): remove polling and refetchOnFocus from portfolio endpoints

* feature(portfolio): add refetch hint component

* feature(portfolio): refetch portfolio on tx history change

* refactor: use existing formatting library

* refactor: remove unused css class

* refactor: add correct event tracking

* fix: prettier

* feature(portfolio): move refresh button right of the hint text

* feature(portfolio): use tx service balances in send flow (#6830)

* feature(portfolio): use tx service balances in send flow

* feature(portfolio): adapt send flow to visible token list

* feature(portfolio): remove dust filter from send flow token list

* feat(portfolio): remove weight icon (#6839)

* refactor: rename txServiceBalances from legacyBalances (#6842)

* feature(portfolio): reduce cache time to 10s (#6843)

* feature(portfolio): add info text about token info (#6840)

* feature(portfolio): refetch portfolio only when it ran before (#6851)

* feature(portfolio): exchange tx icons (#6850)

* refactor: remove accidentally commited storybook
file mockServiceWorker.js

* fix: support dark mode on Earn and Stake on confirm tx

* fix: design on assets page
2025-12-16 18:28:09 +01:00
.cursor/rules refactor(mobile): do the blockaid check automatically on tx confirmation (#6075) 2025-07-03 14:26:44 +02:00
.github chore: update yarn, cleanup and set up npmMinimalAgeGate (#6859) 2025-12-16 12:08:02 +01:00
.husky chore: pre-commit hook and linting config (#6734) 2025-11-27 15:36:15 +01:00
.vscode Refactor Cypress tests: address book and balance tests (#2502) 2023-09-11 08:13:28 +02:00
.yarn/patches chore: update next to 15.5.8 (#6835) 2025-12-16 09:13:05 +01:00
apps feature(portfolio): finalize call architecture and portfolio ui (#6834) 2025-12-16 18:28:09 +01:00
config chore: unify prettier setup across repo (#6849) 2025-12-15 15:09:48 +01:00
expo-plugins/notification-service-ios chore(mobile): upgrade expo to v54 (#6376) 2025-09-25 14:05:21 +02:00
packages chore: unify prettier setup across repo (#6849) 2025-12-15 15:09:48 +01:00
.editorconfig chore: add .editorconfig for consistent formatting (#6503) 2025-10-20 08:39:18 +02:00
.gitattributes chore: Normalize line endings to LF (#6259) 2025-09-02 08:38:33 +02:00
.gitignore chore: add beads to gitignore (#6846) 2025-12-15 10:31:32 +01:00
.lintstagedrc.mjs chore: unify prettier setup across repo (#6849) 2025-12-15 15:09:48 +01:00
.nvmrc chore(nvm): fix typo on nvmrc (#6443) 2025-10-14 14:43:13 +02:00
.prettierignore chore: unify prettier setup across repo (#6849) 2025-12-15 15:09:48 +01:00
.prettierrc chore: Normalize line endings to LF (#6259) 2025-09-02 08:38:33 +02:00
.yarnrc.yml chore: update yarn, cleanup and set up npmMinimalAgeGate (#6859) 2025-12-16 12:08:02 +01:00
AGENTS.md chore: unify prettier setup across repo (#6849) 2025-12-15 15:09:48 +01:00
CLAUDE.md docs: Enhance AI contributor guidelines and add CLAUDE.md (#6709) 2025-11-24 16:34:46 +01:00
CONTRIBUTING.md docs(mobile): move docs to correct locations 2025-02-12 11:11:47 +00:00
Dockerfile Chore: fix docker build (#4740) 2025-01-07 13:42:53 +01:00
LICENSE Chore: copy the LICENSE back in the monorepo root (#4769) 2025-01-14 11:39:06 +01:00
package.json chore: update yarn, cleanup and set up npmMinimalAgeGate (#6859) 2025-12-16 12:08:02 +01:00
README.md chore(web): Add automated release workflows for one-button releases (#6615) 2025-11-11 11:13:30 +01:00
yarn.config.cjs fix(mobile): potential crash (#6796) 2025-12-08 16:45:26 +01:00
yarn.lock chore: update yarn, cleanup and set up npmMinimalAgeGate (#6859) 2025-12-16 12:08:02 +01:00

Safe{Wallet}

Safe{Wallet} monorepo

🌐 Safe{Wallet} web app📱 Safe{Wallet} mobile app

Overview

Welcome to the Safe{Wallet} monorepo! This repository houses multiple applications and packages managed under a unified structure using Yarn Workspaces. The monorepo setup simplifies dependency management and ensures consistent development practices across projects.

Key components

  • apps/: Contains application projects (e.g., mobile for the Safe{Wallet} mobile app).
  • packages/: Shared libraries and utilities.
  • config/: Configuration files for the monorepo.

Getting started

To get started, ensure you have the required tools installed and follow these steps:

Prerequisites

  • Node.js: Install the latest stable version from Node.js.
  • Yarn: Use Yarn version 4.5.3 or later

to install it with the latest node version you can simply do

corepack enable

and then just run

yarn

This will install the required version of yarn and resolve all dependencies.

Note

Corepack is a tool to help with managing versions of your package managers. It exposes binary proxies for each supported package manager that, when called, will identify whatever package manager is configured for the current project, download it if needed, and finally run it.

Initial setup

  1. Clone the repository:
git clone <repo-url>
cd monorepo
  1. Install dependencies:
yarn install

Monorepo commands

Here are some essential commands to help you navigate the monorepo:

Workspace management

  • Run a script in a specific workspace:
yarn workspace <workspace-name> <script>

Example:

yarn workspace @safe-global/web start
  • Add a dependency to a specific workspace:
yarn workspace <workspace-name> add <package-name>
  • Remove a dependency from a specific workspace:
yarn workspace <workspace-name> remove <package-name>

Note

Yarn treats commands that contain a colon as global commands. For example if you have a command in a workspace that has a colon and there isn't another workspace that has the same command, you can run the command without specifying the workspace name. For example:

yarn cypress:open

is equivalent to:

yarn workspace @safe-global/web cypress:open

Linting and formatting

  • Run ESLint across all workspaces:
yarn lint

Testing

  • Run unit tests across all workspaces:
yarn test

Contributing

Adding a new workspace

  1. Create a new directory under apps/ or packages/.
  2. Add a package.json file with the appropriate configuration.
  3. Run:
yarn install

Best practices

  • Use Yarn Workspaces commands for managing dependencies.
  • Ensure tests and linting pass before pushing changes.
  • Follow the commit message guidelines.

Tools & configurations

  • Husky: Pre-commit hooks for linting and tests.
  • ESLint & Prettier: Enforce coding standards and formatting.
  • Jest: Unit testing framework.
  • Expo: Mobile app framework for the mobile workspace.
  • Next.js: React framework for the web workspace.

Release process

For information on releasing the web app, see the Automated Release Procedure.


If you have any questions or run into issues, feel free to open a discussion or contact the maintainers. Happy coding! 🚀