This page documents the service layer of the Langflow backend: the set of long-lived singleton services that underpin the application, how they are registered, initialized, and torn down, and the dependency injection mechanism used to access them from API endpoints and other modules.
For the configuration values that services read at startup, see Backend Settings Service. For the database schema and ORM models that services operate on, see Database Layer. For how setup_app() and the lifespan hook integrate with this layer, see Application Lifecycle.
All application-level singletons are managed through a central service registry. Services are identified by values in the ServiceType enum (langflow.services.schema.ServiceType) and retrieved via helper functions defined in langflow.services.deps.
This pattern means:
Depends(get_db_service) etc.; non-FastAPI code calls the same functions directly.Core modules:
| Module | Role |
|---|---|
langflow.services.schema | ServiceType enum — the canonical name for every service src/backend/base/langflow/services/schema.py52 |
lfx.services.manager | ServiceManager class — manages the lifecycle and registration of services src/lfx/src/lfx/services/manager.py10-15 |
langflow.services.deps | get_service(), get_db_service(), get_auth_service(), get_variable_service(), etc. src/backend/base/langflow/services/deps.py45-50 |
langflow.services.utils | initialize_services(), initialize_settings_service(), teardown_services() src/backend/base/langflow/services/utils.py132-140 |
Sources: src/backend/base/langflow/services/utils.py132-140 src/backend/base/langflow/services/deps.py45-52 src/backend/base/langflow/services/schema.py52 src/lfx/src/lfx/services/manager.py10-15
Services registered at startup (managed via ServiceManager):
| Service | ServiceType name | Primary file | Purpose |
|---|---|---|---|
| Settings | SETTINGS_SERVICE | lfx.services.settings | Pydantic settings model; loaded from env/yaml before all others src/lfx/src/lfx/services/settings/base.py89-104 |
| Database | DATABASE_SERVICE | langflow.services.database.service.DatabaseService | Async SQLAlchemy engine, session factory, Alembic migrations src/backend/base/langflow/services/database/service.py90-126 |
| Auth | AUTH_SERVICE | langflow.services.auth | JWT signing, password hashing, API key validation src/backend/base/langflow/services/deps.py52 |
| Cache | CACHE_SERVICE | langflow.services.cache | In-process or external async cache for flows and components src/backend/base/langflow/services/cache/service.py22-38 |
| Storage | STORAGE_SERVICE | langflow.services.storage.service.StorageService | Local or S3-backed file storage src/backend/base/langflow/initial_setup/setup.py54 |
| Variable | VARIABLE_SERVICE | langflow.services.variable.service.DatabaseVariableService | Global variable (credential) store per user src/backend/base/langflow/services/variable/service.py24-25 |
| Telemetry | TELEMETRY_SERVICE | langflow.services.telemetry.opentelemetry.OpenTelemetry | OpenTelemetry metrics (Prometheus) and background telemetry src/backend/base/langflow/services/telemetry/opentelemetry.py108-115 |
| Event Manager | EVENT_MANAGER | langflow.services.event_manager.WebhookEventManager | Manages webhooks and internal event propagation src/backend/tests/unit/test_webhook.py7 |
Sources: src/backend/base/langflow/services/utils.py132-165 src/backend/base/langflow/services/variable/service.py24-25 src/backend/base/langflow/services/telemetry/opentelemetry.py108-115 src/lfx/src/lfx/services/settings/base.py89-104
Title: Service initialization flow inside get_lifespan and the startup lifespan context
The key ordering constraint is that initialize_settings_service() is called before the lifespan context is entered. This ensures get_settings_service() is available for early configuration src/backend/base/langflow/main.py151-152
Sources: src/backend/base/langflow/main.py150-176 src/backend/base/langflow/services/utils.py132-165 src/backend/base/langflow/services/cache/factory.py15-38
Title: Mapping service getters to backend code entities
Sources: src/backend/base/langflow/services/deps.py45-56 src/backend/base/langflow/services/variable/service.py24-25 src/backend/base/langflow/services/cache/service.py22
CacheService — DetailedThe Cache Service is initialized via CacheServiceFactory src/backend/base/langflow/services/cache/factory.py15-17 It supports multiple backends based on settings.cache_type src/backend/base/langflow/services/cache/factory.py24-38
| Backend | Class | Characteristics |
|---|---|---|
memory | ThreadingInMemoryCache | Thread-safe LRU using threading.RLock and OrderedDict src/backend/base/langflow/services/cache/service.py22-56 |
redis | RedisCache | External storage using Redis, supporting expiration src/backend/base/langflow/services/cache/service.py178-199 |
async | AsyncInMemoryCache | Non-blocking in-memory cache for async contexts src/backend/base/langflow/services/cache/factory.py36-37 |
The cache uses pickle or dill for serialization to mimic external store behavior even when running in-memory src/backend/base/langflow/services/cache/service.py78
Sources: src/backend/base/langflow/services/cache/service.py22-199 src/backend/base/langflow/services/cache/factory.py15-38
VariableService — DetailedThe VariableService manages user-defined variables and credentials. It has two primary implementations: DatabaseVariableService (SQL-backed) and KubernetesSecretService (K8s-backed) src/backend/base/langflow/services/variable/service.py24 src/backend/base/langflow/services/variable/kubernetes.py25
OPENAI_API_KEY) into the database if store_environment_variables is enabled src/backend/base/langflow/services/variable/service.py28-32CREDENTIAL_TYPE are encrypted using encrypt_api_key src/backend/base/langflow/services/variable/kubernetes.py168validate_model_provider_key to verify the key works before saving src/backend/base/langflow/api/v1/variable.py130-132GENERIC_TYPE (like model lists) are stored as plaintext and are not encrypted src/backend/tests/unit/services/variable/test_service.py183-192Sources: src/backend/base/langflow/services/variable/service.py24-140 src/backend/base/langflow/services/variable/kubernetes.py25-171 src/backend/base/langflow/api/v1/variable.py102-143
OpenTelemetry — Telemetry and MetricsThe telemetry service uses a thread-safe singleton pattern to manage OpenTelemetry metrics src/backend/base/langflow/services/telemetry/opentelemetry.py108-112
PrometheusMetricReader to export metrics src/backend/base/langflow/services/telemetry/opentelemetry.py8COUNTER, OBSERVABLE_GAUGE, HISTOGRAM, and UP_DOWN_COUNTER src/backend/base/langflow/services/telemetry/opentelemetry.py27-31file_uploads (gauge) and num_files_uploaded (counter) src/backend/base/langflow/services/telemetry/opentelemetry.py129-142Sources: src/backend/base/langflow/services/telemetry/opentelemetry.py1-180
The Settings class is a composed Pydantic model that aggregates settings from multiple groups (Database, Cache, Security, etc.) src/lfx/src/lfx/services/settings/base.py89-104
LANGFLOW_ src/lfx/src/lfx/services/settings/base.py111update_from_yaml src/lfx/src/lfx/services/settings/base.py113-116update_settings, handling list-based environment variables (comma-separated) src/lfx/src/lfx/services/settings/base.py118-138