Verso now compiles both .tex (latexmk) and .qmd (Quarto) projects,
dispatching by the root file's extension rather than replacing one with
the other. LaTeX and Quarto projects can coexist on the same server.
CompileManager: re-import LatexRunner and add a _getRunner() dispatcher
that returns a uniform {run, isRunning, kill} interface. .qmd/.md/.Rmd
→ QuartoRunner; everything else (.tex/.ltx/.Rtex/.Rnw) → LatexRunner.
stopCompile now checks/kills both runners since it has no root path.
compiler-setting.tsx: restore the LaTeX engine choices (pdfLaTeX, LaTeX,
XeLaTeX, LuaLaTeX) alongside Quarto. The dropdown still controls which
TeX engine latexmk uses; actual engine dispatch is by file extension.
Dockerfile-base: reinstall TeX Live alongside Quarto (texlive-full minus
-doc/-lang- packages, plus xetex/luatex/biber/latexmk/texcount/chktex/
synctex). Restore TEXMFVAR for a writable LuaTeX cache. This brings back
a large image, which is the accepted cost of full LaTeX+Quarto support.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Verso
A collaborative real-time editor for Quarto presentations and documents.
Verso is a fork of Overleaf adapted to compile Quarto documents instead of LaTeX. It keeps Overleaf's real-time collaboration infrastructure while replacing the LaTeX/CLSI compiler with Quarto, enabling collaborative editing of .qmd files with instant PDF (via Typst) or HTML (RevealJS) preview.
Features
- Real-time collaboration — multiple users editing the same
.qmdfile simultaneously, powered by Overleaf's operational-transformation engine - Quarto compilation — documents are compiled with Quarto on every save
- Two output formats — set
format: typstin the YAML frontmatter for a PDF preview, orformat: revealjsfor an interactive HTML presentation rendered in an iframe - Document outline — headings (
#,##,###) are extracted and shown in the sidebar outline panel - Math, code, tables — standard Quarto/Pandoc Markdown features all work
- Auto-compile — the preview refreshes automatically 2.5 s after you stop typing
- Project history — full change history inherited from Overleaf
Output formats
In the YAML frontmatter of your .qmd file:
format: typst # → PDF preview via Typst (no LaTeX required)
format: revealjs # → HTML slideshow preview
Typst is bundled with Quarto — no separate installation is needed.
Quick start
With Docker
docker run -d \
-p 80:80 \
-v ~/verso_data:/var/lib/overleaf \
--name verso \
registry.alocoq.fr/verso:latest
Then open http://localhost in your browser. On first run, visit /launchpad to create an admin account.
Build from source
# Build the base image (installs Quarto)
cd server-ce
make build-base
# Build the application image
make build-community
The two Dockerfiles are:
| File | Purpose |
|---|---|
server-ce/Dockerfile-base |
Base OS image — installs system deps and Quarto |
server-ce/Dockerfile |
Application image — installs Node services, compiles frontend |
Architecture
Verso is a microservices monorepo (Yarn workspaces). All services run inside a single container managed by runit, with nginx as the front router.
browser ──→ nginx:80
├── / ──────────────────→ web:4000 (main app, React UI)
├── /socket.io ──────────→ real-time:3026 (WebSocket, OT engine)
└── /project/*/output/* → clsi-nginx:8080 (compiled output files)
web → document-updater → Redis pub/sub → real-time → browser
web → CLSI (quarto render) → output files → nginx → browser
Key services:
| Service | Role |
|---|---|
web |
HTTP API, React frontend, auth, project management |
real-time |
WebSocket layer, live cursor and edit sync |
document-updater |
Operational transformation, Redis pub/sub |
clsi |
Quarto compiler — runs quarto render and serves output |
docstore |
Document text storage (MongoDB) |
filestore |
Binary file storage (S3 or local) |
project-history |
Change history and version tracking |
Writing a Quarto document
Minimal working example (main.qmd):
---
title: My Presentation
author: Your Name
date: today
format: revealjs
---
## Slide one
Write **Markdown** here.
## Mathematics
$$\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}$$
For PDF output, change format: revealjs to format: typst.
Note on display math: put
$$...$$on a single line. Multi-line display math blocks can cause YAML parse errors in some Quarto versions.
Environment variables
Verso inherits all of Overleaf's environment variables (prefixed OVERLEAF_).
The most commonly needed ones:
| Variable | Default | Description |
|---|---|---|
OVERLEAF_APP_NAME |
Verso |
Name shown in the UI |
OVERLEAF_MONGO_URL |
mongodb://mongo/sharelatex |
MongoDB connection string |
OVERLEAF_REDIS_HOST |
localhost |
Redis host |
OVERLEAF_SITE_URL |
— | Public URL (used in emails) |
OVERLEAF_ADMIN_EMAIL |
— | Email for the first admin account |
See the Overleaf Server documentation for the full list.
Relation to Overleaf
Verso is a fork of Overleaf Community Edition with the following changes:
- LaTeX/CLSI compiler replaced by Quarto (PDF via Typst, HTML via RevealJS)
- Default project template changed from
main.textomain.qmd - Document outline parser extended to read Markdown headings
- Compiler selector in the UI replaced with a single "Quarto" option
- Brand colours updated to Quarto's palette; name changed from Overleaf to Verso
- TeX Live removed from the base Docker image; Quarto installed instead
All other infrastructure — real-time collaboration, history, auth, file storage, project management — is unchanged from Overleaf.
Contributing
Contributions are welcome. Please open an issue or pull request on the Verso repository.
The upstream Overleaf contribution guidelines are in CONTRIBUTING.md.
License
GNU Affero General Public License v3 — see LICENSE.
Copyright © Overleaf, 2014–2025 (original code).
Verso modifications © Aloïs Coquillard, 2026–present.