Kamra is AGPL-3.0 and welcomes contributions — code, country packs, docs, bug
reports. This file covers the mechanics; see README.md for
install/quickstart and docs/ for architecture.
Follow the Quickstart (development) section in the README. In short:
a Frappe bench, bench get-app this repo, bench new-site + install-app,
and npm run dev in frontend/ for the SPA.
develop— the integration branch and the nightly channel. All PRs targetdevelop(it's the default branch). nightly.kamrapms.com and theghcr.io/kamra-pms/kamra:nightlyimage are rebuilt from it every night.main— the stable branch. Only release trains (maintainer merges ofdevelop) and hotfixes land here; the Frappe Cloud Marketplace listing and demo.kamrapms.com track its releases.
See RELEASING.md for the full release process.
- Frontend:
cd frontend && npm run buildmust pass (typecheck + build). - Backend: if you touched Python, run the eval harness locally —
bench --site <site> console, thenfrom kamra.scripts.eval_harness import execute; execute()— and confirm it still reports all checks passing. - CI runs both automatically on every PR; a fresh-install check also verifies a brand-new site installs cleanly with your change.
Please use Conventional Commits:
feat: add occupancy-slab BAR rates
fix: correct GST rounding on split charges
chore: bump frontend deps
BREAKING CHANGE: removes the `Foo` doctype; see CHANGELOG.
Commit messages aren't just style here: release automation (release-please) derives the next version number and the changelog draft from them.
Kamra follows Semantic Versioning:
- MAJOR — breaks an existing install on
bench migrate(a doctype is removed, a whitelisted API endpoint is removed or its contract changes). - MINOR — new features, additive/backward-compatible doctype changes.
- PATCH — fixes with no migration impact.
Releases are automated: merging a release train from develop into main
makes release-please open (or update) a Release PR with the version bump
and the CHANGELOG.md draft compiled from Conventional
Commits; merging that PR tags vX.Y.Z, publishes the GitHub Release and the
ghcr.io/kamra-pms/kamra Docker image, and redeploys demo.kamrapms.com.
The full runbook lives in RELEASING.md.
If your change removes or renames anything a self-hoster might depend on
(a doctype, a whitelisted method, a config key), call it out explicitly under
a ### Removed (⚠️ breaking) heading in the changelog entry — that's what
decides the next version is a MAJOR bump.
Localization lives behind the kamra_localization hook
(kamra/localization/); India ships as the reference pack. A new country
pack implements the same interface (tax calculation, invoice context, locale)
without touching the core. See kamra/localization/india.py for the shape.
Be respectful, assume good faith, keep discussion technical. Report abuse to hello@kamrapms.com.