Install TinyCMS locally
Download TinyCMS, extract the ZIP, and open its tinycms-<version> directory. The frontend and backend are already built. Run the following commands from the extracted release root unless a step specifies another directory.
1. Install dependencies
Check the requirements, then install the release's locked dependencies on the target host:
sh
node --version
pnpm --version
pnpm install --frozen-lockfileKeep the complete extracted release, including the shared package and lockfiles. Native dependencies must match the host where TinyCMS runs.
2. Configure the backend
sh
cp apps/backend/.env.example apps/backend/.envEdit the private .env. At minimum, configure:
dotenv
DB_FILE_NAME=file:./local.db
BETTER_AUTH_SECRET=REPLACE_WITH_RANDOM_SECRET
SETUP_TOKEN=REPLACE_WITH_DIFFERENT_RANDOM_SECRET
BETTER_AUTH_URL=http://localhost:3000
FRONTEND_ORIGIN=http://localhost:3000
NODE_ENV=production
PORT=3000Generate separate secrets with openssl rand -hex 32. Configure working Resend or SMTP credentials as described in configuration; production startup requires email settings.
Review apps/backend/config.json. Relative database and storage paths resolve from the backend working directory. Use an absolute-path configuration selected by APP_CONFIG_FILE when needed. Keep server.serveFrontend enabled to serve the included frontend through the backend.
3. Initialize the database
Stop any backend already using the database. Apply the reviewed migrations included in apps/backend/drizzle. If this directory or its required migration history is missing, obtain a complete matching release from your provider before continuing.
The migration command does not explicitly load .env. Supply the database URL in its process environment:
sh
DB_FILE_NAME=file:./local.db pnpm --filter backend run db.migrateUse your actual database URL if it differs. Relative paths resolve from the backend workspace. On upgrades, stop every writer and take a validated backup before applying the release's migrations.
4. Start TinyCMS
Change into the backend directory and start the prebuilt application with its environment file:
sh
cd apps/backend
node --env-file=.env dist/index.jsCheck http://localhost:3000/health, then open http://localhost:3000/setup and complete administrator setup. Remove SETUP_TOKEN and restart the backend afterward. The backend serves the frontend on the same origin; a separate frontend server is unnecessary.
5. Verify the installation
Sign in, create a content type and draft, upload an image, and verify the intended review/publication flow. Stop the process gracefully when finished.
This local example binds to loopback. Use the production deployment guide for HTTPS, service management, and public access, or the Docker guide to run a supplied container image.