| Proponents / Team | Lunolab(Cris, Brain) |
|---|---|
| Treasury Track | Medium Spender |
| Beneficiary Address | 14pGVuuBxbN9dVNGh2a6dNqAEP7f48z7ks5vH9WNXKakUm7Z |
| Requested Amount | $65,580 USDC ( Retroactive + Milestone-based) |
| Retroactive Amount | $14,880 USDC |
| Milestone-based Amount | $50,700 USDC |
| Funding Period | 6 months (February 2026 – July 2026); |
| Website | https://www.lunolab.xyz/ |
| X | https://x.com/lunolab_xyz |
| Repositories | https://github.com/Luno-lab/LunoKit |
| Docs | https://docs.lunolab.xyz/ |
| Live Demo | https://demo.lunolab.xyz/ |
LunoKit aims to build a customizable UI theme and developer-friendly Web3 account connection infrastructure for the Polkadot ecosystem. Previously, we received a grant from the Web3 Foundation and completed the delivery of all milestones within three months. It unifies wallet connection state management, account abstraction, chain switching, and session recovery, while also providing a rich set of UI components and multi-chain account support, greatly reducing the integration threshold for DApps built on Polkadot SDK chains.
As a frontend development library based on React + TypeScript, LunoKit also provides over 20 Hooks, including account state management, chain switching, connection control, and on-chain data subscription, with support for data caching. Developers can focus on core business logic while LunoKit handles the account module.
LunoKit’s capabilities span three layers:
Connection & account fundamentals: multi-wallet connectivity, unified connection state management, a unified signer interface, and network/chain configuration and switching (covering both Polkadot SDK chains and EVM chains).
Developer interfaces (Hooks): 20+ composable Hooks covering connection control, account state, chain switching, and selected on-chain subscription and caching capabilities.
Ready-to-integrate UI components: components such as Connect Button, Account Panel, and Network Switcher, with support for theme tokens and branding configuration to help ecosystem projects maintain consistent UI.
Its modular architecture is composed of three packages:
@luno-kit/core: connectors, chain configuration, account management, and a unified signer interface
@luno-kit/react: the React integration layer and Hooks
@luno-kit/ui: UI components, theming system, and branding configuration
In any blockchain ecosystem, account connection is foundational entry-layer infrastructure for every dApp: users must connect a wallet and sign before they can stake, swap, participate in governance, and more. The quality of this entry layer directly impacts ecosystem-wide usability, consistency of user experience, and developer onboarding cost.
Today, the ecosystem commonly faces the following practical challenges:
LunoKit is positioned as an open-source, reusable, configurable, and long-term maintainable connection infrastructure layer. It helps ecosystem projects reduce repetitive work, improve consistency, and focus more of their resources on business innovation and the product itself.
In addition, we have set our 2026 roadmap to focus on EVM account support: enabling dApps to integrate Substrate accounts and EVM accounts within a single, unified connection module through LunoKit—reducing the cost of implementing and maintaining two separate sets of connection logic and UI/state systems in multi-account environments. As more Solidity-based dApps emerge within the Polkadot ecosystem, demand for “dual-account / multi-account login” is expected to grow further. This model has already been validated in practice (for example, some dApps within Bifrost and Hydration support both account types). LunoKit aims to standardize and componentize these capabilities to reduce repetitive development effort across the ecosystem.
The list below is not exhaustive; it highlights a few representative production dApp integrations that are actively running.
| Project | Type | Link |
|---|---|---|
| Snowbridge | Bridge between Ethereum and Polkadot | https://app.snowbridge.network/ |
| Potatao | DEX | https://app.potatao.io/ |
| EnergyWeb | Energy Web X app | https://staking.energywebx.com/stake |
| Fintradex | Non-custodial orderbook exchange | https://fintradex.io |
Lunolab is composed of two core members with extensive blockchain development backgrounds. Since joining the ChainX team in 2020, they have been active in the Web3 field, participating in the incubation and development of multiple public chains and application projects.
Cris has over 5 years of Web3 product experience, focusing on cross-chain protocol design and user experience optimization. He led the product design of ChainX, worked as a product manager responsible for OmniBTC’s frontend product design and project management, and from 2023–2025 served as the product lead of BEVM/GEB, overseeing chain-level functionality design and developer tool planning.
Brain is a senior blockchain frontend developer. He joined the ChainX frontend team in 2020, began leading the frontend system development of OmniBTC in 2022 (including OmniSwap and OmniLending), and from 2023–2025 was fully responsible for the frontend architecture of BEVM/GEB, covering explorer, wallet, and developer tools, accumulating deep experience in blockchain frontend development.
| Field | Content |
|---|---|
| Name | Cris Sun |
| Role | Product Lead(PM/UX/DX)& Developer |
| GitHub | https://github.com/Gintma |
| X | https://x.com/crislee51255358 |
| Tg | @Crislee123 |
| Field | Content |
|---|---|
| Name | Brain Wu |
| Role | Lead Engineer |
| GitHub | https://github.com/wbh1328551759 |
| Tg | @wwwwwwbh |
After completing all milestones of the Web3 Foundation Web3 Grant, Lunokit continued ongoing development and maintenance of the product based on real production integration needs and ecosystem feedback, resulting in a set of additional deliverables that have been completed and can be publicly verified. This section is intended to fully list the scope and evidence trail of this “completed work,” making it easy for the community to directly verify the actual output.
| PR | Theme | Key Deliverables (Detailed) | Verification |
|---|---|---|---|
| PR #92 | Network presets expansion + Stability & UX improvements | Fresh parachain presets: Polkadot ( Coretime, Collectives, People), Kusama (AssetHub, People, Coretime), Westend (AssetHub)3 new wallet connectors with full TypeScript support: Enkrypt, Fearless, Mimir; Tree-shakable exports to bundle only what you use (e.g., import chains/connectors as needed);UI/UX polish: chain search bar; Stability fix: resolved auto-connect race condition by adding a grace delay | https://github.com/Luno-lab/LunoKit/pull/92/changes |
| PR #98 | Multi-API compatibility modes + Wallet-only mode + New hooks | Flexible Integration Modes: use LunoKit with Dedot (default), PAPI, or @polkadot/api; Wallet-only mode: adopt LunoKit’s wallet connection without changing the existing blockchain API stack; New hooks: usePapiSigner (PAPI-compatible signers from connected wallets), useEstimatePaymentInfo (fee estimation before sending); Seamless migration: minimize code changes when migrating existing PAPI / @polkadot/api projects to LunoKit |
https://github.com/Luno-lab/LunoKit/pull/98/changes |
| PR #114 + PR #118 + PR #128 | Connection stability + AssetList + Stronger CSS isolation | Improved connection stability: fixed account persistence so the selected account reliably restores after disconnect/reconnect; AssetList component: token & NFT list with comprehensive asset info, powered by Subscan integration Enhanced CSS isolation: improved component style isolation to avoid interfering with host app styles; | https://github.com/Luno-lab/LunoKit/pull/114/changes https://github.com/Luno-lab/LunoKit/pull/118/changes https://github.com/Luno-lab/LunoKit/pull/128/changes |
| PR #136 | UI branding + Hardware wallets + Transaction control + DX improvements | UI customization (appInfo): appInfo prop for Connect Modal to fully customize branding and app information (including Terms/Privacy entry points); Hardware wallet support: OneKey and Ledger connectors;Enhanced transaction control: useSendTransaction adds waitFor (inBlock vs finalized) and rawReceipt for deeper insights; Developer experience: useApi supports generics, cacheMetadata defaults improved, and QueryClientProvider removed from LunoKitProvider for more flexible setups |
https://github.com/Luno-lab/LunoKit/pull/136/changes |
| PR #141 + PR #148 + PR #150 + PR #152 | UI configuration improvements + Theme fix + H160 address compatibility + Modal mounting | Custom wallet list grouping; Theme fix: backdrop-blur parameter;H160 address compatibility: formatting & balance queries for 20-byte addresses; Custom modal mounting nodes for flexible modal integration |
https://github.com/Luno-lab/LunoKit/pull/141/changes https://github.com/Luno-lab/LunoKit/pull/148/changes https://github.com/Luno-lab/LunoKit/pull/150/changes https://github.com/Luno-lab/LunoKit/pull/152/changes |
| New Live Demo | Configure wallet/modal/theme tokens, preview components, and export code | https://github.com/Luno-lab/LiveDemo |
Verification
Public code verification: all PR commit histories above are publicly accessible and reviewable.
Functional verification: Docs / examples / live demo can be used to validate connection flows, component previews, theming configuration, and integration-ready code export.
Ecosystem usage verification: production integrations can be validated via the listed live applications (e.g., Snowbridge, Potatao, etc.).
This section covers only the work listed in the “Work Completed Deliverables” roadmap section (PR-based evidence). To align with OpenGov’s milestone-oriented funding approach and to reduce immediate treasury outflow, we structure the retroactive request as a partial reimbursement by applying a conservative, discounted hourly rate to the already completed and publicly verifiable work.
Budget Summary (Labor)
| Contributor | Role | Hours | Rate (USD/h) | Cost (USD) |
|---|---|---|---|---|
| Brain | Core Development & Engineering | 248 | 30 | 7,440 |
| Cris | Product, UI/UX, Documentation & Integration Support (incl. partial dev) | 248 | 30 | 7,440 |
| Total | - | 496 | - | 14,880 |
The work covered here is already completed and publicly verifiable (PR-based evidence, demos, and integrations).
We are intentionally requesting reimbursement at 30 USD/hour, which is below typical market rates for senior Web3 engineering and product/UI work, to keep the proposal cost-effective and aligned with milestone-oriented funding expectations.
We will deliver LunoKit’s heterogeneous-chain support (Polkadot SDK + EVM) and other content through monthly milestones from February to July 2026. Each milestone has clear scope, measurable success criteria, and public verification anchors (PRs/commits, release tags, docs, examples, and demo updates).
Objective: Introduce a robust type system and configuration layer in @luno-kit/core to support both Substrate and EVM chains under a unified connection model while maintaining strict type safety.
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Multi-track type system design (Core) | Introduce ChainType discriminated unions. Use TypeScript narrowing to strictly separate SubstrateAccount and EvmAccount at compile time. | Critical |
| 2 | Polymorphic connector adapter (Core) | Refactor the BaseConnector contract. Implement EvmConnector as an adapter wrapping Wagmi-standard connectors (MetaMask, WalletConnect). | Critical |
| 3 | Config system upgrade v2 (Core) | Add a createConfig entrypoint in Core. Allow a single config object to define both environments; Internally create Wagmi config, backfill connectors, and initialize state subscriptions. | High |
| 4 | Ledger multi-account selection | Enable account enumeration and selection for Ledger connections,dApps can support selecting among multiple Ledger-derived accounts in a consistent way. | High |
| 5 | Polkadot Vault | Add a Polkadot Vault wallet | High |
Success Criteria
@luno-kit/core can automatically detect configuration and load the corresponding heterogeneous connector instances. createConfig, IDE autocomplete and compile-time inference correctly narrow types based on chainType (Substrate vs EVM). Public Deliverables / Verification Anchors (published upon milestone completion)
Core API type definitions documenting the complete multi-track type system.
createConfig implementation in packages/core (core initialization logic).
A versioned release tag (or release notes) and the PR/commit list covering Milestone 1 scope.
Objective: Establish a bi-directional state synchronization pipeline and upgrade core hooks to support a namespace parameter with compile-time type narrowing and safe behavior across heterogeneous environments.
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Bi-directional state sync pipeline (React) | Use Zustand + Immer as the global store; Subscribe to Wagmi state and map it into LunoKit’s state machine so external changes (e.g., chain switch) reflect in real time. | Critical |
| 2 | Core hooks refactor (I) — Connection & Account | Refactor hooks such as useConnect, useDisconnect, useAccount, useAccounts, useBalance, useStatus, useActiveConnector, etc. Add namespace support and implement overloads so IDE infers Substrate vs EVM return types from namespace string literals. | Critical |
| 3 | Core hooks refactor (II) — Chain & Utils | Refactor useChain, useChainId, useSwitchChain, useClient, useSigner to route providers appropriately in heterogeneous environments. | Critical |
| 4 | Substrate-specific hook compatibility | Update useSs58Format, usePapi, etc. Add context guards so when namespace is EVM, hooks degrade safely (e.g., return null) rather than crashing. | High |
Success Criteria
15+ core hooks support namespace with strict type narrowing, enabling seamless switching between ecosystems.
Substrate-only hooks degrade gracefully in EVM mode (no runtime errors).
Public Deliverables / Verification Anchors (published upon milestone completion)
Updated @luno-kit/react implementation with namespace-aware hooks and overload-based type narrowing.
A versioned release tag (or release notes) and the PR/commit list covering Milestone 2 scope.
Docs updates describing the namespace model and recommended usage patterns.
Objective: Upgrade UI components to handle dual ecosystems cleanly, improve guidance when both Substrate and EVM connectors coexist, and implement reliable activeNamespace restoration behavior.
Design Reference
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Refactor ConnectButton & related components (UI) | Upgrade ConnectButton and ConnectModal with ecosystem-grouped rendering logic to improve detection and user guidance when Substrate and EVM plugins coexist. | Critical |
| 2 | Namespace-triggered interaction design | In ChainModal, switching chain can actively change the current namespace. Add EVM-specific 0x address display style and visual identifiers. | Critical |
| 3 | activeNamespace restoration strategy | On refresh, restore last active namespace first; if restoration fails, fall back to the side with an active connection. | Critical |
| 4 | Theme token enhancements | Extend theming tokens (e.g., link text color and related UI text colors) to improve brand consistency and configurability. | High |
| 5 | Mobile UI refinements | Optimize spacing, touch targets, and modal/list layouts to better match mobile usage patterns. | High |
| 6 | Smooth scroll mask / edge-fade effect for lists | Improve visual clarity when browsing long lists (addresses, wallets, accounts) by adding a subtle scroll mask/edge fade aligned with the design system. | High |
Success Criteria
UI adapts automatically based on activeNamespace, including icons, address format (SS58 vs 0x), and ecosystem visual indicators.
When both ecosystems are available, users can reliably discover, select, and switch between Substrate and EVM wallet contexts without confusion.
After page refresh, dual-session restoration behaves correctly and activeNamespace fallback logic prevents “stuck” states.
The Manage Wallets component matches the linked Figma design and supports the expected dual-ecosystem management flows.
Scrollable lists (wallets/network/addresses) render with a smooth edge-fade/scroll mask effect and maintain performance.
Mobile layouts are optimized (touch-friendly sizing, spacing, and modal behavior) without regressions on desktop.
New theming tokens (including connect text color) are available and reflected in the demo/configuration flows.
Public Deliverables / Verification Anchors (published upon milestone completion)
Updated @luno-kit/ui package implementing heterogeneous-chain adaptations for ConnectButton, ConnectModal, ChainModal, plus the new Manage Wallets component.
Demo updates showcasing dual-ecosystem UI flows (including Manage Wallets) aligned with the Figma design reference.
A versioned release tag (or release notes) and the PR/commit list covering Milestone 3 scope.
Demo updates showcasing: mobile refinements, new theme tokens, scroll mask effect, and Ledger multi-account selection UI (published upon milestone completion).
Objective: Provide a unified transaction and signing interface in React that supports both ecosystems while preserving access to underlying native status/details (Viem vs Dedot).
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Unified transaction/signing facade (React) | Define a unified TransactionStatus enum and map EVM (Viem receipt) and Substrate (Dedot finalized) native states into a single model. | Critical |
| 2 | Implement useSendTransaction (React) | Provide a unified entrypoint that routes internally by namespace. EVM accepts Viem parameters; Substrate accepts Dedot tx objects. Return unified status plus raw underlying data. | Critical |
| 3 | Implement useSignMessage (React) | EVM uses Viem signMessage; Substrate uses signRaw. | High |
| 4 | Ecosystem-aware UI rendering | Upgrade components such as AccountDetailsModal to automatically choose rendering logic based on account type. | Medium |
| 5 | EVM wallet integration | Metamask、Subwallet、Talisman、OKX Web3wallet 、Phantom、Coinbase Wallet、Rabby Wallet | High |
Success Criteria
Developers can send transactions via a unified interface and receive both LunoKit-mapped status and the raw native (Viem/Dedot) status/data.
AccountDetailsModal and related components correctly display heterogeneous addresses without formatting errors.
Users can use any of the supported EVM wallets to send transactions.
Public Deliverables / Verification Anchors (published upon milestone completion)
Unified transaction model/schema with raw-state passthrough.
Updated React hooks (useSendTransaction, useSignMessage) and supporting types.
A versioned release tag (or release notes) and the PR/commit list covering Milestone 4 scope.
Demo/docs updates demonstrating unified transaction/signing usage.
Objective: Add comprehensive automated testing for core paths across Core and React hooks, ensuring stability for connect/switch/transaction flows in both ecosystems.
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Full integration tests for hooks state flow | Test cases for hooks introduced/refactored in Milestone 2, focusing on namespace switching, fallback behavior, and routing correctness. | Critical |
| 2 | Unit tests for polymorphic connectors (Core) | Practical tests for EvmConnector connect/disconnect/switch events and createConfig parsing. | High |
| 3 | Transaction tests | Simulate signature rejection, RPC errors, and lifecycle transitions for useSendTransaction and useSignMessage. | High |
Success Criteria
CI passes for the full test suite; core paths (connect/switch/tx) are covered.
Transaction lifecycle states (signature → confirmation) behave consistently across both ecosystems.
Coverage targets: Core ≥ 90%, React hooks core-path coverage ≥ 80%.
Public Deliverables / Verification Anchors (published upon milestone completion)
Automated test suite source code (unit + integration tests) and CI configuration updates.
A versioned release tag (or release notes) and the PR/commit list covering Milestone 5 scope.
A test results summary (e.g., CI artifact link or published report) demonstrating pass status and coverage metrics.
Objective: Deliver a flagship integrated demo dApp, improve edge-case stability in real browsers, publish complete documentation and migration guides, and ship LunoKit v0.2
| No | Task | Rationale | Priority |
|---|---|---|---|
| 1 | Reference integrated DApp demo | Build example/integrated-dapp demonstrating a full heterogeneous-chain app (assets transfer + interactions across both ecosystems). | High |
| 2 | Edge-environment hardening | Optimize detection priority and stability in real browsers where multiple EVM wallet extensions compete. | Critical |
| 3 | Docs & migration guides | Fully update docs portal: complete API reference, namespace best practices, and smooth upgrade guide from v0.1 to v0.2 | High |
| 4 | Update Live Demo for EVM support | Ensure developers can directly validate and experiment with the new EVM-related capabilities through an official, always-up-to-date public demo. | High |
Success Criteria
A one-command runnable heterogeneous-chain demo site is available, showcasing dual-ecosystem transaction flows.
Official docs cover all new APIs and heterogeneous-chain integration scenarios.
The official Live Demo is updated to support and showcase the EVM-related features introduced in v0.2 .
Public Deliverables / Verification Anchors (published upon milestone completion)
LunoKit v0.2 release across Core, React, and UI packages.
example/integrated-dapp and a new publicly accessible live demo site.
Updated developer documentation and migration guide.
A versioned release tag (or release notes) and the PR/commit list covering Milestone 6 scope.
Team Costs
| Name | Role | Commitment (hours/week) | Monthly Cost | Total for Project Period |
|---|---|---|---|---|
| Brain | Lead Developer | 20 | $4,800 | $28,800 |
| Cris | Project Manager & Developer | 15 | $3,600 | $21,600 |
| Subtotal (Team) | $50,400 |
Operational Costs
| Category | Covers | Total (USD) |
|---|---|---|
| Operational Costs | Notion / Vercel / X Pro | $300 |
Total Requested Funding
| Item | Amount |
|---|---|
| Total Requested Funding | $50,700 USDC |
Milestone Distribution:
While the milestone plan describes the deliverables we commit to for funding and verification, we also
expect to ship additional fixes and features beyond the proposal in response to real developer needs and production integration feedback within the ecosystem. We will keep the community informed and ensure the committed milestone deliverables remain the priority.