SkillAgentSearch skills...

DumbPad

A Dumb Pad with collaborative editing, fuzzy search, & markdown preview functionality

Install / Use

/learn @DumbWareio/DumbPad
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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>

dumbpad

Table of Contents

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
  1. Go to http://localhost:3000
  2. Start typing - Your notes auto-save
  3. 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
  1. Go to http://localhost:3000
  2. Start typing - Your notes auto-save
  3. 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)

  1. Install dependencies:
npm install
  1. Set environment variables in .env or cp .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
  1. 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:

  1. Upgrading from a previous version - Existing data directory may have incorrect permissions, causing notepads to appear blank (Issue #74)
  2. 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 denied errors (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:

  1. Start/Restart the container:

    docker restart dumbpad
    # or if starting fresh
    docker compose up -d
    
  2. Check container logs (should start without errors):

    docker logs dumbpad
    
  3. Verify file ownership inside container:

    docker exec dumbpad ls -la /app/data
    

    You should see files owned by node or UID 1000

  4. 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

View on GitHub
GitHub Stars436
CategoryDevelopment
Updated3h ago
Forks19

Languages

JavaScript

Security Score

100/100

Audited on Mar 27, 2026

No findings