Requirements
What to install before you run your package, with Docker or without it.
For the Full Stack package
What each package contains
| Package | Apps in the download | Runs on its own |
|---|---|---|
| Full Stack | API and dashboard | Yes, both together |
| Dashboard | Dashboard | Yes, on built-in sample data until you connect the template's API |
| Backend | API | Yes, serving the API only |
A single-app package does not include the other app. The dashboard can use an API you already run, but the API's code is only in the Full Stack and Backend packages.
With Docker
- Docker Desktop on macOS or Windows, or Docker Engine with the Compose plugin on Linux. The full stack starts with one
docker composecommand. - An internet connection for the first build, which downloads the base images and the dependencies.
- Nothing else: Docker brings Node.js, and the database is a SQLite file inside a Docker volume.
With Docker
- Docker Desktop on macOS or Windows, or Docker Engine on Linux. Your app has its own
Dockerfile; Compose is not needed. - An internet connection for the first build, which downloads the base image and the dependencies.
Without Docker
- Node.js 22.9 or newer for the dashboard and the Full Stack: the dashboard's
yarn devandyarn startuse Node's--env-file-if-existsoption, which arrived in 22.9. The API alone needs Node.js 22 or newer. The Docker images run Node.js 22 too. - Yarn 4, through Corepack. Run
corepack enableonce; each app pins Yarn 4.8.1, soyarnpicks the right one. If your Node.js has no Corepack, install it first withnpm install -g corepack. - No global packages.
Database
No database server. The API uses SQLite by default and yarn seed creates the file for you; Docker uses SQLite too. MySQL is supported as a configuration change, not a code change.
Ports
Each app listens on a fixed local port. Make sure nothing else uses them, or, with Docker, move one with DASHBOARD_PORT or API_PORT in a .env next to docker-compose.yml.
| App | Port |
|---|---|
| API | 8000 |
| Dashboard | 3030 |
Port
The dashboard listens on port 3030, or on PORT from its .env. Make sure nothing else uses it.
Port
The API listens on port 8000, or on PORT from its .env. Make sure nothing else uses it.
An API to connect
Nothing is needed to try the dashboard: it runs on its own sample data. To use real data, it needs the template's API running, whose address you set in its .env. The API is sold as its own package.
Optional services
None of these is needed to run Kinora locally. Each is switched on by its keys in back-end/.env, and a key left at its .env.example value counts as not set.
| Service | Without it |
|---|---|
| Cloudflare R2 or another S3-compatible bucket | The demo pictures are served by the dashboard from its own public/assets folder. Uploading a new profile picture, progress photo or attachment answers 400 with "File storage is not configured on this server". |
| A Google Gemini, OpenAI or DeepSeek key | The AI assistant's page says "No AI model is connected". Every other screen works. |
An MCP_API_KEY of your own | Every request to POST /api/mcp, the route a coding agent uses, is refused. |
There is no mail transport and no payment provider in the template: no email is sent, the forgot-password and reset-password pages are the screens only (no reset is sent), and the billing card shows seeded figures.