DumbPad
A Dumb Pad with collaborative editing, fuzzy search, & markdown preview functionality
Install / Use
/learn @DumbWareio/DumbPadREADME
DumbPad
A stupid simple, no auth (unless you want it!), modern notepad application with auto-save functionality and dark mode support.
<p align="center"> <img src="https://img.shields.io/github/package-json/v/dumbwareio/dumbpad" alt="GitHub package.json version" /> <a href="https://hub.docker.com/r/dumbwareio/dumbpad" target="_blank"><img src="https://img.shields.io/docker/v/dumbwareio/dumbpad?logo=docker&label=Docker" alt="Docker Image Version" /></a> <img src="https://img.shields.io/docker/pulls/dumbwareio/dumbpad" alt="Docker Pulls" /> <img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" alt="License" /> <img src="https://img.shields.io/github/actions/workflow/status/dumbwareio/dumbpad/docker-publish.yml" alt="GitHub Actions Workflow Status" /> <!-- <a href="https://dumbpad.dumbware.io/" target="_blank"> <img alt="Static Badge" src="https://img.shields.io/badge/demo-site?label=dumbpad" /> </a> --> </p>Table of Contents
- Features
- Quick Start
- Important: Docker Permissions
- Configuration
- Security
- Technical Details
- Links
- Contributing
- Future Features
Features
- Simple, clean interface
- Auto-saving
- Dark mode support
- Responsive design
- Docker support
- Optional PIN protection (4-10 digits)
- File-based storage
- Data persistence across updates
- Markdown Formatting with enhanced support
- GitHub-style alert blocks (Note, Tip, Important, Warning, Caution)
- Extended table formatting
- Auto-expand collapsible details in print (configurable)
- Code syntax highlighting in
fenced codeblocks
- Direct notepad linking with URL parameters
- Copy shareable notepad links
- Browser navigation support (back/forward buttons)
- Fuzzy Search (by filename and file contents)
- PWA Support with automatic cache updates
Quick Start
Prerequisites
- Docker (recommended)
- Node.js >=20.0.0 (for local development)
Option 1: Docker (For Dummies)
# Pull and run with one command
docker run -p 3000:3000 \
-v ./data:/app/data \
dumbwareio/dumbpad:latest
- Go to http://localhost:3000
- Start typing - Your notes auto-save
- Marvel at how dumb easy this was
⚠️ Note: If the container crashes with permission errors, see Docker Permissions section below.
Option 2: Docker Compose (For Dummies who like customizing)
Create a docker-compose.yml file:
services:
dumbpad:
image: dumbwareio/dumbpad:latest
container_name: dumbpad
restart: unless-stopped
ports:
- ${DUMBPAD_PORT:-3000}:3000
volumes:
- ${DUMBPAD_DATA_PATH:-./data}:/app/data
environment:
# The title shown in the web interface
SITE_TITLE: ${DUMBPAD_SITE_TITLE:-DumbPad}
# Optional PIN protection (leave empty to disable)
DUMBPAD_PIN: ${DUMBPAD_PIN:-}
# The base URL for the application
BASE_URL: ${DUMBPAD_BASE_URL:-http://localhost:3000} # Use ALLOWED_ORIGINS below to restrict cors to specific origins
# (OPTIONAL)
# Usage: Comma-separated list of urls: http://localhost:port,http://internalip:port,https://base.proxy.tld,https://authprovider.domain.tld
# ALLOWED_ORIGINS: ${DUMBPAD_ALLOWED_ORIGINS:-http://localhost:3000} # Comment out to allow all origins (*)
# LOCKOUT_TIME: ${DUMBPAD_LOCK_TIME:-15} # Customize pin lockout time (if empty, defaults to 15 in minutes)
# MAX_ATTEMPTS: ${DUMBPAD_MAX_ATTEMPTS:-5} # Customize pin max attempts (if empty, defaults to 5)
# COOKIE_MAX_AGE: ${DUMBPAD_COOKIE_MAX_AGE:-24} # Customize maximum age of cookies primarily used for pin verification (default 24) in hours
# PAGE_HISTORY_COOKIE_AGE: ${DUMBPAD_PAGE_HISTORY_COOKIE_AGE:-365} # Customize age of cookie to show the last notepad opened (default 365 | max 400) in days - shows default notepad on load if expired
# MARKDOWN CODE SYNTAX HIGHLIGHTING (only use below if you want to restrict to specific languages):
# By default, DumbPad includes support for all ~180 languages supported by highlight.js.
# view entire list and usage in /docs/MARKDOWN_SYNTAX_HIGHLIGHTING_USAGE.md
# HIGHLIGHT_LANGUAGES=c,csharp,css,dockerfile,go,html,java,javascript,json,kotlin,markdown,perl,php,python,ruby,sql,swift,typescript,xml,yaml
Then run:
docker compose up -d
- Go to http://localhost:3000
- Start typing - Your notes auto-save
- Rejoice in the glory of your dumb notes
⚠️ Note: If the container crashes with permission errors, see Docker Permissions section below.
Option 3: Running Locally (For Developers)
- Install dependencies:
npm install
- Set environment variables in
.envorcp .env.example .env:
PORT=3000 # Port to run the server on
DUMBPAD_PIN=1234 # Optional PIN protection
SITE_TITLE=DumbPad # Custom site title
BASE_URL=http://localhost:3000 # Base URL for the application
- Start the server:
npm start
Windows Users
If you're using Windows PowerShell with Docker, use this format for paths:
docker run -p 3000:3000 -v "${PWD}\data:/app/data" dumbwareio/dumbpad:latest
Upgrading from Previous Versions
⚠️ Important: Docker Permission Issues (New Installations & Upgrades)
As of PR #76, DumbPad now runs as a non-root user (UID 1000) inside the Docker container for improved security. This can cause permission issues in two scenarios:
- Upgrading from a previous version - Existing data directory may have incorrect permissions, causing notepads to appear blank (Issue #74)
- Fresh installation - Docker may create the data directory with host user permissions that don't match UID 1000, causing container restart loops with
EACCES: permission deniederrors (Issue #79)
Symptoms
- Fresh installations: Container crashes on startup with
Error: EACCES: permission denied, open '/app/data/notepads.json' - Upgrades: Previously saved notepads appear blank or empty
Solution
Option 1: Fix Existing Installation
Set the ownership of your data directory to match the container's non-root user (UID 1000):
Linux/macOS:
# Stop the container first
docker stop dumbpad
# Fix permissions (replace /path/to/your/data with your actual path)
sudo chown -R 1000:1000 /path/to/your/data
Example for common setups:
# If using the default ./data directory
sudo chown -R 1000:1000 ./data
# If using a custom path like /opt/docker/dumbpad
sudo chown -R 1000:1000 /opt/docker/dumbpad
# For Unraid users
sudo chown -R 1000:1000 /mnt/user/appdata/dumbpad
Windows (Docker Desktop):
# Windows users typically don't need to change permissions
# Docker Desktop handles volume permissions automatically
Option 2: Preventive Setup (Fresh Installations)
For new installations, create the data directory with correct permissions before starting the container:
Linux/macOS:
# Create data directory
mkdir -p ./data
# Set correct ownership
sudo chown -R 1000:1000 ./data
# Now start the container
docker compose up -d
Windows (Docker Desktop):
# No special setup needed - Docker Desktop handles permissions automatically
docker compose up -d
Verifying the Fix
After updating permissions, verify everything is working:
-
Start/Restart the container:
docker restart dumbpad # or if starting fresh docker compose up -d -
Check container logs (should start without errors):
docker logs dumbpad -
Verify file ownership inside container:
docker exec dumbpad ls -la /app/dataYou should see files owned by
nodeor UID1000 -
Test the application by accessing http://localhost:3000 and creating a test notepad
Why This Change?
Running containers as non-root users is a security best practice that:
- Limits potential damage from container escapes
- Reduces attack surface
- Aligns with security compliance standards
Features
- 📝 Auto-saving notes
- 🌓 Dark/Light mode support
- 🔒 Optional PIN protection
- 📱 Mobile-friendly interface / PWA Support
- 🗂️ Multiple notepads
- 📄 Enhanced Markdown Formatting with GitHub-style alerts and extended tables
- 🔗 Direct notepad linking with shareable URLs
- 🧭 Browser navigation support (back/forward buttons)
- ⬇️ Download notes as text or markdown files
- 🖨️ Print functionality with auto-expanded collapsible sections
- 🔍 Fuzzy Search by name or contents
- 🔄 Real-time saving
- 💽 Add .txt files into data folder to import (requires page refresh)
- ⚡ Zero dependencies on client-side
- 🛡️ Built-in security features
- 🎨 Clean, modern interface
- 📦 Docker support with easy configuration
- 🌐 Optional CORS support
- ⚙️ Customizable settings
- 🔄 Automatic cache updates and version management
Configuration
Environment Variables
| Variable | Description | Default | Required | | ----------------------- | ------------------------------------------------------------ | --------------------- | -------- | | PORT | Server port
Related Skills
node-connect
338.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.4kCommit, push, and open a PR
