Comparison

How it compares

The same math, diagrams, and tables rendered by SiriusMarkdown and other native Swift libraries, with every result checked by hand.

Run a live comparison

Download SiriusMarkdown Compare for macOS to run native Swift, Sirius WASM and Pele with one shared source, visible results and exportable timings. The historical native-library comparisons below have their own recorded dates and methodology.

How the tests were run

These results were visually reviewed on 23 September 2026. Each renderer received the same input, and its output was checked visually against the source. These tests assess correctness, not speed, and describe the library builds tested.

Math

The test used 138 expressions: 52 cases from the package's math corpus and 86 expressions from course and showcase documents. Five engines rendered all of them, for 690 renders in total.

Engine Correct Partial Wrong Error / blank
SiriusMarkdown 136 0 0 0
MarkdownDisplayView 106 3 27 0
SwiftMath 108 1 0 27
iosMath 123 4 0 9
SwiftUIMath 124 1 0 11

The table covers 136 valid expressions. Partial means incomplete or misplaced notation; wrong means an altered expression or commands printed as text; error / blank means no usable equation.

Two deliberately malformed inputs are counted separately. SiriusMarkdown preserves their source, the three math engines record errors, and MarkdownDisplayView produces malformed output.

In this comparison, SiriusMarkdown alone rendered ten expressions correctly, including softmax notation, arrays, and labeled braces.

Silent failures

MarkdownDisplayView reports success for all 138 expressions. When it can't handle a command, it prints the name as text: \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} comes out as [x1x2x3]matrix, and \operatorname{softmax} as operatornamesoftmax. SwiftUIMath draws nothing for eleven valid expressions it cannot handle.

Mermaid diagrams

The test put 24 diagrams through four Markdown renderers.

Renderer What it does with a ```mermaid block
SiriusMarkdown draws the diagram
MarkdownUI shows the source as a code block
Textual shows the source as a code block
MarkdownDisplayView shows the source as a code block

In this test, SiriusMarkdown drew 19 of the 24 diagrams, preserved the source for three unsupported types, and declined two invalid inputs. Explore the diagram gallery for examples of the supported families.

Tables

Thirty tables were rendered by SiriusMarkdown, MarkdownUI, Textual, and MarkdownDisplayView. The differences include:

Case SiriusMarkdown MarkdownUI Textual MarkdownDisplayView
Empty cells between values keeps each value in its source column keeps source columns moves x from column b to a, and z from c to b keeps source columns
**heavy** in a cell bold bold bold regular weight
Inline code in a cell monospace monospace monospace proportional glyphs
\mathrm{CH_3COOH} in a cell CH₃COOH, typeset $\mathrm{CH_3COOH}$ as text $\mathrm{CH_3COOH}$ as text the column is empty
Math inside a sentence in a cell 4 CO₂, 6 NADH, 2 FADH₂ LaTeX source LaTeX source 4 , 6 NADH, 2 FADH₂, with the math dropped
12 columns in a narrow column full-width columns that scroll sideways columns narrowed to fit columns narrowed to fit full-width columns
A 64-character hash in a cell wraps onto two lines one unbroken line one unbroken line five short lines
A long sentence in a cell two lines two lines in a wider table two lines in a wider table many short lines
An image that can't load alt text empty box and alt text alt text ![alt](missing.png) as text

Compared with a web view

A web view offers browser-based layout and styling. SiriusMarkdown uses native Apple text and view systems, with prepared layout, source-backed selection, and copy-as-Markdown. It does not require a web view for each message. This comparison did not benchmark web-view implementations.

What these tests don't cover

The results describe the examples and library builds tested. They do not measure speed, typographic quality, or every feature a library supports.

Render examples

Unedited captures show the same input in each renderer.

The same softmax expression rendered by five engines with original status and verdict labels
The operatorname case. Open the image for the original sheet.
Twelve-column table rendered by four engines at the same available width
Wide table behavior at a fixed width.
Native captureOpen original ↗
Native document capture