This course is in beta. Only the beginner tracks are written so far, and content may still change. Found a mistake or something unclear? Open an issue on GitHub - feedback is very welcome.
Section 1 of 8

Why ExApps need a different setup

A PHP app runs inside Nextcloud's PHP process — Nextcloud loads it directly. An ExApp runs outside Nextcloud as a separate process — a standalone Python server that Nextcloud communicates with over HTTP.

This means the development environment has two moving parts instead of one:

  1. Nextcloud — the docker-dev instance, same as always
  2. Your ExApp — a FastAPI server running on your machine, outside the container

The bridge between them is AppAPI — a Nextcloud app that acts as the broker. AppAPI knows how to discover, launch, and communicate with external apps. During development you use a special manual_install daemon that tells AppAPI "I'll handle running the app myself" — no Docker builds required on every change.

This architecture is what makes ExApps powerful: your Python process can use any library, any runtime, any AI framework. It's also what makes the setup slightly more involved than PHP.