Skip to content
ernolf edited this page Oct 29, 2026 · 16 revisions
ncmake

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.

Where to go from here

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-yaml and the rest: what each lint workflow would find; make lint: all of them
  • Releasing — make version, make changelog, make tag
  • Integrity signature — appinfo/signature.json for 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

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

Step by step

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.

Clone this wiki locally