A simple, self-hosted app for your checklists and notes. Tired of bloated, cloud-based to-do apps? [jotty路page](https://jotty.page) is a lightweight alternative for managing your personal checklists and notes. It's built with Next.js 14, is easy to deploy, and keeps all your data on your own server.

ex rwMarkable

Clean, intuitive interface for managing your checklists and tasks.

Checklist Home View

Rich text editor for notes.

Note Editor
## Quick nav - [How to contribute](#contribute) - [Features](#features) - [Tech Stack](#tech-stack) - [Getting Started](#getting-started) - [Docker Compose (Recommended)](#docker-compose-recommended) - [Initial Setup](#initial-setup) - [Local Development (Without Docker)](#local-development-without-docker) - [Data Storage](#data-storage) - [Versioning Scheme](#versioning) - [Updating](#updating) - [Docker Compose](#docker-compose-1) - [Manual](#manual) - [API](#api) - [Shortcuts](#shortcuts) - [Single Sign-On (SSO) with OIDC](#single-sign-on-sso-with-oidc) - [Custom Themes and Emojis](#custom-themes-and-emojis)


Buy me a coffee

## How to contribute Hi, it's amazing having a community willing to push new feature to the app, and I am VERY open to contributors pushing their idea, it's what makes open source amazing. That said for the sake of sanity let's all follow the same structure: - When creating a new branch, do off from the `develop` branch, this will always be ahead of `main` and it's what gets released - When creating a pull request, direct it back into `develop`, I' ll then review it and merge it. Your code will end up in the next release that way and we all avoid conflicts! Please bear with on reviews, it may take a bit of time for me to go through it all on top of life/work/hobbies :) ## Features - **Checklists:** Create task lists with drag & drop reordering, progress bars, and categories. Supports both simple checklists and advanced task projects with Kanban boards and time tracking. - **Rich Text Notes:** A clean WYSIWYG editor for your notes, powered by TipTap with full Markdown support and syntax highlighting. - **Sharing:** Share checklists or notes with other users on your instance, including public sharing with shareable links. - **File-Based:** No database needed! Everything is stored in simple Markdown and JSON files in a single data directory. - **User Management:** An admin panel to create and manage user accounts with session tracking. - **Customisable:** 14 built-in themes plus custom theme support with custom emojis and icons. - **API Access:** Programmatic access to your checklists and notes via REST API with authentication. ## Tech Stack - **Framework:** Next.js 14 (App Router) - **Language:** TypeScript - **Styling:** Tailwind CSS - **State:** Zustand - **Editor:** TipTap - **Deployment:** Docker ## Getting Started The recommended way to run `jotty路page` is with Docker. ### Docker Compose (Recommended) 1. Create a `docker-compose.yml` file: **馃摉 For advanced settings and more information about how the docker compose file works and what these variables do, please read [howto/DOCKER.md](howto/DOCKER.md)** ```yaml services: jotty: image: ghcr.io/fccview/jotty:latest container_name: jotty user: "1000:1000" ports: - "1122:3000" volumes: - ./data:/app/data:rw - ./config:/app/config:rw - ./cache:/app/.next/cache:rw restart: unless-stopped #platform: linux/arm64 environment: - NODE_ENV=production #- HTTPS=true #- SERVE_PUBLIC_IMAGES=yes #- SERVE_PUBLIC_FILES=yes #- SSO_MODE=oidc #- OIDC_ISSUER= #- OIDC_CLIENT_ID= #- APP_URL=https://your-jotty-domain.com #- OIDC_CLIENT_SECRET=your_client_secret #- SSO_FALLBACK_LOCAL=yes #- OIDC_ADMIN_GROUPS=admins ``` 2. Create the data directory and set permissions: ```bash mkdir -p data/users data/checklists data/notes data/sharing cache sudo chown -R 1000:1000 data/ sudo chown -R 1000:1000 cache/ ``` **Note:** The cache directory is optional. If you don't want cache persistence, you can comment out the cache volume line in your `docker-compose.yml`. 3. Start the container: ```bash docker compose up -d ``` The application will be available at `http://localhost:1122`. ### Initial Setup On your first visit, you'll be redirected to `/auth/setup` to create your admin account if SSO is disabled, otherwise you'll be prompted to sign in via your choosen SSO provider. Once that's done, you're ready to go! First user will be admin by default. ### Local Development (Without Docker) If you want to run the app locally for development: 1. **Clone & Install:** ```bash git clone cd checklist yarn install ``` 2. **Run Dev Server:** ```bash yarn dev ``` The app will be running at `http://localhost:3000`. ## Data Storage `jotty路page` uses a simple file-based storage system inside the `data/` directory. - `data/checklists/`: Stores all checklists as `.md` files. - `data/notes/`: Stores all notes as `.md` files. - `data/users/`: Contains `users.json` and `sessions.json`. - `data/sharing/`: Contains `shared-items.json`. - `data/settings.json`: App settings (name, description, custom icons). - `data/uploads/app-icons/`: Custom uploaded app icons. **Make sure you back up the `data` directory!** ## Versioning Scheme This project uses a `[STABLE].[FEATURE].[FIX]` versioning scheme, not strict [SemVer](https://semver.org/). As a product (not a package), this format makes more sense for my specific release cycle. My format is `1.10.1`, which breaks down as: - **`1.x.x` (Stable):** The `1` represents the current stable generation. I will only change this (e.g., to `2.0.0`) for a complete rewrite or a fundamental shift in the product or seriously breaking changes. - **`x.10.x` (Feature):** This is the main release number. I increment this for new features, code refactors, or significant changes (e.g., `1.9.0` -> `1.10.0`). This is the equivalent of a SemVer `MINOR` bump. - **`x.x.1` (Fix):** This is incremented _only_ for hotfixes, bug-fix-only and very minor feature releases (e.g., `1.10.0` -> `1.10.1`). This is the equivalent of a SemVer `PATCH` bump. ### A Note on "Breaking" Changes A **Feature** release (like `1.10.0`) may include major backend or data structure changes. When this happens, **I will always provide an automatic migration script** that runs on first launch to update your data seamlessly. Because the migration is automatic, I do not consider this a "breaking" change that requires a `2.0.0` version. I will always detail these migrations in the release notes. I _highly recommend_ you **back up your data** before any feature update, just in case. ## Updating ### Docker Compose Pull the latest image and restart your container. ```bash docker compose pull docker compose up -d ``` ### Manual If you're running from source, pull the latest changes and rebuild. ```bash git pull yarn install yarn build yarn start ``` ## SUPPORTED MARKDOWN `jotty路page` supports GitHub Flavored Markdown (GFM) and some custom syntax for complex functionality. 馃摉 **For the complete MARKDOWN documentation, see [howto/MARKDOWN.md](howto/MARKDOWN.md)** ## API `jotty路page` includes a REST API for programmatic access to your checklists and notes. This is perfect for: - **Automation:** Create tasks from external systems - **Integrations:** Connect with other tools and services - **Scripts:** Automate repetitive tasks - **Dashboards:** Build custom interfaces 馃摉 **For the complete API documentation, see [howto/API.md](howto/API.md)** ## SHORTCUTS `jotty路page` supports a wide range of keyboard shortcuts to help you navigate and edit more efficiently without leaving the keyboard. They are divided into two main categories: global shortcuts that work anywhere in the app, and editor-specific shortcuts that work when you are writing a note. 馃摉 **For the complete SHORTCUTS documentation, see [howto/SHORTCUTS.md](howto/SHORTCUTS.md)** ## Single Sign-On (SSO) with OIDC `jotty路page` supports any OIDC provider (Authentik, Auth0, Keycloak, Okta, Google, EntraID, etc.) 馃摉 **For the complete SSO documentation, see [howto/SSO.md](howto/SSO.md)** ## Custom Manifest You can completely customize your PWA by creating an override manifest file. This allows you to change the app name, description, icons, colors, and more. Custom themes and emojis can be managed through the admin UI. 馃摉 **For the complete customisation documentation, see [howto/CUSTOMISATIONS.md](howto/CUSTOMISATIONS.md)** 馃摉 **For better understanding on how the PWA works see [howto/PWA.md](howto/PWA.md)** ## Community shouts I would like to thank the following members for raising issues and help test/debug them!

davehope

seigel

mariushosting

Isotop7

bluegumcity
IGOLz
IGOLz

floqui-nl
fruiz1972
fruiz1972

Sku1ly

ItsNoted
red-bw
red-bw

kn0rr0x

mroovers

Ryderjj89

spaghetti-coder

hurleyy

schneider-de-com

zolakt

Justus0405

mgrimace

4rft5

godsking121

pbuzdygan

rcallison
## License This project is licensed under [MIT License](LICENSE).