Skip to content

Quickstart (Self-Host)

Get Deckyard running on your machine. The installer takes one line; the manual path takes a handful of commands.

Deckyard is a self-hosted web app for creating and presenting slide decks. It runs as:

  • A plain Node.js server
  • A vanilla ESM client (no bundler)
  • PostgreSQL for all data, with uploaded media on disk

Either of these is enough; the installer uses whichever it finds.

  • Docker, or
  • Node.js 22 or newer with npm, plus a PostgreSQL database you run yourself

With Docker the database comes along: the compose stack ships its own PostgreSQL. On the Node path Deckyard refuses to start without a database that is both reachable and migrated: it stops with a message naming the connection it tried and what to fix, instead of starting a server that fails on every request (see Database Configuration).

The installer does not install Docker, Node or PostgreSQL for you. If neither Docker nor Node is present it says where to get them and stops.

Terminal window
curl -fsSL https://deckyard.eu/install.sh | bash

This clones the repository, auto-detects Docker or Node, writes a local .env, installs dependencies, applies the database migrations, starts the app and opens your browser at http://localhost:4177. Nothing leaves your machine.

It is safe to re-run: an existing install is updated in place, and an existing .env is left alone.

Optional knobs, all set as environment variables:

VariableEffect
DECKYARD_DIRTarget directory (default: ./deckyard)
DECKYARD_BRANCHBranch to check out (default: main)
DECKYARD_MODEForce docker or node instead of auto-detecting
PORTApp port (default: 4177)

Piping a script into bash deserves a look first. It is served at deckyard.eu/install.sh, and the same file is scripts/install.sh in the repository.

Terminal window
git clone https://github.com/jaapstronks/deckyard.git
cd deckyard
npm install
npm run setup # optional: AI key, auth, port (Enter accepts defaults)
# point DATABASE_URL (or the DATABASE_* variables) in .env at your PostgreSQL
npm run db:migrate # create the schema; part of installing, and again after each update
npm run start

npm run db:migrate is an install step, not something to do after the first start: without it the server refuses to start. It is safe to repeat. Database Configuration has the variables.

Open your browser to: http://localhost:4177

npm run setup writes a .env for you. To edit it by hand, copy .env.example to .env and change what you need.

See Environment Variables for the full configuration reference.

Deckyard is MCP-native, so a shell-capable coding agent can clone it, configure it with your keys, start it and wire itself in over MCP. The setup script takes flags for exactly that:

Terminal window
npm run setup -- --yes --ai=claude --ai-key=… --auth=off