Files
Verso/README.md
T
claude d67bc77b0e
Build and Deploy Verso / deploy (push) Successful in 7m37s
Add a Typst compiler alongside Quarto and LaTeX
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>
2026-06-01 12:56:30 +00:00

174 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Verso
**A collaborative real-time editor for Quarto and LaTeX presentations and documents.**
Verso is a fork of [Overleaf](https://github.com/overleaf/overleaf) that adds first-class [Quarto](https://quarto.org) 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](https://typst.app). All three coexist on one server.
---
## Features
- **Real-time collaboration** — multiple users editing the same `.qmd` file simultaneously, powered by Overleaf's operational-transformation engine
- **Three compilers** — `.qmd` builds with Quarto, `.tex` with `latexmk`/TeX Live, and `.typ` with 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: typst` in the YAML frontmatter for a PDF preview, or `format: revealjs` for 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:
```yaml
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
```bash
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
```bash
# 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`):
```markdown
---
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-basic` install. Documents needing
> extra packages may not build out of the box yet — see `server-ce/Dockerfile-base`
> for 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](https://typst.app) — 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](https://github.com/overleaf/overleaf/wiki) for the full list.
## Relation to Overleaf
Verso is a fork of [Overleaf Community Edition](https://github.com/overleaf/overleaf) with the following changes:
- LaTeX/CLSI compiler replaced by Quarto (PDF via Typst, HTML via RevealJS)
- Default project template changed from `main.tex` to `main.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](https://git.alocoq.fr/alois/verso).
The upstream Overleaf contribution guidelines are in [CONTRIBUTING.md](CONTRIBUTING.md).
## License
GNU Affero General Public License v3 — see [LICENSE](LICENSE).
Copyright © Overleaf, 20142025 (original code).
Verso modifications © Aloïs Coquillard, 2026present.