Repository navigation
Home
The Swiss Army knife for Nextcloud app development: one generic Makefile for building, packaging, deploying, versioning and App Store management of a Nextcloud app.
Everything is derived from the app itself, so there is nothing to configure for a standard app: drop it in, run make, done. The package managers run in throwaway containers, so the host needs neither PHP nor Node.
Tip
TL;DR — Commit the bootstrap stub as your app's GNUmakefile, then make gives you build, packaging, test-deploy, release and App Store targets — all in throwaway containers, so no PHP or Node on your host. make alone prints a colorized, annotated help; make help-<target> explains one target in depth.
New to ncmake? Start with Getting started — the one-line bootstrap stub that turns any app repository into an ncmake app — and read Why ncmake for how it compares to other tooling and which files it makes obsolete.
Developing an app
- Getting started — add ncmake to your app (the bootstrap stub)
-
How ncmake understands your app — what is read from
info.xml,composer.json,package.json,.gitignore, and the container runtime -
Building and packaging —
make build, the allowlist keep model, deploying to a test instance -
Bundle analysis —
make bundle-report: what the browser loads per page;make build-audit: why it is that size - Build tools: webpack, vite, rspack, esbuild and rsbuild compared on App Store apps, and what ncmake reads from each
-
Checkout audit —
make consistency-audit: whether the metadata agrees with itself;make build-verify: whether the committed build output comes from the source;make deps-audit: whether a dependency that ships has a published vulnerability or a licence the app cannot ship;make secrets-audit: whether a key or a token is in what ships, or in the history -
Lint —
make lint-actions-security: whether a workflow of the repository can be attacked;make lint-actions,make lint-shell,make lint-yamland the rest: what each lint workflow would find;make lint: all of them -
Releasing —
make version,make changelog,make tag -
Integrity signature —
appinfo/signature.jsonfor the server's integrity check, signed at tag time and verified in the runner, without the key ever reaching CI -
Translations —
make l10n-init: the repository side of the Nextcloud Transifex sync;make l10n-check: whether it passes the Nextcloud check on every synced branch;make l10n-lint: whether the source strings pass the review of the translation team -
Per-app tuning —
.nextcloudignore,ncmake.mk, the full variable table - Target reference — every target and the requirements
- AI assistant — the skill file that teaches an AI assistant how ncmake works
CI workflows
- Workflows — the workflow manager: sources, status model, the lock file
- Workflow updater — the pull request that keeps workflows current
- GitHub App / GitHub PAT — how the updater authenticates
- Deleting merged branches — the repository setting and its workflow-shipped equivalent
App Store
- App Store — certificate onboarding, signing and the publish flow
Installing an ncmake app (for the people who use your app, not develop it)
-
Installation — release tarball, build from source,
make rsync,make cp
Git
- Git tips — aliases that shorten the branch, push and clean-up round trip and guard against pushing the wrong branch
Reference
- Glossary: every term this wiki uses, with a short meaning and the pages it appears on
The Step by step guide walks through the whole life of an app with ncmake, from the first make to a published release, in order.
© 2026 [ernolf] Raphael Gradenwitz · MIT-licensed · Report an issue
For app developers
- Getting started
- How ncmake understands your app
- Building and packaging
- Bundle analysis
- Build tools
- Checkout audit
- Lint
- Releasing
- Integrity signature
- Translations
- Per-app tuning
- Target reference
- AI assistant
CI workflows
App Store
For app users
Git
Background
Reference