ghostWriter is a lightweight browser-based markdown editor with live HTML rendering, file export options, and an optional Spookiness mode that introduces playful haunted mutations during rendering.
- Plain text and markdown editing in a simple textarea
- Rendered HTML preview in a native page layout
- Markdown, plain text, and standalone HTML export
- Optional Spookiness mode for visual drift and text mutations
- Render sound effect on every render
- Persistent markdown reference using a native
detailselement - Automatic list continuation for bullets, numbered lists, and nested lists
- Light and dark mode support based on system preference
ghostWriter is designed to stay usable as a real writing tool, not only as a prank.
- Native HTML controls are used throughout the interface
- The editor remains a standard textarea
- Status updates are announced through a status region
- The rendered output region is focusable for keyboard review
- The markdown reference can stay open while typing
The current renderer supports:
- Headings
- Paragraphs
- Unordered lists
- Ordered lists
- Nested lists by indentation
- Bold
- Italics
- Strikethrough
- Inline code
- Links
- Images
- Blockquotes
- Horizontal rules
- Fenced code blocks
- Tables
ghostWriter can download the current draft as:
.md.txt.html
The HTML export is a standalone HTML5 document containing the rendered markdown output.
index.html- app markup and page structurecss/ghostStyle.css- light theme, dark theme, layout, and motion stylingjs/ghostWriter.js- rendering, editor behavior, export logic, spookiness behavior, and status updates
Open index.html in a browser and start writing.
- Use
Render Outputto generate the HTML preview - Toggle
Spookinessdepending on whether you want the haunted rendering effects - Use the example buttons in the markdown reference to insert sample syntax into your draft
- Expand the markdown reference if you want examples while writing
This project uses a local markdown library for rendering while layering the ghost effects and export features on top.