Safe{Wallet} – smart account wallet
Find a file
katspaugh 40d9d0db3c
Some checks failed
EAS Dev Build / Install and build (push) Has been cancelled
tx-builder Checks / lint (push) Has been cancelled
tx-builder Checks / prettier (push) Has been cancelled
tx-builder Checks / type-check (push) Has been cancelled
tx-builder Checks / unit-tests (push) Has been cancelled
tx-builder Checks / build (push) Has been cancelled
tx-builder Deploy / PR Preview (push) Has been cancelled
tx-builder Deploy / Deploy Staging (push) Has been cancelled
tx-builder Deploy / Production Release (push) Has been cancelled
Web Checks / lint (push) Has been cancelled
Web Checks / prettier (push) Has been cancelled
Web Checks / type-check (push) Has been cancelled
Web Checks / knip-exports (push) Has been cancelled
Web Deploy to dev/staging / Deploy to dev/staging (push) Has been cancelled
Web Deploy to Dockerhub / dockerhub-push (push) Has been cancelled
Web Smoke tests / Cypress Smoke tests (push) Has been cancelled
Web Smoke tests / Cypress Smoke tests-1 (push) Has been cancelled
Web Smoke tests / Cypress Smoke tests-2 (push) Has been cancelled
Web Smoke tests / Cypress Smoke tests-3 (push) Has been cancelled
Web Smoke tests / Cypress Smoke tests-4 (push) Has been cancelled
Web Next.js Bundle Analysis / analyze (push) Has been cancelled
Web Unit tests / test (push) Has been cancelled
Web Checks / notify (push) Has been cancelled
Web Smoke tests / notify (push) Has been cancelled
chore: handle unset RUN_TESTS_ON_PUSH in pre-push hook (#7165)
`set -euo pipefail` causes the pre-push hook to crash when
RUN_TESTS_ON_PUSH is not set. Use `${RUN_TESTS_ON_PUSH:-}` to
default to empty string instead of erroring.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:39:49 +01:00
.claude chore: add prettier guardrails to prevent CI formatting failures (#7155) 2026-02-12 16:05:32 +01:00
.codemod refactor(web): migrate speedup feature (#7085) 2026-02-03 17:01:32 +01:00
.cursor/rules chore: add Cypress E2E automation rules for Cursor and Claude (#7070) 2026-02-02 21:12:06 +01:00
.github chore(deps): bump aws-actions/configure-aws-credentials from 5 to 6 (#7126) 2026-02-13 09:34:29 +01:00
.husky chore: handle unset RUN_TESTS_ON_PUSH in pre-push hook (#7165) 2026-02-13 11:39:49 +01:00
.specify chore: migrate tx-builder from safe-apps repo to this monorepo (#6953) 2026-01-22 12:43:50 +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 refactor(web): pre-fetch chains config at build time for instant startup and SSG support (#7122) 2026-02-13 11:36:20 +01:00
config feat(storybook): Vite-based Storybook with full coverage and visual regression testing (#7090) 2026-02-04 11:52:24 +01:00
expo-plugins/notification-service-ios chore(mobile): upgrade expo to v54 (#6376) 2025-09-25 14:05:21 +02:00
packages refactor(web): pre-fetch chains config at build time for instant startup and SSG support (#7122) 2026-02-13 11:36:20 +01:00
scripts feat(storybook): Vite-based Storybook with full coverage and visual regression testing (#7090) 2026-02-04 11:52:24 +01:00
specs refactor: optimize useLoadFeature with shared registry and reduced re-renders (#7154) 2026-02-12 16:05:20 +01:00
tools/codemods/migrate-feature refactor: optimize useLoadFeature with shared registry and reduced re-renders (#7154) 2026-02-12 16:05:20 +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: migrate tx-builder from safe-apps repo to this monorepo (#6953) 2026-01-22 12:43:50 +01:00
.lintstagedrc.mjs chore: add prettier guardrails to prevent CI formatting failures (#7155) 2026-02-12 16:05:32 +01:00
.nvmrc chore(nvm): fix typo on nvmrc (#6443) 2025-10-14 14:43:13 +02:00
.prettierignore refactor(web): pre-fetch chains config at build time for instant startup and SSG support (#7122) 2026-02-13 11:36:20 +01:00
.prettierrc chore: Normalize line endings to LF (#6259) 2025-09-02 08:38:33 +02:00
.yarnrc.yml feat: add minimal age exception for @safe-global/ packages (#6981) 2026-01-16 11:55:58 +01:00
AGENTS.md chore: add prettier guardrails to prevent CI formatting failures (#7155) 2026-02-12 16:05:32 +01:00
CLAUDE.md chore: add prettier guardrails to prevent CI formatting failures (#7155) 2026-02-12 16:05:32 +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(deps-dev): bump storybook from 10.2.6 to 10.2.7 (#7140) 2026-02-11 10:03:38 +01:00
README.md docs: update README (#6967) 2026-01-15 11:20:01 +01:00
yarn.config.cjs fix(mobile): potential crash (#6796) 2025-12-08 16:45:26 +01:00
yarn.lock chore(deployment): update dependencies for tempo testnet rollout (#7073) 2026-02-13 10:47:55 +01:00

Safe{Wallet}

Safe{Wallet} monorepo

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

Overview

Welcome to the Safe{Wallet} monorepo! Safe (formerly Gnosis Safe) is a multi-signature smart contract wallet for Ethereum and other EVM chains, requiring multiple signatures to execute transactions.

This repository houses both web and mobile applications along with shared 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/web - Next.js web application (detailed documentation)
  • apps/mobile - Expo/React Native mobile application (detailed documentation)
  • packages/store - Shared Redux store used by both platforms
  • packages/utils - Shared utilities and TypeScript types
  • config/ - Shared configuration files

Important

For detailed setup instructions and platform-specific development guides, please refer to the dedicated README files:

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

Quick start commands

# Run web app in development mode
yarn workspace @safe-global/web dev

# Run mobile app in development mode
yarn workspace @safe-global/mobile start

# Run tests for web
yarn workspace @safe-global/web test

# Run Storybook for web
yarn workspace @safe-global/web storybook

Tip

For comprehensive setup instructions, environment variables, testing, and platform-specific workflows, see:

  • Web App README - Environment setup, Cypress E2E tests, Storybook, and more
  • Mobile App README - iOS/Android setup, Maestro E2E tests, Expo configuration, and more

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 dev
  • 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, formatting, and type-checking

  • Run ESLint across all workspaces:
yarn lint
  • Run Prettier to check formatting:
yarn prettier
  • Run type-check for a workspace:
yarn workspace @safe-global/web type-check
yarn workspace @safe-global/mobile type-check

Testing

  • Run unit tests across all workspaces:
yarn test
  • Run E2E tests (web only):
yarn workspace @safe-global/web cypress:open  # Interactive mode
yarn workspace @safe-global/web cypress:run   # Headless mode

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 type-check, lint, prettier, and tests pass before pushing changes.
  • Follow the semantic commit message guidelines.
  • For AI contributors, see AGENTS.md for detailed guidelines.

Tools & configurations

  • Husky: Pre-commit hooks for linting, formatting, and type-checking.
  • ESLint & Prettier: Enforce coding standards and formatting.
  • Jest: Unit testing framework.
  • Cypress: E2E testing for the web app.
  • Storybook: Component documentation and development for the web app.
  • Expo: Mobile app framework for the mobile workspace.
  • Next.js: React framework for the web workspace.
  • Tamagui: UI component library for the mobile app.

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! 🚀