Blog

Embedded Flutter crypto wallets with Turnkey’s SDK

Resources
·
December 19, 2025
·
Bryce Ferguson, Co-Founder & CEO of Turnkey

Flutter is the most widely adopted cross-platform mobile app framework today. Recent surveys indicate that it's used by roughly 46% of app developers, surpassing React Native in both the App Store and Google Play. 

Flutter’s widget model and integrated networking make it well-suited for building responsive, real-time web3 interfaces, which often require complex interaction flows and communication with blockchains. It's particularly effective for applications that need to react quickly to onchain events and user actions.

Still, Flutter developers face a key challenge when adding crypto wallets to their apps. Traditional wallet UX often relies on browser extensions like MetaMask or deep-link-based handoffs between applications. These approaches introduce friction through redirects and fragmented signing flows that pull users out of the app at critical moments.

Embedded wallets address this problem by bringing authentication, key management, and signing directly into the Flutter application, allowing developers to deliver secure, seamless web3 experiences without breaking the mobile user journey.

Why Flutter is a good choice for web3 app development

Flutter is great for web3 development because it combines broad platform reach with a highly expressive UI model. Flutter compiles to native code and renders its own UI, allowing applications to maintain smooth animations and responsive interfaces even when handling frequent network updates. 

Often, web3 apps rely on real-time data such as balances, transaction status, or market activity, and Flutter’s performance characteristics make these updates feel immediate rather than disruptive.

Its widget-driven architecture also maps naturally to the complexity of web3 interfaces. Wallet screens, transaction previews, confirmation dialogs, and activity feeds can all be composed as reusable widgets. This makes it easier to manage complex interaction flows where user intent, onchain data, and signing prompts must stay in-sync.

For Flutter developers building web3 apps, this combination of cross-platform reach, performance, and UI flexibility provides a strong foundation even before introducing wallet infrastructure and signing logic.

Why Flutter web3 apps need to get wallet infrastructure right

For Flutter developers, wallet decisions directly affect application architecture. Every transaction, message signature, or contract interaction depends on how keys are generated, stored, and accessed. These concerns sit beneath the UI layer, but they define the security and reliability of the entire app.

Signing is one of the most sensitive operations in any web3 system. Secure signing requires strict controls around where keys live, how signing requests are validated, and which actions are allowed to proceed.

Wallets must decide not just who can sign, but what they are allowed to sign. Without clear authorization boundaries, apps risk granting overly broad permissions that can be exploited by bugs, compromised sessions, or malicious automation.

Keys must be created securely, protected at rest, and recoverable when users change devices. For mobile apps, this is especially challenging, as local storage environments vary widely and are not designed to safely hold long-lived cryptographic secrets.

Because these responsibilities are foundational, wallet infrastructure should be treated as core backend logic rather than a UI feature. The choices Flutter developers make here shape the security model, user experience, and scalability of their web3 applications.

Traditional wallet UX versus embedded wallets in web3 apps

From a developer perspective, traditional wallet UX complicates application logic. State must be coordinated across app boundaries, signing responses arrive asynchronously through callbacks or deep link handlers, and error handling becomes more difficult. What should be a single-user interaction often turns into a multi-step orchestration problem.

Embedded wallets take a different approach. Instead of relying on external wallet interfaces, wallet functionality is integrated into the application’s architecture, enabling authentication, key management, and signing to be invoked as part of the app’s own execution flow.

Because the wallet is embedded, Flutter developers can design signing flows that feel like a natural extension of the app’s UI. Transaction previews, confirmations, and error states can be rendered using the same widgets and state management patterns as the rest of the application. Users remain in-context from start to finish, which significantly improves completion rates and overall experience.

Embedded wallets also enable tighter integration with application logic. Developers can define exactly when signing is allowed, what actions require approval, and how permissions are scoped. This level of control is difficult to achieve when relying on generic external wallets designed to serve many unrelated applications.

For Flutter web3 apps focused on user experience, reliability, and security, embedded wallets have become the preferred model. They reduce friction for users while giving developers the architectural control needed to build production-ready web3 applications.

Moonshot Statement

When to choose embedded wallets for your Flutter app

Embedded wallets are often the best fit for Flutter apps that prioritize user experience, security, and control. Understanding when to use them helps teams make clearer architectural decisions early in development.

User journey and experience
If your app targets users who are new to crypto or expects frequent interactions, embedded wallets are usually the better option. Keeping authentication, signing, and transaction confirmation inside the app reduces friction and avoids breaking the flow with external redirects or app switching. For consumer-facing mobile apps, this continuity can have a meaningful impact on engagement and completion rates.

Security posture and control
Embedded wallets are a strong choice when your app needs tighter control over signing behavior. They allow developers to define explicit rules around what actions can be signed, when signing is allowed, and how permissions are scoped. This is especially important for apps that involve automation, recurring actions, or high-value transactions, where relying on a generic external wallet would introduce unnecessary risk.

Target audience and ownership model
Your target audience plays a major role in the decision. Power users who already rely on hardware wallets or browser extensions may prefer external wallet support. In contrast, mainstream users often expect the app itself to manage the wallet experience. Embedded wallets work well for apps that want to abstract away wallet complexity while still preserving user ownership and control.

Device and platform support
Flutter apps often run across multiple platforms, including iOS and Android. Embedded wallets help ensure consistent behavior across devices, avoiding platform-specific wallet limitations or inconsistent deep-link handling. This is particularly valuable when supporting mobile-first or cross-platform experiences.

In general, embedded wallets make the most sense when the wallet is a core part of the application rather than an optional add-on. For Flutter developers building production web3 apps, choosing embedded wallets early can simplify architecture, improve security, and deliver a smoother experience for users across devices.

Architecture of embedded wallets in a Flutter app

Embedded wallets live inside the Flutter app itself. Wallet functionality becomes part of the app’s execution model, rather than an external redirect or browser extension.

Flutter UI

  • Wallet onboarding and setup
  • Transaction previews and confirmations
  • Balances and activity history
  • Signing feedback and error states

Wallet flows feel native to the app.

App state and logic

  • Track wallet and session state
  • Prepare and queue transactions
  • Handle retries and observe confirmations
  • Submit signing requests for evaluation

The app proposes actions. It does not enforce signing.

Embedded wallet

  • Secure key storage
  • Transaction and message signing
  • Authorization evaluation
  • Approve or reject signing requests

Scoped signing authority.

Blockchain

  • Submit signed transactions
  • Receive confirmations
  • Update application state
  • Reflect results in the UI

Users never leave the app.

Getting started with embedded wallets using Turnkey’s Flutter SDK

Turnkey provides a first-class Flutter SDK that allows developers to add embedded wallet functionality directly into their applications. Instead of stitching together low-level cryptography, storage, and signing logic, Flutter developers can rely on a structured SDK designed specifically for production wallet infrastructure.

At a high level, getting started follows a familiar Flutter development workflow. You install the SDK, configure your organization and environment, and then integrate wallet functionality into your app’s existing state and UI.

Initial setup and installation

Developers begin by adding the SDK as a dependency and configuring their Turnkey organization credentials. This establishes a secure connection between the app and Turnkey’s wallet infrastructure.

From there, the app can initialize wallet services as part of its startup flow, just like any other backend dependency. Wallet creation and session handling become explicit steps in the application lifecycle rather than external handoffs.

Creating and managing embedded wallets

Once configured, the SDK allows Flutter apps to create and manage embedded wallets programmatically. Wallets are tied to application logic and user sessions rather than browser extensions or external apps.

Typical flows include:

  • Creating a wallet during onboarding
  • Restoring wallet access when a user returns
  • Tracking wallet state as part of app state management

Because wallets are embedded, these flows can be designed to feel native to the app rather than bolted on.

Signing transactions and messages

With an embedded wallet in place, signing becomes a controlled internal operation. The app constructs transactions or messages, sends them to the wallet for signing, and then submits signed payloads to the blockchain.

Common signing use cases include:

  • Sending transactions
  • Approving contract interactions
  • Signing messages for authentication

At no point does the user need to leave the Flutter app or approve actions in an external interface.

Learning from the Turnkey Flutter demo app

To make these concepts concrete, Turnkey provides a fully runnable Flutter demo app in its Dart SDK repository.

This demo app serves as a practical reference for how embedded wallets are implemented in a real Flutter application. Rather than abstract examples, it shows end-to-end flows using actual UI components and wallet interactions.

From the demo, developers can see:

  • How the embedded wallet is initialized and configured
  • How accounts and sessions are created and tracked
  • How signing flows are triggered from UI actions
  • How wallet responses are reflected back into the interface

The app also demonstrates UI patterns for wallet integration, such as transaction previews, confirmation steps, and feedback states. These patterns can be reused or adapted directly in production apps.

From Turnkey’s embedded wallet example to production

Together, the Turnkey Flutter SDK and demo app provide a clear path from setup to real functionality. Developers can start with the official documentation and examples, explore the demo app to understand real flows, and then apply the same patterns to their own applications.

For Flutter developers building web3 apps, this approach reduces the gap between concept and production. Embedded wallets become just another part of the app architecture, rather than a fragile integration point that lives outside the Flutter ecosystem.

Flutter + embedded crypto wallets for modern web3 apps

Flutter has proven itself as a strong foundation for building modern, cross-platform applications, and those strengths translate naturally to web3. Its performance, UI flexibility, and developer ergonomics make it well-suited for apps that need to handle real-time data, complex interaction flows, and continuous network communication.

Embedded wallets complete that picture. By integrating wallet functionality directly into the application flow, developers can avoid the friction of external wallet handoffs while maintaining clear security boundaries. Authentication, signing, and transaction handling become part of the app’s architecture rather than an external dependency that interrupts the user experience.

For Flutter developers, this combination enables a more cohesive product. Wallets are no longer a separate concern bolted onto the app, but a first-class component that can be designed, tested, and evolved alongside the rest of the system. This approach supports smoother onboarding, clearer state management, and more predictable security outcomes.

As web3 applications continue to move toward mobile-first, user-centric experiences, Flutter and Turnkey’s embedded wallets together offer a practical path forward.

Get started for free with Turnkey today. 

Related articles