Skip to main content

Turnkey organization setup

To start, you must create a Turnkey organization via the Turnkey dashboard. The steps to do so are described in the Account Setup section. For this setup, we will be using Turnkey’s Auth Proxy to handle authentication. We can enable and configure this through the Turnkey dashboard.
1

Enable Auth Proxy

Navigate to the Wallet Kit section in the Turnkey Dashboard and enable the Auth Proxy.Auth Proxy toggle
2

Customize auth methods

You can choose which auth methods to enable and customize various options from this screen. For this quickstart, let’s enable email OTP and passkeys. When you’re done, click Save.Auth Proxy optionsWallet kit options
3

Finish up

Once you’re finished with the auth proxy setup, you can copy the auth proxy config IDAuth Proxy Config idand your organization ID from the dashboard.Organization idThese will be used in the next steps to configure your app.

Installation

You can use turnkey_sdk_flutter in any Flutter application. If you’re starting fresh, create a new Flutter app:
flutter create my_turnkey_app
cd my_turnkey_app
Add the Turnkey Flutter SDK and supporting packages:
flutter pub add turnkey_sdk_flutter provider flutter_inappwebview

Provider

Wrap your app with ChangeNotifierProvider and configure TurnkeyProvider.
lib/main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:turnkey_sdk_flutter/turnkey_sdk_flutter.dart';


final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

void main() async {
    WidgetsFlutterBinding.ensureInitialized();

    // Optional: define some callbacks
    void onSessionSelected(Session session) {
        // Do something when the user logs in, e.g. navigate to home screen
    }

    void onSessionCleared(Session session) {
        // Do something when the user logs out, e.g. navigate to login screen
    }

    void onInitialized(Object? error) {
        // Do something when the SDK is initialized
    }

    final turnkeyProvider = TurnkeyProvider(
        config: TurnkeyConfig(
            authProxyConfigId: "<YOUR_AUTH_PROXY_CONFIG_ID>",   
            organizationId: "<YOUR_ORGANIZATION_ID>",

            // Optional: attach some callbacks
            onSessionSelected: onSessionSelected,
            onSessionCleared: onSessionCleared,
            onInitialized: onInitialized,
        ),
    );

    runApp(
        ChangeNotifierProvider(
            create: (_) => turnkeyProvider,
            child: const MyApp(),
        ),
    );
}

class MyApp extends StatelessWidget {
    const MyApp({super.key});

    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            navigatorKey: navigatorKey,
            title: 'My Turnkey App',
            theme: ThemeData(useMaterial3: true),
            home: const MyApp(), // Replace with your app's screen
        );
    }
}

Optional: Ready state & error surfacing

You can await turnkeyProvider.ready during startup to surface initialization errors to the user:
turnkeyProvider.ready.then((_) {
  debugPrint('Turnkey is ready');
}).catchError((error) {
  debugPrint('Error during Turnkey initialization: $error');
  // Show a snackbar/toast after the current frame
});

Demo app

You can check out a complete demo app that uses Turnkey’s Flutter SDK on GitHub. Feel free to clone and modify it to get started quickly!

Next steps

Ready to start building your app? Check out the Authentication guide to learn how to set up login/signup in your Flutter application.