* fix(wallet): poll receipts on the node that took the broadcast Chain 1 now proxies to the same `/alchemy` path `nodes.broadcastTransaction` and `nodes.getNonce` use. A node that does not hold the transaction answers receipt lookups with null forever. * fix(wallet): only commit the nonce on a validated broadcast The result was read unvalidated, so a broadcast that produced no transaction still burned its nonce and gapped every later one. Failures now carry the node's own reason instead of the status code. * fix(wallet): reconcile the nonce down against an empty pool Nothing lowered the local counter, so one dropped transaction left every later one signed at a gapped nonce until the browser restarted. When the node's pending and latest counts agree it holds nothing for the account, so a counter above that is lowered once it has stayed ahead for 5 blocks. * feat(wallet): detect and notify dropped transactions A never-mined transaction kept its 30s alarm forever, since only receipt `0x1` and `0x0` settled it. `eth_getTransactionByHash` is now the probe: a null receipt means nothing on its own, but three consecutive polls where the node has no record of the hash settle it as dropped. RPC failures do not count towards that. * fix(wallet): sync pending transactions from the background monitor The page read the list once at mount and wrote its own copy back over the monitor's removals, leaving settled transactions pending. It now watches the key it shares with the monitor. * fix(wallet): keep the earliest mark for a pending count The post-send mark overwrote the block a held one carried, so every send from the address restarted the 5-block window and the counter was never lowered -- each retry only added another gapped transaction. `resolveNonce` now reports when a mark for the pool count is already held.
status-web
Packages for building user interfaces, websites, web applications, dapps, browser extensions, and APIs in the Status ecosystem.
Packages
| Name | Deployments | Builds | Description |
|---|---|---|---|
@status-im/colors |
Auto-generated color palette based on our design system. | ||
@status-im/icons |
Auto-generated icon library based on our design system. | ||
@status-im/components |
Component library built with Radix UI, React Aria, Tailwind CSS. | ||
@status-im/js |
|||
@status-im/wallet |
|||
@status-im/eslint-config |
Shared ESLint configuration for consistent code style across projects. |
Apps
| Name | Deployments | Builds | Description |
|---|---|---|---|
./apps/status.app |
|||
./apps/get.status.app |
Download-focused subset of status.app (home, apps, legal, security). | ||
./apps/status.network |
|||
./apps/hub |
|||
./apps/connector |
Status Desktop Wallet extended to decentralised applications in your browser. | ||
./apps/portfolio |
|||
./apps/wallet |
Easily view and manage your crypto portfolio in real time — Beta crypto wallet and Web3 portfolio tracker in one. | ||
./apps/api |
Prerequisites
Required:
Optional:
- Nix 2.32.x
Stack
- Turborepo: Manages our monorepo and speeds up builds
- TypeScript: Adds type safety to our code
- React: Our main library for building UIs
- Radix UI / React Aria: Provides accessible UI primitives
- Tailwind CSS: Used for styling
- Vite: Our build tool and dev server
- Storybook: For developing and showcasing components
- ESLint: Keeps our code consistent and catches potential issues
- Prettier: Formats our code
Getting Started
Clone the repository:
git clone https://github.com/status-im/status-web.git
cd status-web
git submodule update --init --recursive
2. Initialize and update submodules:
git submodule init
git submodule update
[!TIP] If submodule URLs have changed (e.g., after a repo migration), sync them first:
git submodule sync --recursive git submodule update --init --recursive
[!TIP] To update all submodules to the latest commit from their remote:
git submodule update --remote
-
(Optional) If using Nix, enter development shell:
nix develop -
Install dependencies:
pnpm install -
Build all packages:
pnpm build -
Run tests:
pnpm test -
Start development mode:
pnpm dev
Contributing
To contribute changes via a pull request:
-
Fork the repository on GitHub: open status-im/status-web, click "Fork", and create your fork under your account.
-
Clone your fork and add the official repo as
upstream:git clone https://github.com/YOUR_USERNAME/status-web.git cd status-web git remote add upstream https://github.com/status-im/status-web.git git submodule update --init --recursive -
Create a branch, make your changes, then push to your fork:
git checkout -b your-branch-name # make changes, then: git add . git commit -m "your commit message" git push origin your-branch-name -
Open a pull request on GitHub: go to your fork, click "Compare & pull request" for your branch, and open the PR against
status-im/status-web(base:main).
Note
Keep your fork in sync before starting new work:
git fetch upstream git checkout main git merge upstream/main git push origin main
Storybook
To view and interact with the components, you can run Storybook:
pnpm storybook
This will start the Storybook server, allowing you to browse and test components in isolation.
Sponsors
This project is sponsored by Browserstack.