A minimal, premium-grade AI-powered text editor for clean writing and intelligent editing.
- Smart content refinement and clarity improvement.
- Built with TipTap + ProseMirror
- Formatting: bold, italic, underline, strikethrough, highlight
- Headings (H1-H5), bullet/ordered lists, blockquote, code block, divider
- Text alignment controls: left, center, right, justify
- Journal block support
- Auto-save editor content and title in
localStorage - Save and manage notes in IndexedDB
- Search and reopen saved notes from the "All Notes"
- Keyboard shortcuts for save, notes, fullscreen, and quick new page
- Fullscreen mode
- Minimal interface with responsive layout
- Toast feedback for editor actions
- Single self-contained Go binary with embedded frontend and assets
- No external files or dependencies needed at runtime
- Configurable via CLI flags or environment variables
- Graceful shutdown, security headers, smart caching
Check out the live demo here: Blank Editor Demo
- Node.js >= 18.18.0
- pnpm (via corepack or
npm install -g pnpm) - Go >= 1.26 (for the standalone server)
git clone https://github.com/puni9869/blank-editor.git
cd blank-editor
corepack enable
pnpm installIf
corepackis unavailable, install pnpm globally withnpm install -g pnpm.
pnpm dev # Vite dev server at http://localhost:5173
make watch-frontend # Same, via Makefilepnpm build # Outputs to dist/
pnpm preview # Preview the production buildThe Go server embeds the frontend build (dist/) and static assets (assets/) into a single self-contained binary.
make build # Builds frontend + Go binary β build/blank-editor
make production # Same, with CGO_ENABLED=0, trimpath, and git version tag
make run # Build and start the serverRun the binary directly:
./build/blank-editor start # http://0.0.0.0:8080
./build/blank-editor start --port 3000 # Custom port
./build/blank-editor start --host 127.0.0.1 # Bind to localhost onlyAll flags are also configurable via environment variables:
| Flag | Env Var | Default |
|---|---|---|
--host |
BLANK_EDITOR_HOST |
0.0.0.0 |
--port |
BLANK_EDITOR_PORT |
8080 |
--read-timeout |
BLANK_EDITOR_READ_TIMEOUT |
15s |
--write-timeout |
BLANK_EDITOR_WRITE_TIMEOUT |
15s |
--idle-timeout |
BLANK_EDITOR_IDLE_TIMEOUT |
60s |
--shutdown-timeout |
BLANK_EDITOR_SHUTDOWN_TIMEOUT |
10s |
pnpm format # Prettier formatting
pnpm lint # ESLint checks
pnpm lint:fix # Auto-fix linting issues
make fmt # Go formatting
make vet # Go vet
make lint # golangci-lintβββ assets/ # Static assets (favicons, robots.txt, sitemap)
βββ cmd/ # Go CLI entry point and commands
β βββ main.go
β βββ command/
βββ frontend/ # Frontend source (vanilla JS + TipTap)
β βββ components/
β βββ config/
β βββ css/
β βββ db/
β βββ lib/
β βββ plugins/
β βββ types/
βββ server/ # Go HTTP server (routes, middleware, lifecycle)
β βββ routes.go
β βββ middleware.go
β βββ server.go
βββ pkg/ # Shared Go packages (logger, render)
βββ templates/ # Go HTML templates
βββ embed.go # Embeds dist/ and assets/ into the binary
βββ index.html # Frontend entry point
βββ vite.config.js # Vite build configuration
Pushes to main automatically build and deploy the frontend to GitHub Pages via the static.yml workflow.
Live demo: https://puni9869.github.io/blank-editor/
Tagging a release (v*) triggers the release.yml workflow, which builds cross-platform binaries (linux/darwin/windows, amd64/arm64) and uploads them as GitHub release assets.
We β€οΈ contributions! See CONTRIBUTING.md for guidelines.
- Fork the repo
- Create a new branch (
feature/your-feature) - Submit pull requests for bug fixes or new features
- Ensure
pnpm lintpasses before submitting
If you find a bug or have a feature request, please open an issue on GitHub: Issues
This project is licensed under the MIT License β see LICENSE for details.
Thanks to all the wonderful contributors β€οΈ




