This page describes the bundled starter project flows shipped with Langflow: what they are, where they live on disk, how they are loaded into the database during application startup, and how they are kept in sync with the latest component versions. For information about the UI that presents these flows to users, see Flow Management UI. For a deeper look at the flow patterns they demonstrate, see Flow Patterns and Examples.
Starter projects are pre-built flow definitions bundled with the langflow-base package. Each is stored as a JSON file on disk. At application startup, the backend reads these files, updates each node's component template to the latest installed version, and upserts the resulting flows into a dedicated database folder. Users interact with them through the Templates Modal in the frontend.
The directory containing starter project JSON files is:
src/backend/base/langflow/initial_setup/starter_projects/
The setup logic is in:
src/backend/base/langflow/initial_setup/setup.py
The table below lists every JSON file present in the starter_projects/ directory, along with its primary pattern and the key component types used.
| File | Pattern | Key Component Types |
|---|---|---|
Simple Agent.json | Single agent | Agent, ChatInput, ChatOutput |
Research Agent.json | Agent + search | Agent, Prompt, ChatInput, ChatOutput, search tool |
Travel Planning Agents.json | Multi-agent | Multiple Agent, SearchComponent, ChatInput, ChatOutput |
News Aggregator.json | Agent + file output | Agent, AgentQL, ChatInput, ChatOutput, SaveToFile |
Market Research.json | Agent + parser | Agent, TavilySearchComponent, ParserComponent, ChatInput, ChatOutput |
Vector Store RAG.json | RAG pipeline | File, SplitText, AstraDB (×2), Prompt, LanguageModelComponent, ChatInput, ChatOutput |
Document Q&A.json | RAG Q&A | File, vector store, Prompt, LanguageModelComponent, ChatInput, ChatOutput |
Memory Chatbot.json | Stateful chatbot | ChatInput, ChatOutput, memory component, LanguageModelComponent |
Blog Writer.json | Content generation | TextInput, Prompt, LanguageModelComponent, ChatOutput |
Instagram Copywriter.json | Content generation | TextInput, Prompt, LanguageModelComponent, ChatOutput |
Portfolio Website Code Generator.json | Code generation | parser, Prompt, LanguageModelComponent, ChatOutput |
Youtube Analysis.json | Media analysis | YouTube loader, Prompt, LanguageModelComponent, ChatOutput |
Nvidia Remix.json | Model demo | ChatInput, NVIDIA model, ChatOutput |
Sources: src/backend/base/langflow/initial_setup/starter_projects/Simple Agent.json src/backend/base/langflow/initial_setup/starter_projects/Research Agent.json src/backend/base/langflow/initial_setup/starter_projects/Travel Planning Agents.json src/backend/base/langflow/initial_setup/starter_projects/News Aggregator.json src/backend/base/langflow/initial_setup/starter_projects/Market Research.json src/backend/base/langflow/initial_setup/starter_projects/Vector Store RAG.json src/backend/base/langflow/initial_setup/starter_projects/Document Q&A.json src/backend/base/langflow/initial_setup/starter_projects/Memory Chatbot.json src/backend/base/langflow/initial_setup/starter_projects/Blog Writer.json src/backend/base/langflow/initial_setup/starter_projects/Instagram Copywriter.json src/backend/base/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json src/backend/base/langflow/initial_setup/starter_projects/Youtube Analysis.json src/backend/base/langflow/initial_setup/starter_projects/Nvidia Remix.json
Each JSON file serializes a complete ReactFlow graph with a data object containing:
nodes — Array of node objects. Each node carries a data.node dict that includes the component template (field definitions and current values) and outputs array.edges — Array of edge objects. Each edge includes sourceHandle and targetHandle dicts that encode the connected component type, port name, and accepted types.viewport — Saved canvas position.Nodes reference component types by the data.type field (e.g., "AstraDB", "Agent", "ChatInput"), which must match keys in the global component registry at load time.
Sources: src/backend/base/langflow/initial_setup/starter_projects/Vector Store RAG.json1-50
Figure 1: Starter project loading during application startup
Sources: src/backend/base/langflow/main.py32-38 src/backend/base/langflow/main.py147-200 src/backend/base/langflow/initial_setup/setup.py1-60
create_or_update_starter_projects is imported from langflow.initial_setup.setup and called during the FastAPI lifespan context manager defined in get_lifespan in main.py.
src/backend/base/langflow/main.py32-39
Starter projects are stored in the database under a dedicated Folder row identified by STARTER_FOLDER_NAME, defined in langflow.initial_setup.constants. The ASSISTANT_FOLDER_NAME constant identifies a second dedicated folder used for assistant-style flows.
langflow.initial_setup.constants
STARTER_FOLDER_NAME — folder label for starter projects
STARTER_FOLDER_DESCRIPTION — description text for that folder
ASSISTANT_FOLDER_NAME — folder label for assistant flows
ASSISTANT_FOLDER_DESCRIPTION
The Folder and Flow ORM models from langflow.services.database.models store this data persistently. On each startup, flows are created if absent or updated if the stored version is stale.
Sources: src/backend/base/langflow/initial_setup/setup.py37-56 src/backend/base/langflow/services/database/service.py29-30
Component implementations change as the package is updated. If a starter project stored in the database still references an old component code string, it would silently run stale logic. The update_projects_components_with_latest_component_versions function resolves this by patching each node's stored template with the current installed component definition.
Figure 2: update_projects_components_with_latest_component_versions data flow
Sources: src/backend/base/langflow/initial_setup/setup.py63-135
template.code is replaced for every matched node type. This ensures the latest Python implementation is used.SKIPPED_COMPONENTS: Certain component types listed in lfx.base.constants.SKIPPED_COMPONENTS preserve their stored template values. These are components where dynamic user-configured values need to survive the update (e.g., pre-filled prompts).tool_mode, or whose key is Agent, LanguageModelComponent, or TypeConverterComponent, skip output list replacement. This preserves their tool-mode output wiring.Prompt node's _type changes, only new fields are added incrementally; existing values are not overwritten.hash_history stripping: The function removes the metadata.hash_history key from components before embedding them into flows. This field is internal to the component registry (component_index.json) and should not appear in saved flows.Sources: src/backend/base/langflow/initial_setup/setup.py63-135
Figure 3: Code entities involved in the starter project system
Sources: src/backend/base/langflow/main.py32-38 src/backend/base/langflow/initial_setup/setup.py1-60 src/backend/base/langflow/initial_setup/setup.py63-90
The frontend presents starter projects through the Templates Modal (TemplatesModal component) accessible from the main flow management page when a user creates a new flow. The modal fetches available flows from the starter folder via the flows REST API endpoint. Users select a template, and the frontend clones that flow's graph into a new user-owned flow.
For details on the Templates Modal implementation, see Flow Management UI.
A dedicated test module validates all starter project files:
src/backend/tests/unit/template/test_starter_projects.py
The Makefile exposes a convenience target:
These tests verify that:
update_projects_components_with_latest_component_versions function can process each file without errors.Sources: Makefile204-207
To add a new starter project:
src/backend/base/langflow/initial_setup/starter_projects/.create_or_update_starter_projects and insert it into the starter folder.test_starter_projects.py to ensure the flow validates correctly against the component registry.No code changes are required outside of these steps. The loading mechanism discovers all *.json files in the starter_projects/ directory automatically.
Sources: src/backend/base/langflow/initial_setup/setup.py58-60
Refresh this wiki
This wiki was recently refreshed. Please wait 3 days to refresh again.