RELEASE.md
Langflow follows a release-when-ready cadence, with each cycle typically lasting 4–6 weeks depending on QA and stabilization needs.
main fast-moving for everyday work while ensuring stable release builds when features mature.Create an OSS release candidate (RC) branch containing langflow and any associated PyPI packages (e.g. lfx).
During this period:
main.This step usually lasts about a week.
Once OSS QA and bugfixing are complete, create a Desktop release candidate.
main.This step also usually lasts about a week.
After QA and bugfixing are complete for both OSS and Desktop:
The release workflow automatically publishes the following artifacts:
PyPI Packages:
langflow - Main package with all integrationslangflow-base - Core framework without integrationslfx - Lightweight executor CLIlangflow-sdk - SDK for programmatic access (when updated)Docker Images:
langflowai/langflow - Full Langflow imagelangflowai/langflow-backend - Backend-only image (published independently)langflowai/langflow-frontend - Frontend-only image (published independently)langflowai/langflow-ep - Enterprise edition image (published independently)langflowai/langflow-base - Base image without integrationsNote: Backend, frontend, and enterprise images are published separately from the main image and will be built even if the main version already exists on Docker Hub.
| Branch | Purpose | Merge Policy |
|---|---|---|
main | Integration branch. All feature PRs target this by default. | Squash & Merge (linear history) |
release-X.Y.Z | ||
(e.g. release-1.4.3) | Temporary RC branch. Active only for the release cycle. Accepts QA and blocking-bug PRs labeled type:release. | Squash & Merge within the branch. |
Rebased onto main before final merge. |
git checkout main && git pull # Ensure local main is up to date
git checkout -b release-X.Y.Z # Create new release candidate branch
git push -u origin release-X.Y.Z # Push RC branch to remote
release-X.Y.Z.git checkout release-X.Y.Z && git pull # Ensure RC branch is up to date
git tag vX.Y.Z # Create final release tag
git push origin vX.Y.Z # Push tag to remote
git checkout main
git merge --ff-only release-X.Y.Z # Fast-forward main to include RC changes
Squash & Merge everywhere for atomic commits and clean history.
While RC is open, periodically re-sync with main:
git checkout release-X.Y.Z
git fetch origin
git rebase origin/main
This resolves conflicts early while keeping history linear.
Final merge back must be fast-forward only. If not possible, rebase the RC onto main before merging.
MAJOR.MINOR.PATCH.-rc.N, e.g. v1.8.0-rc.1.v prefix (e.g., v1.9.1, not 1.9.1).
v prefix.1.8.3 and v1.8.3) cause GitHub's release notes generation to use the wrong base comparison, resulting in incomplete changelogs.| Role | Responsibility |
|---|---|
| Release Captain (rotates per cycle) | Owns timeline, branch cut, tagging, merge-back. |
| PR Author | Ensures tests pass; flags PR with type:release if needed in RC. |
| CI | Blocks merges on failing tests or missing labels. |
No. Always rebase the RC onto main to preserve linear history.
Not yet — merge-back and cleanup are manual.
Very flexible. QA and stabilization phases can be extended as needed for quality.