App Versioning Requirements
We’ve recently introduced stricter versioning rules for all Frappe applications. These rules apply equally to Marketplace apps and private/custom apps.
The goal is to ensure predictable compatibility, smoother upgrades, and safer dependency resolution across the ecosystem.
What’s changing
All applications public or private must now:
-
Use a
pyproject.tomlfile -
Declare a bounded Frappe dependency in that file
Required: pyproject.toml
Every app must include a pyproject.toml file in it’s root directory.
Within this file, the app must explicitly declare its bounded Frappe dependency under the following section:
[tool.bench.frappe-dependencies]
frappe = ">=16.0.0-dev <17.0.0-dev"
A bounded version specifies both:
-
a lower bound (minimum supported version), and
-
an upper bound (maximum supported version)
In other words, the dependency must clearly state:
“This app works with Frappe versions from X up to (but not including) Y.”
Why this is required?
Bounded versioning helps us:
-
Prevent apps from being installed on incompatible Frappe versions
-
Avoid unexpected breakages during upgrades
This consistency is especially important for the Marketplace, but private apps are held to the same standard to ensure site updates run reliably.