{"id":23494451,"url":"https://github.com/safe-global/safe-wallet-monorepo","last_synced_at":"2026-04-15T13:00:51.443Z","repository":{"id":56790167,"uuid":"481196344","full_name":"safe-global/safe-wallet-monorepo","owner":"safe-global","description":"Safe{Wallet} – smart account wallet","archived":false,"fork":false,"pushed_at":"2026-04-14T10:09:15.000Z","size":224452,"stargazers_count":560,"open_issues_count":91,"forks_count":633,"subscribers_count":21,"default_branch":"dev","last_synced_at":"2026-04-14T11:20:12.900Z","etag":null,"topics":["ethereum","ethersjs","gnosis-safe","multisig","nextjs","react","typescript"],"latest_commit_sha":null,"homepage":"https://app.safe.global","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/safe-global.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-04-13T11:54:07.000Z","updated_at":"2026-04-13T14:48:42.000Z","dependencies_parsed_at":"2023-12-04T08:23:40.004Z","dependency_job_id":"28eb6733-8d42-477f-8ca7-641a389bc5fb","html_url":"https://github.com/safe-global/safe-wallet-monorepo","commit_stats":null,"previous_names":["safe-global/web-core","safe-global/safe-wallet-monorepo"],"tags_count":187,"template":false,"template_full_name":null,"purl":"pkg:github/safe-global/safe-wallet-monorepo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-wallet-monorepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-wallet-monorepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-wallet-monorepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-wallet-monorepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/safe-global","download_url":"https://codeload.github.com/safe-global/safe-wallet-monorepo/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-wallet-monorepo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31842193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T11:29:19.690Z","status":"ssl_error","status_checked_at":"2026-04-15T11:29:19.171Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ethereum","ethersjs","gnosis-safe","multisig","nextjs","react","typescript"],"created_at":"2024-12-25T03:02:46.147Z","updated_at":"2026-04-15T13:00:51.415Z","avatar_url":"https://github.com/safe-global.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","\u003ca name=\"TypeScript\"\u003e\u003c/a\u003eTypeScript"],"sub_categories":[],"readme":"# \u003cimg src=\"https://github.com/user-attachments/assets/b8249113-d515-4c91-a12a-f134813614e8\" height=\"60\" valign=\"middle\" alt=\"Safe{Wallet}\" style=\"background: #fff; padding: 20px; margin: 0 -20px\" /\u003e\n\n# Safe{Wallet} monorepo\n\n🌐 [Safe{Wallet} web app](/apps/web/README.md) ・ 📱 [Safe{Wallet} mobile app](/apps/mobile/README.md)\n\n## Overview\n\nWelcome 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.\n\nThis 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.\n\n### Key components\n\n- **apps/web** - Next.js web application ([detailed documentation](/apps/web/README.md))\n- **apps/mobile** - Expo/React Native mobile application ([detailed documentation](/apps/mobile/README.md))\n- **packages/store** - Shared Redux store used by both platforms\n- **packages/utils** - Shared utilities and TypeScript types\n- **config/** - Shared configuration files\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e For detailed setup instructions and platform-specific development guides, please refer to the dedicated README files:\n\u003e\n\u003e - **[Web App Documentation](/apps/web/README.md)** - Complete guide for the Next.js web application\n\u003e - **[Mobile App Documentation](/apps/mobile/README.md)** - Complete guide for the mobile application, including iOS/Android setup\n\n## Getting started\n\nTo get started, ensure you have the required tools installed and follow these steps:\n\n### Prerequisites\n\n- **Node.js**: Install the latest stable version from [Node.js](https://nodejs.org/).\n- **Yarn**: Use Yarn version 4.5.3 or later\n\nto install it with the latest node version you can simply do\n\n```bash\ncorepack enable\n```\n\nand then just run\n\n```bash\nyarn\n```\n\nThis will install the required version of yarn and resolve all dependencies.\n\n\u003e [!NOTE]\n\u003e\n\u003e 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\n\u003e configured for the current project, download it if needed, and finally run it.\n\n### Initial setup\n\n1. Clone the repository:\n\n```bash\ngit clone \u003crepo-url\u003e\ncd monorepo\n```\n\n2. Install dependencies:\n\n```bash\nyarn install\n```\n\n### Quick start commands\n\n```bash\n# Run web app in development mode\nyarn workspace @safe-global/web dev\n\n# Run mobile app in development mode\nyarn workspace @safe-global/mobile start\n\n# Run tests for web\nyarn workspace @safe-global/web test\n\n# Run Storybook for web\nyarn workspace @safe-global/web storybook\n```\n\n\u003e [!TIP]\n\u003e\n\u003e For comprehensive setup instructions, environment variables, testing, and platform-specific workflows, see:\n\u003e\n\u003e - **[Web App README](/apps/web/README.md)** - Environment setup, Cypress E2E tests, Storybook, and more\n\u003e - **[Mobile App README](/apps/mobile/README.md)** - iOS/Android setup, Maestro E2E tests, Expo configuration, and more\n\n## Monorepo commands\n\nHere are some essential commands to help you navigate the monorepo:\n\n### Workspace management\n\n- **Run a script in a specific workspace:**\n\n```bash\nyarn workspace \u003cworkspace-name\u003e \u003cscript\u003e\n```\n\nExample:\n\n```bash\nyarn workspace @safe-global/web dev\n```\n\n- **Add a dependency to a specific workspace:**\n\n```bash\nyarn workspace \u003cworkspace-name\u003e add \u003cpackage-name\u003e\n```\n\n- **Remove a dependency from a specific workspace:**\n\n```bash\nyarn workspace \u003cworkspace-name\u003e remove \u003cpackage-name\u003e\n```\n\n\u003e [!Note]\n\u003e\n\u003e Yarn treats commands that contain a colon as global commands. For example if you have a\n\u003e command in a workspace that has a colon and there isn't another workspace that has the same command,\n\u003e you can run the command without specifying the workspace name. For example:\n\u003e\n\u003e ```bash\n\u003e yarn cypress:open\n\u003e ```\n\u003e\n\u003e is equivalent to:\n\u003e\n\u003e ```bash\n\u003e yarn workspace @safe-global/web cypress:open\n\u003e ```\n\n### Linting, formatting, and type-checking\n\n- **Run ESLint across all workspaces:**\n\n```bash\nyarn lint\n```\n\n- **Run Prettier to check formatting:**\n\n```bash\nyarn prettier\n```\n\n- **Run type-check for a workspace:**\n\n```bash\nyarn workspace @safe-global/web type-check\nyarn workspace @safe-global/mobile type-check\n```\n\n### Testing\n\n- **Run unit tests across all workspaces:**\n\n```bash\nyarn test\n```\n\n- **Run E2E tests (web only):**\n\n```bash\nyarn workspace @safe-global/web cypress:open  # Interactive mode\nyarn workspace @safe-global/web cypress:run   # Headless mode\n```\n\n## Contributing\n\n### Adding a new workspace\n\n1. Create a new directory under `apps/` or `packages/`.\n2. Add a `package.json` file with the appropriate configuration.\n3. Run:\n\n```bash\nyarn install\n```\n\n### Best practices\n\n- Use Yarn Workspaces commands for managing dependencies.\n- Ensure type-check, lint, prettier, and tests pass before pushing changes.\n- Follow the [semantic commit message guidelines](https://www.conventionalcommits.org/).\n- For AI contributors, see [AGENTS.md](AGENTS.md) for detailed guidelines.\n\n### Tools \u0026 configurations\n\n- **Husky**: Pre-commit hooks for linting, formatting, and type-checking.\n- **ESLint \u0026 Prettier**: Enforce coding standards and formatting.\n- **Jest**: Unit testing framework.\n- **Cypress**: E2E testing for the web app.\n- **Storybook**: Component documentation and development for the web app.\n- **Expo**: Mobile app framework for the `mobile` workspace.\n- **Next.js**: React framework for the `web` workspace.\n- **Tamagui**: UI component library for the mobile app.\n\n## Release process\n\nFor information on releasing the web app, see the [Automated Release Procedure](apps/web/docs/release-procedure-automated.md).\n\n## Useful links\n\n- [Yarn Workspaces Documentation](https://yarnpkg.com/features/workspaces)\n- [Expo Documentation](https://docs.expo.dev/)\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Storybook Documentation](https://storybook.js.org/docs)\n- [Jest Documentation](https://jestjs.io/)\n- [ESLint Documentation](https://eslint.org/)\n- [Prettier Documentation](https://prettier.io/)\n- [Safe Developer Docs](https://docs.safe.global/)\n\n## Ode to the repo\n\n```\nIn ages past when Gnosis laid the founding stone,\nA vault was wrought that no single key could own.\nWhere signatures must gather ere the gate will yield,\nM-of-N doth guard the treasure, sworn and sealed.\n\nNow Yarn doth wind its threads through hall and bower,\nBinding web and mobile in a single tower.\nRedux keeps the ledger, RTK Query rides afar,\nReturning with the fetched gold beneath the evening star.\n\nChain by chain the watchers set their vigil wide,\nAcross th' EVM kingdoms, ever at the Safe's own side.\nStorybook doth chronicle each component's tale,\nAnd Cypress walks the paths where lesser tests would fail.\n\nNo `any` types shall darken these well-guarded lands —\nThat ancient law doth hold by Prettier's own hands.\nFeature flags like waypoints mark what lies ahead,\nAnd lazy loads awaken only where the road doth tread.\n\nLong the name hath wandered — Gnosis once, now Safe it stands,\nYet still the vow endureth, written into typed commands:\nThat what you hold stays guarded, deep beyond all theft or flame,\nFor this the codebase liveth — and security its name.\n```\n\n---\n\nIf you have any questions or run into issues, feel free to open a discussion or contact the maintainers. Happy coding!\n🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsafe-global%2Fsafe-wallet-monorepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsafe-global%2Fsafe-wallet-monorepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsafe-global%2Fsafe-wallet-monorepo/lists"}