Skip to content

joemccann/dillinger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,716 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Dillinger Banner

Dillinger

The last Markdown editor you'll ever need.

A modern, cloud-native Markdown editor built on Next.js β€” designed for speed, focus, and seamless sync.

Get Started Β· Features Β· Integrations Β· Deploy


✨ Why Dillinger

Most markdown editors are either:

  • bloated
  • offline-only
  • or lack serious developer ergonomics

Dillinger fixes that.

It combines:

  • ⚑ VS Code-grade editing
  • ☁️ Native cloud storage
  • 🧘 Distraction-free UX
  • πŸ”„ Real-time rendering

⚑ Quick Start

npm install
npm run dev

Open β†’ http://localhost:3000


🧱 Requirements

  • Node.js 18+
  • npm / yarn / pnpm / bun

πŸš€ Features

Editor Experience

  • Monaco Editor (VS Code core)
  • Syntax highlighting for Markdown
  • Image paste support

Live Workflow

  • Real-time preview
  • Scroll sync
  • Instant feedback loop

Focus Mode

  • Zen Mode (Cmd/Ctrl + Shift + Z)
  • Fullscreen, distraction-free writing

File Handling

  • Drag & drop .md, .txt, .markdown
  • Auto-save (local persistence)

Export

  • Markdown
  • HTML
  • PDF

Cloud Integrations

  • GitHub
  • Google Drive
  • Dropbox
  • OneDrive
  • Bitbucket

πŸ” Environment Setup

Create:

.env.local

Template

# Google Drive
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=http://localhost:3000/api/google-drive/callback

# OneDrive
ONEDRIVE_CLIENT_ID=
ONEDRIVE_CLIENT_SECRET=
ONEDRIVE_REDIRECT_URI=http://localhost:3000/api/onedrive/callback

# Bitbucket
BITBUCKET_CLIENT_ID=
BITBUCKET_CLIENT_SECRET=
BITBUCKET_REDIRECT_URI=http://localhost:3000/api/bitbucket/callback

# GitHub
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_REDIRECT_URI=http://localhost:3000/api/github/callback

# Dropbox
DROPBOX_CLIENT_ID=
DROPBOX_CLIENT_SECRET=
DROPBOX_REDIRECT_URI=http://localhost:3000/api/dropbox/callback

☁️ Cloud Integrations

Each provider requires OAuth configuration.

Google Drive

  • Enable Drive API
  • Create OAuth credentials
  • Redirect:
/api/google-drive/callback

OneDrive

  • Azure App Registration

  • Permissions:

    • Files.ReadWrite
    • User.Read

Bitbucket

  • OAuth consumer
  • Repo read/write access

GitHub

  • OAuth App
  • Callback:
/api/github/callback

Dropbox

  • Scoped app

  • Enable:

    • files.metadata.read
    • files.content.write

🚒 Deployment

Update all OAuth callbacks:

https://yourdomain.com/api/{provider}/callback

Then:

npm run build
npm start

πŸ— Tech Stack

Layer Technology
Framework Next.js 14
Editor Monaco
Styling Tailwind CSS
State Zustand
Icons Lucide

πŸ“¦ Scripts

npm run dev              # Start dev server
npm run build            # Production build
npm start                # Start production server
npm run lint             # ESLint
npm run test             # Unit + E2E tests
npm run test:unit        # Vitest unit/integration tests
npm run test:watch       # Vitest watch mode
npm run test:e2e         # Playwright E2E tests
npm run test:e2e:headed  # E2E in visible browser
npm run verify           # Lint + typecheck + all tests

πŸ§ͺ Testing

294 unit/integration tests (Vitest) + 39 E2E tests (Playwright) with 98% code coverage.

npm run test:unit                # Run all unit tests
npx vitest run --coverage        # With coverage report
npm run test:e2e:headed          # E2E in visible browser

Tests live in tests/ organized by type: lib/, store/, hooks/, components/, routes/, and e2e/.


🧭 Philosophy

Dillinger is built around a simple idea:

Writing tools should disappear.

No friction. No clutter. Just flow.


🀝 Contributing

PRs welcome. Open an issue first for major changes.


πŸ“„ License

MIT