Magic empowers developers to protect their users via an innovative, passwordless authentication flow without the UX compromises that burden traditional OAuth implementations.


This is your entry-point to secure, passwordless authentication for your iOS or Android-based Flutter app.


Add magic_sdk to your pubspec.yaml:

    sdk: flutter
  magic_sdk: ^4.0.0
  magic_ext_oauth: ^0.3.0

Run the following command to install dependencies

$ dart pub get

Create an SDK Instance

In main.dart, instantiate Magic with your publishable key

void main() {
  runApp(const MyApp());

  Magic.instance = Magic("YOUR_PUBLISHABLE_KEY");

Use Stack in the top level and add Magic.instance.relayer to the children of Stack to ensure the best performance

Note: Relayer is required to establish communication between apps and Magic service. Make sure to have it in a stack whenever you need to authenticate or interact with blockchain

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Stack(children: [ // Use Stack here to make sure
            title: 'Magic Demo',
            home: const LoginPage(),
          Magic.instance.relayer // Insert relayer here

Authenticate your first user via OAuth!


var configuration = OAuthConfiguration(provider: OAuthProvider.GITHUB, redirectURI: 'YOUR_APP_SCHEME://');
var result = await magic.oauth.loginWithPopup(configuration);

Additional information

For more detail, please check the Magic Link Flutter doc