Flow Architecture

vein’s configuration management is built on a powerful state management engine called Flow.

The Flow Engine

Flow provides the foundation for real-time state management across your application:

from vein import config  # Built on Flow

# Flow handles the complexity
config.api_key = "secret"  # Real-time updates
config.database.host = "localhost"  # Nested state
config.on_change("api_key", handle_key_change)  # Event system

How Flow Works

Flow manages state through several key components:

  • Real-time Updates: Changes propagate instantly across your app

  • Event System: React to state changes with callbacks

  • Validation: Built-in validation with custom policies

  • Caching: Intelligent caching for performance

  • Sources: Multiple data sources (env vars, files, AWS, etc.)

# Flow handles all this complexity
config.update(from_env("APP_"))
config.update(from_yaml("config.yml"))
config.update(from_appconfig("myapp", "prod"))

Using Flow Directly

Flow is available as a base class for custom state management:

from vein import Flow

# Create custom state management
class UserSession(Flow):
    def __init__(self):
        super().__init__()
        self.user_id = None
        self.permissions = []

# Use it like any Flow-based system
session = UserSession()
session.user_id = "123"
session.on_change("user_id", handle_user_change)

Why Flow?

The Flow abstraction provides several key benefits:

  • Separation of Concerns: State logic is separate from business logic

  • Reusability: Same patterns work for config, sessions, preferences, etc.

  • Consistency: All state management uses the same validation, caching, and event systems

  • Testability: State management can be tested independently

  • Extensibility: Easy to add new state types without changing the core engine

The Config Interface

For now, vein exposes Flow through the familiar Config interface:

from vein import config

# Simple configuration API
config.api_key = "secret"
config.timeout = 30

# But powered by Flow underneath
print(type(config))  # <class 'vein.flow.config.Config'>

Long-term Vision

We’re introducing vein as a configuration management library because:

  • Immediate Value: Configuration is a universal need that developers understand

  • Familiar Patterns: Config interfaces are well-established and intuitive

  • Natural Progression: Introduces Flow concepts through familiar configuration patterns

However, Flow is designed for general state management. In the long run, vein will expand to handle all sorts of state management while maintaining full backwards compatibility with all configuration management from v1.0 onwards.

The goal is to provide a unified state management experience where the same patterns, performance, and reliability you get with configuration apply to any type of state your application needs to manage.