Skip to content

Modular framework
to grow your Flutter App.

Build your product one feature at a time. Keep each feature independent, give it the capabilities it needs through plugins, and compose the pieces into Apps that can keep growing.

Capabilities → features → your App.

FlutterDart
03AppsCompose a product
Customer AppTeam App

Different experiences. The features each App needs.

02FeaturesOwn a slice of your product
CatalogAccountCheckout

Routes, state, UI, and contributions in portable packages.

01PluginsShare capabilities
LoggingTelemetryStorageNetwork

One capability can support many features.

Small boundaries.
Room to grow.

As your product grows, features give teams a place to build independently. Plugins give those features a common foundation. Your App brings them together.

01 / Plugins

One foundation. Many capabilities.

Give every feature the same dependable tools. Your App chooses the implementations; features use the shared contracts. Select system plugins, combine analytics and telemetry providers, or add your own capabilities.

AuthenticationNetworkingStorageNavigationEventsAnalyticsTelemetryEnvironmentDependency injectionFeature flagsLocalizationCustom plugins
Explore plugin capabilities
02 / Features

A product slice you can take anywhere.

Keep routes, state, UI, and contributions together. Build independently, share a feature package, and compose it into another App.

Catalog feature↙   ↘
Customer AppTeam App
Design portable features
03 / Lazy features

Bring features in when they’re needed.

Declare a route boundary and a loader. Vyuh activates the feature on demand, initializes its dependencies, and installs its routes and contributions.

Open a routeLoad featureReady to use

Concurrent requests share activation. Dart deferred imports can split web code when used in your loader.

Understand lazy loading

Start with Flutter.
Add what you need.

Begin with a familiar Flutter screen and a feature descriptor. Add another feature when your product needs it, then connect shared capabilities through plugins.

Follow the complete setup
lib/main.dart
dart
import 'package:go_router/go_router.dart';
import 'package:material_ui/material_ui.dart';
import 'package:vyuh_core/vyuh_core.dart' as vyuh;

void main() {
  vyuh.runApp(
    initialLocation: '/',
    features: () => [
      vyuh.FeatureDescriptor(
        name: 'hello',
        title: 'Hello',
        routes: () => [
          GoRoute(
            path: '/',
            builder: (_, _) =>
                const Scaffold(body: Center(child: Text('Hello, Vyuh.'))),
          ),
        ],
      ),
    ],
  );
}

Find your next step.