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:
- Nextcloud — the docker-dev instance, same as always
- 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.