A project whose root file is a .typ file now compiles straight to PDF with Typst, as a third engine beside Quarto (.qmd) and latexmk (.tex). Dispatch stays purely extension-based. CLSI: - New TypstRunner.js: runs `quarto typst compile <main>.typ output.pdf` (reuses the Typst bundled in Quarto, so no extra binary / Docker change). stderr is merged into output.log. - CompileManager: _isTypstFile + a TypstRunner branch in _getRunner, and TypstRunner added to the isRunning check and stopCompile kill list. - RequestParser: 'typst' added to VALID_COMPILERS. web: - settings.defaults: 'typ' added to validRootDocExtensions and the text extensions (so .typ opens in the editor); 'typst' added to safeCompilers. - output-files: the Quarto/Typst log parser (which already understands Typst `error:`/`warning:` + `┌─ file:line:col` diagnostics) now also handles .typ compiles, so their errors/warnings populate the log tabs. Polish: - New-project menu: "Blank Typst project" + "Example Typst project" in both the main and welcome dropdowns, backed by createBasicProject/createExampleProject flavour 'typst', a new mainbasic.typ template and an example-project-typst presentation (math, an image, a table, lists). - Compiler dropdown gains a "Typst" option (cosmetic; dispatch is by extension). README updated: three compilers side by side, with a Writing-a-Typst-document section. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Verso
A collaborative real-time editor for Quarto and LaTeX presentations and documents.
Verso is a fork of Overleaf that adds first-class Quarto support alongside Overleaf's existing LaTeX toolchain. It keeps Overleaf's real-time collaboration infrastructure and runs three compilers side by side, chosen automatically from the root file's extension: .qmd builds with Quarto (PDF via Typst, or HTML via RevealJS), .tex with latexmk/TeX Live, and .typ straight through Typst. All three coexist on one server.
Features
- Real-time collaboration — multiple users editing the same
.qmdfile simultaneously, powered by Overleaf's operational-transformation engine - Three compilers —
.qmdbuilds with Quarto,.texwithlatexmk/TeX Live, and.typwith Typst. The runner is chosen by the root file's extension, so Quarto, LaTeX and Typst projects live side by side - 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 + TeX Live)
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, Quarto, and a TeX Live (latexmk) toolchain |
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 / latexmk / typst) → 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 |
Compiler — runs quarto render (.qmd), latexmk (.tex) or typst (.typ) 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.
Writing a LaTeX document
LaTeX still works exactly as in Overleaf. A project whose root file is a .tex
file (e.g. main.tex) compiles with latexmk/TeX Live instead of Quarto — the
engine is chosen from the root file's extension, no setting required. The
Example LaTeX project in the New project menu is a ready-made starting
point; Blank LaTeX project gives you an empty main.tex.
The bundled TeX Live is a minimal
scheme-basicinstall. Documents needing extra packages may not build out of the box yet — seeserver-ce/Dockerfile-basefor how to switch to a fuller TeX Live scheme.
Writing a Typst document
A project whose root file is a .typ file compiles directly to PDF with
Typst — fast, modern markup with a real scripting
language. No extra install is needed: Verso drives the Typst that ships inside
Quarto (quarto typst compile). Use the Blank Typst project or Example
Typst project entries in the New project menu to get started.
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.