How to convert rfcs and design docs to modern pdf
- Step 1Paste or drop the RFC — Paste your RFC Markdown, or drop a
.md,.mdx, or.markdownfile. One file per run. - Step 2Run the conversion — Click Run.
markedparses the document and applies the fixed Modern stylesheet — no options. - Step 3Review the preview — The rendered RFC appears in an embedded frame. Check that code blocks and trade-off tables look right before exporting.
- Step 4Open the print dialog — Click Print to PDF to call the preview frame's
print()and open your browser's native print dialog. - Step 5Save as PDF — Choose Save as PDF (or Microsoft Print to PDF) as the destination and save.
- Step 6Share for review — The PDF is named from your input with the extension swapped to
.pdf. Attach it to the review thread or upload it for sign-off.
Modern theme rendering rules (md-to-pdf-modern)
Fixed CSS applied to your RFC. None of these are adjustable in the tool.
| Element | Rendering | Notes |
|---|---|---|
| Body font | Segoe UI, Helvetica Neue, Arial, sans-serif at 10.5pt | Academic theme uses Georgia serif at 12pt |
| Line height / color | line-height: 1.7, color #111 | Comfortable for a long technical read |
| Page margins | @page { margin: 25mm 20mm; } | Applied by the print engine on save |
| Headings | H1 2em 2px rule, H2 1.5em 1px rule | Separates Context / Proposal / Alternatives / Risks |
| Code blocks | #f6f8fa panel, 0.85em monospace | Verbatim; no syntax-color highlighting |
| Tables | Collapsed 1px #ddd borders, #f0f0f0 header | GFM pipe tables — trade-off matrices |
| Blockquotes | 4px left rule #ccc, text #555 | Open questions, risks, caveats |
Parser feature support (via marked, GFM defaults)
What the parser does and does not do for a code-heavy RFC.
| Feature | Supported? | Behaviour |
|---|---|---|
| GFM tables | Yes | Pipe tables render as bordered HTML tables |
| Strikethrough / task lists | Yes | ~~rejected~~ strikes; - [ ] renders as a checkbox |
| Fenced code blocks | Yes | Monospace on a grey panel, text preserved exactly |
| Syntax highlighting | No | No token coloring is applied to code |
| Math / KaTeX / MathJax | No | $...$ / \(...\) pass through as literal text |
Footnotes ([^1]) | No | Not in the default GFM set; renders literally |
Free vs paid input limits (markdown family)
Applies to the single RFC file. Character count is enforced separately from byte size.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
How common RFC structures render in the Modern theme. Each shows source and rendered behaviour.
A trade-off matrix renders as a bordered table
Comparing options is the core of an RFC. GFM pipe tables are on by default, so this renders bordered with a grey header, with rejected options struck through inline.
Source Markdown: | Option | Latency | Cost | Verdict | |--------|---------|------|---------| | Polling | High | Low | ~~Rejected~~ | | Webhooks | Low | Med | Chosen | Rendered: bordered table; "Rejected" struck through.
Code samples render verbatim, without highlighting
Interface sketches and config render on the grey code panel in monospace. The fence language is kept in the source, but no color is applied to the PDF.
Source Markdown:
```ts
interface Event { id: string; ts: number }
```
Rendered: #f6f8fa panel, 0.85em monospace, exact text;
no TypeScript token coloring.Open questions as blockquotes
Set risks or unresolved questions apart with a blockquote — handy for reviewers scanning for decisions still needed.
Source Markdown: > Open question: do we need backward compatibility > with the v1 webhook signature? Rendered: 4px grey left border, #555 text.
Math passes through as literal text
If the RFC includes a capacity or latency formula in LaTeX, it is NOT typeset — the delimiters appear verbatim. Plan around this for math-heavy docs.
Source Markdown: Expected QPS is $q = c \cdot u$. Rendered in PDF: Expected QPS is $q = c \cdot u$. (shown literally — no formula rendering)
Output filename from the RFC file
The saved PDF is named after your input, with the Markdown extension swapped for .pdf.
Input file: rfc-042-event-bus.md Output name: rfc-042-event-bus.pdf
Edge cases and what actually happens
RFC file over 1 MB on Free
RejectedFree caps markdown input at 1 MB. A doc with many inline diagrams as base64 can exceed it. Upgrade to Pro (10 MB) or reference images by URL.
Over 500,000 characters on Free
RejectedA long RFC with extensive code samples can exceed 500,000 characters while under 1 MB. charLimit is enforced separately; Pro raises it to 5,000,000.
Code blocks come out uncolored
By designThere is no syntax highlighter. Code renders monospace on a #f6f8fa panel with the text preserved exactly — only the coloring is absent.
Math formulas not rendering
Preserved$...$ / \(...\) pass through as literal text — marked's default GFM set has no KaTeX/MathJax. md-math-normalizer standardizes delimiters but won't typeset them here.
Untagged code fences
ExpectedUntagged ``` blocks still render on the code panel. Adding language tags doesn't add color in this PDF, but md-code-block-tagger is useful if you also publish to HTML.
Wanting a custom RFC template
Not availableThe Modern theme is fixed — no template or custom-CSS field. The only choice is Modern vs the Academic serif theme.
Wide trade-off table overflows
ExpectedTables are 100% width within the 20mm side margins; many columns crowd the page. Reduce columns or split the matrix to keep it legible.
Page break splits a code block
ExpectedThe browser print engine sets breaks against the 25mm 20mm margins; there are no manual break controls. A long code block may split across pages.
Print dialog blocked
ExpectedOutput is produced by the browser's print engine via the preview frame. If a blocker intercepts it, allow printing for the page or use the browser menu's Print on the preview.
Reviewers want to comment inline
SupportedExport with md-to-docx instead for a Word file that supports tracked comments and edits.
Frequently asked questions
Are code blocks syntax-highlighted?
No. Fenced code renders monospace on a #f6f8fa panel with the text preserved exactly, but without token coloring — the parser does not run a highlighter.
Does it render LaTeX or math?
No. $...$ and \(...\) are emitted as literal text; there is no KaTeX/MathJax. md-math-normalizer can standardize delimiters but won't typeset them in the PDF.
Do trade-off tables render properly?
Yes. GFM pipe tables are on by default and render with collapsed 1px #ddd borders and a #f0f0f0 header row — ideal for an options matrix.
Is a pre-public RFC uploaded anywhere?
No. marked parses in your browser and the PDF is produced by your browser's print engine, so the document never reaches a server.
Modern or Academic for a design doc?
Modern (this tool) is sans-serif Segoe UI at 10.5pt — approachable for cross-functional reviewers. Academic is Georgia serif at 12pt for a formal feel. Both share 25mm 20mm margins.
How large an RFC can I convert for free?
Free allows a 1 MB file with up to 500,000 characters, one file per run. Pro raises this to 10 MB / 5,000,000 characters and up to 10 files.
Why does it open a print dialog?
A pdf result renders into a preview frame, and Print to PDF runs your browser's print engine on it. You choose Save as PDF as the destination to produce the file.
Can I customize the styling or use our doc template?
No. The Modern theme is fixed with no custom-CSS field or template. The only style choice is Modern vs the Academic serif theme.
Will my fence language tags do anything?
They are preserved in the source but don't add color in this PDF. They matter more for HTML output via md-to-html.
Reviewers want to leave comments — what should I send?
Use md-to-docx for a Word file that supports tracked comments and edits, rather than a flat PDF.
Can I control page breaks around code blocks?
No. The browser print engine decides breaks using the 25mm 20mm margins. A long code block may split; reflow your source if a clean break matters.
I also publish RFCs to a wiki — what's the matching HTML tool?
Use md-to-html, which runs the same marked parser, so tables and code blocks behave consistently between the PDF and the HTML.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.