v0.1.0 Open Source

Beautiful AI interfaces.
Delivered as source code.

13 Flutter components for AI chat. CLI-installed into your project — no packages, no lock-in. Edit everything.

$ dart pub global activate flai_cli
$ flai init
$ flai add chat_screen
AI Assistant
Claude Sonnet 4
Explain monads in simple terms
Think of a monad as a design pattern. It wraps a value in a context and gives you two operations: one to put a value in, and one to chain transformations that each return a new wrapped value.
+ Message...

Three commands. Full chat UI. Your code.

1

Initialize

flai init scaffolds the core: theme system, data models, and the provider interface. Creates lib/flai/ in your project.

2

Add components

flai add chat_screen installs the component and its dependencies as source files. Not a package — actual .dart files you can read and edit.

3

Ship

Wrap with FlaiTheme, connect an AI provider, and you have a production chat UI. Customize any component — it's your code now.

Your brand, not ours. Four presets, every token customizable.

AI Assistant
Hello!
Hey there!
Light
AI Assistant
Hello!
Hey there!
Dark
AI Assistant
Hello!
Hey there!
iOS
AI Assistant
Hello!
Hey there!
Premium

No black boxes. Generated components use standard Flutter primitives you already know.

lib/flai/components/chat_screen/chat_screen.dart
class FlaiChatScreen extends StatefulWidget {
  final ChatScreenController controller;
  final String? title;
  final String? subtitle;
  final Widget? emptyState;

  // ... your code. Edit anything.

  @override
  Widget build(BuildContext context) {
    final theme = FlaiTheme.of(context);
    return Column(
      children: [
        if (widget.showHeader) _buildHeader(theme),
        Expanded(
          child: ListView.builder(
            itemCount: messages.length,
            itemBuilder: (context, index) {
              return MessageBubble(
                message: messages[index],
              );
            },
          ),
        ),
        FlaiInputBar(onSend: _handleSend),
      ],
    );
  }
}

Traditional packages hide code behind versions. FlAI gives you the source.

Typical package
Can't edit component internals
Breaking changes on update
Opaque dependency tree
Locked to package's design
FlAI
Full source in your project
Update when you want
Zero runtime dependencies
Your brand, your rules

Drop-in implementations. Or write your own — it's one interface.