---
title: "Deploy Jotty"
description: "Self-hosted checklists and markdown notes with encryption and SSO"
category: "Other"
url: https://railway.com/deploy/jotty
---

# Deploy Jotty

Self-hosted checklists and markdown notes with encryption and SSO

**[Deploy Jotty on Railway](https://railway.com/template/jotty)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/jotty/manifest.json

- **Creator:** Auromations
- **Category:** Other

## Template content

### jotty https://raw.githubusercontent.com/fccview/jotty/main/public/app-icons/android-chrome-512x512.png

- **Image:** ghcr.io/fccview/jotty:1.27.0
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host Jotty on Railway

Jotty (jotty.page) is a lightweight, self-hosted app for personal checklists and markdown notes. It stores everything as plain files on your own disk, supports kanban checklists, note encryption, sharing, MFA, OIDC single sign-on and a REST API, and installs as a PWA on phones.

## About Hosting Jotty

Jotty is a single Next.js service that keeps all data as JSON and markdown files under one directory. This template runs the official `ghcr.io/fccview/jotty:1.27.0` image with a persistent Railway volume mounted at `/app/data`, a health check on `/api/health`, and the HTTPS session mode already wired to your Railway domain. There is no database to provision. Deploy, open the URL, create the admin account, start writing.

## Common Use Cases

- Personal todo lists and daily checklists that sync across your devices without a third-party account
- A private markdown notebook with optional per-note encryption
- Shared household or small-team checklists with per-user accounts
- Kanban boards with time tracking for side projects

## Dependencies for Jotty Hosting

- One Railway service running the official Jotty image
- One Railway volume at `/app/data` (users, notes, checklists, uploads, sessions)

### Deployment Dependencies

- Upstream project: https://github.com/fccview/jotty
- Configuration reference: https://github.com/fccview/jotty/blob/main/howto/DOCKER.md

### Implementation Details

**First boot.** Open your service domain. Jotty redirects to `/auth/setup`, where the first account you create becomes the admin. There is no seeded password. After setup, further users are added by the admin from Settings. Public registration is off by default.

**What is persisted.** Everything under `/app/data` lives on the volume and survives redeploys and upgrades. The compose file upstream also mounts `/app/config` (custom CSS, themes, emoji overrides) and a Next.js cache; Railway allows one volume per service, so those two stay in the image. Defaults ship in the image, so nothing is missing. If you want custom themes, prefer the in-app custom CSS setting, which is saved to `/app/data`.

**Variables set for you.**

- `APP_URL` = `https://${{RAILWAY_PUBLIC_DOMAIN}}`. Sessions and SSO redirects are built from this. If you attach a custom domain, change it to that domain.
- `HTTPS=true` turns on secure `__Host-` session cookies. Railway terminates TLS at the edge, so keep it on.
- `PORT=3000` and `HOSTNAME=::`. Railway reaches containers over IPv6; the image default binds IPv4 only.
- `PUID=0` and `PGID=0`. Railway mounts volumes owned by root. The image normally drops to uid 1000, which cannot create `/app/data/users` and fails with `EACCES` on the first write. Running as root inside the container is the fix. Leave these as they are.

**Optional extras.** Add any of these later as plain variables and redeploy:

- `AUTH_MODE=oidc` with `OIDC_ISSUER`, `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET` for single sign-on (Authentik, Keycloak, Auth0). Set the callback to `https:///api/oidc/callback`.
- `SERVE_PUBLIC_IMAGES=yes` and `SERVE_PUBLIC_FILES=yes` to make uploaded attachments viewable without a login.
- `STOP_CHECK_UPDATES=yes` to stop the update check against GitHub.
- `DISABLE_BRUTEFORCE_PROTECTION=true` only if you sit behind another auth layer.

**Upgrading.** Change the image tag on the service to a newer release from https://github.com/fccview/jotty/releases and redeploy. Data files migrate in place.

**Troubleshooting.**

- `Error writing data: EACCES: permission denied, mkdir '/app/data/users'` in the logs means `PUID`/`PGID` were changed away from `0`. Set them back.
- A blank page after login with a `__Host-session` cookie error means `APP_URL` does not match the domain you are visiting. Point it at the domain in the address bar.

**Scaling.** Jotty is file-backed and single-instance by design. Keep replicas at 1; two containers cannot share the volume.

## Why Deploy Jotty on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Jotty on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/jotty
