Hey Polkadot community!
As a contributor of the UX Bounty initiative, I am working on UXB-7: Unified UI Library in order to create a shared, extensible, and developer-friendly UI component library aimed at improving the frontend experience for Polkadot and Substrate-based dApps.
The goal is to create a flexible, open-source library that:
- Avoids reinventing the wheel by building on existing libraries (papi, reactive-dot, dedot, …)
- Supports both Substrate (first) and Polkadot Hub (+EVM-based later)
- Gives developers full control over their UI components
(inspired by shadcn/ui, not only themable but able to control every aspect of the components) - Encourages community alignment around best practices and UI patterns
- Aligns with the UX Bounty goals to improve Polkadot UX through best practices and standards
Problem Overview
Building components for Polkadot frontend applications that can read or mutate chain state is not a simple task as many states must be taken in account of and modeled. For example a button for submitting transactions will have to account for states aligned to the questions:
- Is the a wallet installed and connected to the app? (disabled?)
- Does the user have enough tokens to pay for the fees? (read account balance / estimate fees / disable? / error message)
- Is the websocket / lightclient connection active and connected to the correct chain? (switch network? / info message / await connection)
- Clicking the (enabled) button must interact with the browser extension’s signer to ask for confirming the transaction. (wallet interaction)
- After signing a tx, should it show a loading and a complete state? (monitor events)
- Trigger a notification toast informing about the progress? (interact with other components)
- If errors occur somewhere in the process, the user must be informed (error handling and display)
If not all possible states are managed in a component, UX wil suffer. The above is just one example and many more exist, e.g. amount inputs or address inputs that need to be validated and eventually read chain state. To rebuild all that logic and components for every app from scratch places a huge burden on frontend developers.
Planned Approach
We plan to start small - focusing on proving value with a minimal, core set of components rather than aiming for a full design system from day one - while continuously incorporating community feedback. Inspired by the shadcn/ui philosophy, developer flexibility and modifiability are top priorities: we aim to provide modern DX with full control and components that can be added to the codebase via a cli (e.g. npx polkadot-ui add txbutton
). As a result every aspect of the component can be changed.
Existing libraries should be evaluated and only excluded with clear justification and a plan to replicate relevant functionality. Where possible, we will decouple from hooks libraries, allowing for flexibility in using alternative libraries. We will avoid reinventing components by researching existing solutions, and any deliberate exclusion will be documented alongside an improved alternative.
The goal is to build a small v0 UI component library usable out of the box, with a focus on Substrate support initially while eventually covering both HUB (EVM) and Substrate ecosystems.
This effort will also compile prior UX Bounty work - such as the UX glossary - into reusable React components, helping establish best practices and long-term alignment with the broader builder ecosystem, particularly the HUB direction.
Phase 1 - Foundation, Research, RFC (current)
- collecting community feedback and doing research on existing component libraries in the ecosystem
- reach out to different ecosystem actors and testing existing solutions
Phase 2 - Proof of Concept
- create a minimal react component library that showcases the feasability of the chosen approach that offers a proof of concept
- 1 demo component (the one with most upvotes from here) with cli to add to a react application
If Phase 2 is successfully completed and the community affirms the approach, more components can be developed in
Phase 3 - Component Library
- Creating 5 more components based on figma UX flow
- Documentation
- incorporate feedback from ux researchers, community and apply best practices from UX Bounty (glossary, tooltips)
What We’re Evaluating
Many components in the library will need access to chain state, extension accounts, and transaction capabilities. To enable this, the library will ship with a context and provider layer (based on existing solution where available) that connects to the blockchain via either WebSocket RPCs or light clients like smoldot (papi, dedot), and to browser extensions for account management.
We’re actively reviewing current libraries in the ecosystem in order to find the best possible approach and architecture, including:
- ReactiveDOT
- DOT Connect
- Polkadot UI Kit
- ScaffoldEth
- W3UX
- We’re also looking at wallet integration patterns from projects like Luma Connect, Kzero, and others
- We’re also looking at component and hook libraries from other ecosystems like ScaffoldETH, wagmi, OnchainKit
For a more complete list of component libraries available in Polkadot and beyond, see the notion page: the UXB-7 Inified Ui Library.
How You Can Help
We want your input! Whether you’re a dApp builder, designer, or just UI-curious:
- What components do you need most? (
vote and propose here)
- Which of the above libraries do you currently use, and why?
- What are the pain points when building UIs for Polkadot/Substrate dApps?
- Do you prefer modular approaches or more opinionated component kits?
Your feedback will help shape priorities and design decisions as we head into initial development in Phase 2, if there is positive feedback by the community. The goal is to provide a library that’s not only usable but actually used and that means it needs to reflect the real needs of frontend developers in the Polkadot Ecosystem.
Please reply here, help us prioritize components or reach out if you’re interested in contributing, testing, or just sharing ideas.
Looking forward to hearing your thoughts!
Looping in some ecosystem members who may be interested in this project or have interesting context
@ross @tien @josep @olanod @Remy_Parity @sinzii @voliva @Karim