PaperForge — How to use
One desktop app to turn Markdown into publication-ready PDFs, PowerPoint
decks and scientific charts. No LaTeX, no Pandoc, no installation.
This folder ships two self-contained binaries:
paperforge.exe— Windows x64 (~89 MB)paperforge-linux-x64— Linux x64 (~116 MB)
Both bundle Python, Qt 6 and matplotlib. The only external requirement is a
Chromium-family browser (Edge, Chrome, Chromium or Brave) somewhere on the
machine — used to render the PDF.
Run it
Linux
chmod +x paperforge-linux-x64
./paperforge-linux-x64Windows
- Double-click
paperforge.exe. The first launch may take a couple of
seconds while Windows unpacks the bundle. - The PaperForge window opens with the Chart tab pre-loaded with a
working example so you can see it work immediately.
The 3 tabs at a glance
When you open the app you see three tabs at the top: PDF, PowerPoint,
Chart.
1. PDF tab — Markdown → A4 report
Drag a .md file onto the Source Markdown field (or click Browse…).
Pick a style and click Build PDF:
default— academic blue accent, ABNT-style references hanging indent.minimal— Georgia serif, no colors, plain printable.academic— strict ABNT (Times New Roman 12pt, 1.5 line height).
LaTeX formulas ($E = mc^2$ or $$\sum x_i$$) are rendered via MathJax.
The references section is detected automatically when its heading matches
References, Bibliography or Referências bibliográficas.
2. PowerPoint tab — Markdown → .pptx
Each slide is one block in your Markdown:
---
title: My Talk
subtitle: A short subtitle
author: First Last
event: Conference 2026
---
## Slide 1 — Introduction
- First bullet
- **Bold bullet 2**
## Slide 2 — Data
| Metric | Before | After |
|--------|--------|-------|
| Yield | 60.3 | 69.3 |The optional YAML frontmatter (title, subtitle, author, event)
drives the auto-generated cover slide. Add --no-cover flavours via the
Generate cover slide checkbox.
Including charts in slides
Generate a chart in the Chart tab → click Save figure… to export PNG
→ reference it in your slide:
## Slide 5 — Results
- The treated group shows +14.9% yield
- ROS levels decreased 2.6× compared to control
The image lands in the right column of that slide; bullets/text stay on
the left. Only one image per slide is rendered (the first one found).
Pick a theme: default, dark, minimal, or nature. Aspect ratio
16:9 (default) or 4:3.
3. Chart tab — five scientific templates
Open the tab and the canvas is already populated. Pick a template from
the Template combo and the example data switches automatically:
| Template | Example shipped |
|---|---|
| line | Two simple kinetic curves |
| bar | Ethanol yield with vs without antioxidant (4 conditions × 2 series) |
| log-scale | Yeast biomass × ethanol fermentation (6 series + 3 Ghose-Tyagi envelopes + industrial VHG band + inhibition vline) |
| scatter | Dose–response correlation with two replicates |
| dose-response | Ethanol-tolerance curves across four yeast strains |
The left side has 4 sections (top to bottom): Template & metadata,
Data, Annotations (log-scale only), Style. The right side is
a live matplotlib preview that updates 150 ms after each edit.
Click Save figure… to write the chart. If you tick PNG + SVG + PDF
under Style, all three formats are written in a single click.
Editing data
The Data section shows a list of series on the left (with their colour
swatches) and an editable XY table on the right. Click a row in the list
to edit that series.
+ Series— add an empty series with the next palette color.Import CSV…— load tabular data, choose X / Y / series columns.Duplicate— clone the highlighted series (great for "before / after"
variants).
The colour swatch button opens a system colour picker. Markers
(o, s, ^, v, D, …) and line styles (-, --, :) live next
to the label field.
Annotations (log-scale only)
Three editable tables for:
- Vertical lines —
(x, label, color, linestyle, alpha). - Bands —
(x_start, x_end, label, color, alpha)(used by the
industrial VHG zone in the bundled fermentation example). - Theoretical envelopes — Python expressions evaluated in a sandbox
with NumPy andxavailable. Examples:10 * (1 - x / 90) ** 1(Levenspiel-style ethanol inhibition)np.exp(-x / 40)(exponential decay)5 + 0.1 * x(linear)
If a formula raises (zero division, syntax error) the envelope is
silently skipped — the rest of the chart still renders.
Building a publication-grade chart in 30 seconds
- Open
paperforge.exe(or./paperforge-linux-x64). - Switch to the Chart tab.
- Pick
log-scalein the Template combo. Done — the canvas now
shows a complete biomass × ethanol fermentation study with 6 series,
3 theoretical envelopes, the inhibition vline at x=50 and the
industrial VHG band at 60–75. - Click Save figure… → name the output → done.
Press Load example any time to revert to the canonical example for
the current template after experimenting.
Markdown cheatsheets
For PDF (paperforge pdf)
- Tables: GitHub-flavoured (
|---|---|). - Fenced code: triple backticks with language hint.
- Math:
$inline$and$$display$$(MathJax). - Blockquotes:
> ...(rendered with green left border). - Bibliography section: heading containing "References" or "Referências
bibliográficas". The paragraphs that follow get hanging indent.
For PowerPoint (paperforge slides)
- Slide separator:
## Slide N — Title here(or## Slide N: Title). - Cover via frontmatter:
title:,subtitle:,author:,event:. - Bullets:
-or*. - Tables: GitHub-flavoured.
- Code blocks: triple backticks (rendered in Consolas).
- One image per slide via
.
Where settings live
~/.paperforge/config.yaml (created on first launch):
lang: en # en | pt_br
default_pdf_style: default
default_slide_theme: default
browser: "" # empty = auto-detect
references_style: abnt
mathjax_engine: cdn # cdn | katex-local
mathjax_timeout: 8Toggle the language at the bottom-right of the main window. The change
persists across sessions.
CLI mode (advanced)
The same binary works as a CLI. Pass any subcommand and the GUI is
bypassed:
paperforge.exe pdf paper.md
paperforge.exe slides talk.md
paperforge.exe chart # interactive Rich wizard
paperforge.exe config --set lang=pt_br
paperforge.exe --helpAuthor / License
Built by Matheus Laidler —
github.com/matheuslaidler.
Released under the MIT License.
For source code, full documentation and bug reports, visit
github.com/matheuslaidler/paperforge.
PaperForge — Changelog
v0.2.0 — 2026-05-10
First public release. PaperForge is a single-binary desktop app that turns
Markdown into PDFs, PowerPoint decks and scientific charts.
Highlights
- Native PySide6 GUI with three tabs (PDF / PowerPoint / Chart).
- Dual mode: double-click → GUI;
paperforge SUBCOMMAND→ CLI. - Chart wizard with five scientific templates (line, bar, log-scale,
scatter, dose-response). Live matplotlib preview, editable data table,
CSV import. - Annotations panel for the log-scale template — vertical lines,
shaded bands and theoretical envelopes evaluated in a NumPy sandbox. - Pre-loaded examples in every template — the Chart tab works the
moment you open it. Thelog-scaletemplate ships the published
yeast biomass × ethanol fermentation study (6 series + 3 Ghose-Tyagi envelopes- industrial VHG band + inhibition vline).
- Custom application icon with proper Windows taskbar registration
(AppUserModelID). - Bilingual UI: English (default) and Brazilian Portuguese, switchable
from the status bar. - Persistent settings in
~/.paperforge/config.yaml.
Binaries shipped in this release
| File | Platform | Size | SHA-256 |
|---|---|---|---|
paperforge.exe |
Windows x64 | 88.16 MB (92,443,241 bytes) | 989da6cf3466a8e16cf8c5b2fbeefdac3886a7f2f463d86260b70883594e2b30 |
paperforge-linux-x64 |
Linux x64 (glibc) | 115.69 MB (121,307,056 bytes) | 644ff3049380cb4264cc57f201e9348c4abfc6ec41645ca9ce8a25642b3e7ede |
Verify on the command line:
# Windows (PowerShell)
Get-FileHash paperforge.exe -Algorithm SHA256
# Linux
sha256sum paperforge-linux-x64Build environment
- Python 3.11+ at build time (3.13 used for the shipped Linux binary).
- PySide6 6.6+, matplotlib 3.8+, python-pptx 0.6.23+, markdown 3.6+.
- PyInstaller 6.6+ with surgical
collect_data_filesfor PySide6
(cuts ~150 MB of unused Qt modules).
Release workflow
The Linux + Windows binaries that ship in this folder are built manually
on the maintainer's machine (Linux via WSL2 Kali). The repository keeps a
ci.yml workflow that runs ruff + pytest on every push/PR, but no
automated PyInstaller release pipeline — for a one-developer project it
proved easier to upload binaries by hand than to maintain a PySide6 + Qt
plugin matrix on GitHub-hosted runners.
Tested platforms
- Windows 11 Pro 24H2 (build 26100) — Microsoft Edge for PDF rendering.
- Kali Linux on WSL2 (kernel 5.15+, x86_64) — PyInstaller bootloader 6.20.
Runtime requirements
- Any Chromium-family browser installed: Microsoft Edge, Google Chrome,
Chromium, or Brave. The PDF tab calls one of them in headless mode. - For Linux, the bundled Qt 6 libraries depend on
libxcb-cursor0,
libegl1andlibxkbcommon0— usually pre-installed on Ubuntu /
Debian / Fedora desktops. If the binary fails to start with a "could
not find Qt platform plugin 'xcb'" message, install:sudo apt-get install libxcb-cursor0 libegl1 libxkbcommon0