{"id":22072542,"url":"https://github.com/broxus/sparx_wallet_flutter","last_synced_at":"2026-04-20T21:01:35.577Z","repository":{"id":152452681,"uuid":"616918810","full_name":"broxus/sparx_wallet_flutter","owner":"broxus","description":"SparX Wallet mobile app","archived":false,"fork":false,"pushed_at":"2026-04-16T12:57:18.000Z","size":78943,"stargazers_count":32,"open_issues_count":3,"forks_count":13,"subscribers_count":7,"default_branch":"dev","last_synced_at":"2026-04-16T14:34:38.973Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Dart","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/broxus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":null,"dco":null,"cla":null}},"created_at":"2023-03-21T10:54:56.000Z","updated_at":"2026-04-15T07:28:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"d95d3e37-2ec4-4c9f-b959-b1b1260e0eee","html_url":"https://github.com/broxus/sparx_wallet_flutter","commit_stats":null,"previous_names":["broxus/sparx_wallet_flutter","broxus/ever_wallet_flutter_new"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/broxus/sparx_wallet_flutter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fsparx_wallet_flutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fsparx_wallet_flutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fsparx_wallet_flutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fsparx_wallet_flutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/broxus","download_url":"https://codeload.github.com/broxus/sparx_wallet_flutter/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fsparx_wallet_flutter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32065584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2024-11-30T21:13:37.807Z","updated_at":"2026-04-20T21:01:35.539Z","avatar_url":"https://github.com/broxus.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SparX Wallet Flutter\n\n[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]\n[![app](https://github.com/broxus/ever_wallet_flutter_new/actions/workflows/main.yaml/badge.svg)](https://github.com/broxus/ever_wallet_flutter_new/actions/workflows/main.yaml)\n\n## Project Description\n\nSparX Wallet is your universal tool for managing crypto assets across TVM networks such as TON and others. With the app, you can easily manage your seed phrases, private and public keys, as well as your wallets.\n\nWith the wallet you can:\n⁃ Import existing keys or create new ones.\n⁃ Create and use multisignature wallet.\n⁃ Manage the permissions you provide to dApps (DEXes, bridges, etc.).\n⁃ Protect your data with encrypted local key storage.\n\nContact us: \u003chttps://broxus.com/\u003e\n\nTelegram support chat: \u003chttps://t.me/broxus_chat\u003e\n\n## Project Architecture\n\nThe application uses a hybrid architecture:\n\n- **Elementary MVVM** for new features (recommended approach)\n- **BLoC pattern** for legacy code\n\nFor detailed architecture information, see our documentation:\n\n### Core Architecture \u0026 Development\n\n- **[Architecture](./docs/architecture.md)** - Clean architecture principles, Elementary MVVM pattern, data/domain/presentation layers, and component design patterns\n- **[Project Structure](./docs/project_structure.md)** - High-level codebase organization, directory structure, feature patterns (Elementary vs. BLoC), and module hierarchy\n- **[Type-safe Navigation](./docs/type_safe_navigation.md)** - Compass navigation system with route data classes, guards, and type-safe routing patterns\n- **[Theme System](./docs/theme_system.md)** - Comprehensive theming system, design tokens, color palette, typography, component library, and styling best practices\n- **[Testing Guide](./docs/testing.md)** - Testing strategies, unit/widget/integration tests, mocking patterns, and testing Elementary architecture\n\n### Development Process \u0026 Workflow\n\n- **[Localization](./docs/localization.md)** - Internationalization setup, adding new strings/languages, and translation workflow using easy_localization\n- **[Secret Management](./docs/secret_management.md)** - Handling encrypted secrets, certificates, provisioning profiles, and CI/CD credential management\n\n### Development Process Documentation\n\nThe `docs/process/` directory contains detailed workflow documentation:\n\n- **[README](./docs/process/README.md)** - High-level overview of development workflow, branch strategy, and automated processes\n- **[Git Workflow](./docs/process/git_workflow.md)** - Branching strategy, naming conventions, merge strategies, and Git best practices\n- **[Task Workflow](./docs/process/task_workflow.md)** - YouTrack integration, status transitions, PR templates, and QA collaboration\n- **[Release Process](./docs/process/release_process.md)** - Release preparation, deployment procedures, GitHub Actions usage, and store deployment\n- **[Conventional Commits](./docs/process/conventional_commits.md)** - Commit message format and standards for semantic versioning\n\n---\n\n## Getting Started 🚀\n\nInstall melos:\n\n```sh\ndart pub global activate melos\n```\n\nUsing [melos](https://melos.invertase.dev/) makes it very easy to work with the project, so enjoy.\n\nBootstrap packages recursively:\n\n```sh\nmelos bs\n```\n\n## Codegen 🦾\n\nThis thing will run all code generators for all packages:\n\n```\nmelos run codegen\n```\n\n## Codegen: localization 🌐\n\nThis thing will run localization code generator for all packages:\n\n```\nmelos run codegen:locale\n```\n\n## Code format checking and analyzer 🦠\n\n```\nmelos run check-format\nmelos run analyze\n```\n\n## Clean up 🧹\n\nTo clean up all packages just run:\n\n```\nmelos clean\n```\n\n## Running Tests 🧪\n\nTo run all unit and widget tests use the following command:\n\n```sh\nmelos test\n```\n\nAlso you can run dart, flutter and integration tests separately:\n\n```sh\nmelos test:dart\nmelos test:flutter\nmelos test:integration\n```\n\n## Pre-commit preparation 🦠🧪🤏\n\nTo run code format check, analyzer and all tests use the following command:\n\n```sh\nmelos check-all\n```\n\n## Build storybook 📚\n\nTo build storybook:\n\n```sh\nmelos build:storybook\n```\n\n## Flavors 👃\n\nThis project contains 3 flavors:\n\n- development\n- staging\n- production\n\nTo run the desired flavor either use the launch configuration in VSCode/Android Studio or use the following commands:\n\n```sh\n# Development\n$ flutter run --flavor development --target lib/main_development.dart\n\n# Staging\n$ flutter run --flavor staging --target lib/main_staging.dart\n\n# Production\n$ flutter run --flavor production --target lib/main_production.dart\n```\n\n_\\*App works on iOS and Android. It should run on macOS, Linux and Windows, but we have no tests nor UI kit for desktop platforms._\n\n## Versioning the app 🔢\n\n### App version #️⃣\n\nApp version is defined in `pubspec.yaml` file. To bump the version use the following command:\n\n```sh\n# For development releases:\n$ melos version -a --yes --prerelease\n\n# For production releases:\n$ melos version -a --yes --graduate\n```\n\nYou can use version workflow in GitHub actions to bump the version automatically. This workflow will create a new branch and PR (because push to main is prohibited) with the new version. Don't forget to merge the PR to main! Note: you should use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) to make it work.\n\n### App build number #️⃣\n\nApp build number is defined in `pubspec.yaml` file. However, there is a `tools/get_build_number.dart` tool that generates the build number by incrementing it transactionally in Firebase Realtime Database. So, you don't need to worry about the build number, it's always unique and increases monotonously. Every time you build the app, the build number will be incremented.\n\n## Deploy 🚀\n\nWe prefer to deploy the app using GitHub Actions, but you can also deploy it from your local machine.\n\nAll deployment scripts are gathering changelog from git commits and adding it to the release notes. Note: google play limits the release notes, so don't be surprised that it is simplified and shortened.\n\n### Deploy using GitHub Actions\n\nWe already have a workflow for deploying main app to Firebase App Distribution, TestFlight and Google Play. It's called `Deploy app`.\n\nDeployment to fab is triggered when the `test` branch is updated, or when manually launched from any branch except main.\nDeployment to store is triggered when manually launched from the `main` branch.\n\nDeployment to FAD is triggered when the `dev` branch is updated.  \n\nManually running the deploy `melos run deploy_fad` from any branch **except** `main`.  \nRunning `melos run deploy_ios` deploys iOS to FAD.\nRunning `melos run deploy_android` deploys Android to FAD.\n\nDeployment to store is triggered when manually launched from the `main` branch.\n\n#### Available options for deploying in workflow\n\n- **ios_fad** - launches iOS deploy to FAD.\n- **ios_store** - launches iOS deploy to Test Flight.  \n- **android_fad** - launches Android deploy to FAD.  \n- **android_store** - launches Android deploy to Google Play.\n- **fad** - launches iOS and Android deploy to FAD.  \n- **store** - launches iOS and Android deploy to Test Flight and Google Play.  \n\nWe also have a workflow for deploying storybook to GitHub Pages. It's called `storybook-gh-pages-deploy` and it's triggered by pushing to the main branch or manually from any branch.\n\n### Deploy from local machine\n\nFor deployment from a local machine, melos is used.\n\n- **build_android_store** - build Android `aab` from any branch\n- **deploy_fad_ios** - build and send iOS `ipa` from any branch\n- **deploy_fad_android** - build and send Android `apk` from any branch\n- **deploy_fad** - build and send Android `apk` and iOS `ipa` from any branch\n- **deploy_store** - build and send Android `aab` and iOS `ipa` from the main branch\n\nThe `melos deploy_store*` commands only work from the `main` branch, so as not to accidentally upload unnecessary code to production.  \n\nThe `melos build_*` commands work from any branch - in case of manual build.  \nUnlike `deploy_store*` commands, randomly running `build_*` will only build aab and/or ipa locally and will not push anything extra or untested to the store.\n\n```sh\n# To deploy to Firebase App Distribution just run the following command:\n$ melos build:deploy_fad\n\n# To deploy to TestFlight and Google Play closed testing just run the following command:\n$ melos build:deploy_store\n```\n\nEach of these commands will increment the build number before building the app.\n\n**Warning: To use Sentry, don't forget to pass the dsn via dart-define.**\n\nExample:\n\n```markdown\nmelos build:deploy_fad -- --dart-define=SENTRY_DSN=\"your_dsn\"\n```\n\n## Coverage 📊\n\nTo view the generated coverage report you can use [lcov](https://github.com/linux-test-project/lcov).\n\n```sh\n# Generate Coverage Report\n$ genhtml coverage/lcov.info -o coverage/\n\n# Open Coverage Report\n$ open coverage/index.html\n```\n\n## Crash analytics\n\n[Sentry](https://sentry.io) is used to intercept global errors and crash analytics.\n\nSentry does not run in the development build type.\n\nDsn is passed through dart-define using the SENTRY_DSN environment variable.\n\nExamples:\n\n```markdown\nmelos build:deploy_fad -- --dart-define=SENTRY_DSN=\"your_dsn\"\n```\n\n```markdown\nflutter run --dart-define=SENTRY_DSN=\"your_sentry_dsn_value\"\n```\n\n[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg\n[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroxus%2Fsparx_wallet_flutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbroxus%2Fsparx_wallet_flutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroxus%2Fsparx_wallet_flutter/lists"}