A collaborative Markdown β PDF report editor built for security professionals
Write your pentest reports in Markdown. Compile to professional PDF with XeLaTeX, pdfLaTeX or wkhtmltopdf. Collaborate in real-time.
- Markdown-first editor β write in clean Markdown with live syntax highlighting
- Multi-engine PDF compilation β XeLaTeX Β· pdfLaTeX Β· LuaLaTeX Β· wkhtmltopdf
- Real-time collaboration β multiple operators edit the same report simultaneously via WebSocket
- Project management β dashboard with search, tags, templates and stats
- ZIP import/export β portable project archives, bulk backup of all projects
- Smart error reporting β YAML frontmatter validation, LaTeX error parsing with actionable hints
- 6 built-in templates β OSCP, Red Team, Corporate Blue, Minimalist, Thesis, OSINT
- No cloud, no account β runs entirely on your local machine
Project Dashboard
|
Markdown Editor
|
Live PDF Preview
|
Template Gallery
|
repdown/
βββ server/
β βββ index.js # Express + Socket.io entry point
β βββ database.js # SQLite via better-sqlite3
β βββ routes/
β βββ projects.js # CRUD + ZIP import
β βββ files.js # File read/write per project
β βββ compile.js # pandoc + LaTeX pipeline
β βββ templates.js # Template discovery
β βββ backup.js # Bulk ZIP backup
βββ public/
β βββ index.html # Dashboard SPA
β βββ editor.html # Editor SPA
β βββ styles.css # Shared dark theme
β βββ image.png # App logo
βββ templates/ # Built-in report templates
β βββ oscp-purple/
β βββ redteam-dark/
β βββ corporate-blue/
β βββ minimalist/
β βββ thesis-style/
β βββ osint-report/
βββ projects/ # Created at runtime (gitignored)
βββ data/ # SQLite DB (gitignored)
βββ build.sh # Install + launch script
βββ run.sh # CLI compile runner
βββ deps.sh # System dependency installer
git clone https://github.com/zurefx/repdown.git
cd repdownRun the auto-detect installer β it detects your distro and installs everything needed:
chmod +x deps.sh
./deps.shManual install by distro
Debian / Ubuntu / Kali / Parrot
sudo apt update
sudo apt install -y curl unzip git pandoc \
texlive-xetex texlive-latex-extra \
texlive-fonts-recommended texlive-fonts-extra \
wkhtmltopdf
# Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejsArch / Manjaro / EndeavourOS
sudo pacman -S --noconfirm curl unzip git pandoc \
texlive-xetex texlive-latexextra \
texlive-fontsrecommended nodejs npm
# wkhtmltopdf via AUR
yay -S wkhtmltopdf-staticFedora / RHEL / Rocky / Alma
sudo dnf install -y curl unzip git pandoc \
texlive-xetex texlive-collection-latexextra \
texlive-collection-fontsrecommended
# Node.js 20
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install -y nodejschmod +x build.sh
./build.shThis single command:
- Verifies all dependencies
- Runs
npm install(only ifnode_modulesis missing) - Creates required directories
- Starts the RepDown server
http://localhost:3000
Port can be overridden:
REPDOWN_PORT=8080 ./build.sh
| Action | Shortcut |
|---|---|
| Bold | Ctrl+B |
| Italic | Ctrl+I |
| Strikethrough | Ctrl+D |
| Inline Code | `Ctrl+`` |
| Code Block | `Ctrl+Shift+`` |
| Link | Ctrl+K |
| Action | Shortcut |
|---|---|
| Heading 1 | Ctrl+1 |
| Heading 2 | Ctrl+2 |
| Heading 3 | Ctrl+3 |
| Bullet List | Ctrl+U |
| Numbered List | Ctrl+O |
| Blockquote | Ctrl+Q |
| Horizontal Rule | Ctrl+R |
| Insert Table | Ctrl+T |
| Action | Shortcut |
|---|---|
| Save | Ctrl+S |
| Compile PDF | Ctrl+Enter |
| Export ZIP | Ctrl+Shift+E |
| Action | Shortcut |
|---|---|
| Find (live) | Ctrl+F |
| Find & Replace | Ctrl+H |
| Next match | Enter |
| Previous match | Shift+Enter |
| Close search | Esc |
| Action | Shortcut |
|---|---|
| Undo | Ctrl+Z |
| Redo | Ctrl+Y |
| Select All | Ctrl+A |
| Indent | Tab |
| Outdent | Shift+Tab |
| Toggle Comment | Ctrl+/ |
Reports are written in Markdown with a YAML frontmatter block:
---
title: "OSCP Penetration Test Report"
author: "Operator"
date: "2025-01-01"
target: "10.10.10.X"
---
# Executive Summary
This document presents the results of a penetration test...
## Scope
| Item | Value |
|------|-------|
| Target IP | 10.10.10.X |
| Engagement | Internal Pentest |
| Duration | 1 day |
## Findings
### Critical β Remote Code Execution
**CVSS Score:** 9.8
**Affected Host:** 10.10.10.5
Tip: All images must be placed in the
img/folder inside your project and referenced asimg/filename.png
Click ZIP in the editor topbar β downloads the entire project as a portable archive.
From the dashboard, click Import .zip and upload any RepDown project archive.
Click Backup All in the dashboard topbar β downloads a master ZIP containing one ZIP per project:
repdown-backup-20250303.zip
βββ OSCP Report (abc12345).zip
βββ Red Team Engagement (def67890).zip
βββ ...
Compile a project directly from the terminal:
# Basic usage (XeLaTeX by default)
./run.sh <project-id>
# Specify engine
./run.sh <project-id> pdflatex
./run.sh <project-id> lualatex
./run.sh <project-id> wkhtmltopdf
# List all projects
curl http://localhost:3000/api/projects | python3 -m json.toolThe CLI runner automatically:
- Starts the server if it's not already running
- Validates YAML frontmatter before compiling
- Parses LaTeX/pandoc errors and shows actionable hints
Example error output:
RepDown β Compile Runner
ββββββββββββββββββββββββββββββββββββββ
β Server already running on port 3000
Project : d8d3297b-19c7-4ceb-9f5b-607d62d9f8bf
Engine : xelatex
β Compilation failed
βΈ Missing LaTeX Package
File 'somepackage.sty' not found
β Install: sudo tlmgr install somepackage
| Template | Description | Best for |
|---|---|---|
oscp-purple |
Dark purple header, clean body | OSCP / HTB reports |
redteam-dark |
Aggressive dark styling | Red team engagements |
corporate-blue |
Professional corporate layout | Client deliverables |
minimalist |
Clean, no-frills white | Academic / internal |
thesis-style |
Chapter-based long form | Research / thesis |
osint-report |
Info-dense, grid layout | OSINT investigations |
| Variable | Default | Description |
|---|---|---|
REPDOWN_PORT |
3000 |
HTTP server port |
Add a folder to templates/ with the following structure:
templates/my-template/
βββ report.md # starter content
βββ template.json # metadata
βββ img/ # template images
βββ lua/ # pandoc lua filters
βββ config/ # pandoc/LaTeX config
template.json format:
{
"id": "my-template",
"name": "My Template",
"description": "Short description shown in the UI",
"tags": ["custom", "pentest"]
}| Layer | Technology |
|---|---|
| Backend | Node.js + Express |
| Real-time | Socket.io |
| Database | SQLite (better-sqlite3) |
| Editor | CodeMirror 5 |
| PDF pipeline | pandoc + XeLaTeX / pdfLaTeX / LuaLaTeX |
| Archive | archiver + unzipper |
| File upload | multer |
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push the branch:
git push origin feature/my-feature - Open a Pull Request
MIT Β© RepDown Contributors


