






| Key | What it does |
|---|---|
| `Ctrl+E` | Switch between reading and editing |
| `Ctrl+O` | Open a file |
| `Ctrl+Shift+B` | Show or hide the sidebar |
| `Ctrl+F` | Find in the document |
| `Ctrl+G` | Go to a line:column |
| `Alt+Left` / `Alt+Right` | Back and forward |
| `Ctrl+T` | Choose a theme |
| `Ctrl+,` | Settings: fonts, sizes, line numbers, word count, autosave |
| `Ctrl+P` | Export to PDF |
| `Ctrl+Shift+P` | PDF export settings |
| `F1` | All shortcuts and the markdown syntax |
On macOS, use `Cmd` where this page says `Ctrl`, and `Cmd+[` / `Cmd+]` to go back and forward.
## Is Oryx for me?
Oryx is for people who want to read and write markdown fast, with the keyboard, in one window. It shows a file formatted, themed, as soon as you open it, and it performs well with huge files. Oryx also opens and edits code, and reads books and comics: it's a consequence of being a markdown viewer and editor as it uses the same engine with some tweaks.
Oryx suits work with LLMs and coding agents, which write a lot of markdown. It reloads a file that changed on disk as soon as you come back to the window, so an agent's plan or report shows formatted and up to date. `llm "your question" | oryx --as md` shows an answer piped from the terminal.
For other needs, other tools might be a better fit:
- Linked notes, a graph of notes, plugins or sync: Obsidian.
- Editing inside the formatted text: Typora or MarkText.
- The source and the preview side by side: Ghostwriter, or VS Code with its preview.
- A full code editor with extensions, git and language servers: VS Code or Zed.
- A library to organize and convert ebooks: Calibre.
- Markdown in the terminal: Glow or Neovim.
## Performance
Every release is measured on my machine, a 2019 laptop with an Intel Core i7-8565U, 16 GB of memory, an NVMe drive and no dedicated graphics card. A release ships only if it is as fast as the previous one, or slower for a reason I can explain. The tables below come from the last measure.
The first table is about time. "First screen" is the time from reading the file to showing it, and it stays at 40 ms whatever the size of the file. The next three columns are work Oryx does in the background while you read: reading the markdown of the rest of the file (a source file has none, hence 0 ms), laying out the rest of the file, and coloring the code. "PDF export" is the export of the whole file.
| File | First screen | Rest read | Rest laid out | Code colors | PDF export |
|---|---|---|---|---|---|
| 1 MB markdown | 40 ms | 31 ms | 0.19 s | 0.70 s | 0.97 s |
| 1 MB source code | 40 ms | 0 ms | 0.11 s | 3.0 s | 0.87 s |
| 8 MB markdown | 40 ms | 260 ms | 1.6 s | 6.0 s | 9.0 s |
| 8 MB source code | 40 ms | 0 ms | 0.86 s | 25.4 s | 8.2 s |
The second table is about memory. "Once loaded" is what the file takes once all of this is done. "Highest" is the most it takes on the way there. "PDF export" is what an export adds while it runs.
| File | Once loaded | Highest | PDF export |
|---|---|---|---|
| 1 MB markdown | 22 MB | 34 MB | +10 MB |
| 1 MB source code | 11 MB | 12 MB | +11 MB |
| 8 MB markdown | 172 MB | 255 MB | +34 MB |
| 8 MB source code | 88 MB | 95 MB | +11 MB |
The [examples](examples/) folder ships an 8 MB markdown file of real text, `markdown-challenge.md`, to try a big file yourself.
Books open the same way: the first chapters show at once, and the rest loads in the background. The third table gives the time before the first chapters of a book, or the first pages of a comic, show.
| Book | Format | Opens in |
|---|---|---|
| *The Adventures of Sherlock Holmes* | EPUB | 5 ms |
| A book of 300 chapters (1.6 MB) | FB2 | 15 ms |
| A book of 300 chapters (1.6 MB) | MOBI | 9 ms |
| A comic of 40 pages | CBZ | under 1 ms |
| The same comic | CBR | 5 ms |
The 211 pages of *The Adventures of Sherlock Holmes* export to PDF in 0.6 s.
My goal is to make Oryx one of the fastest markdown editors and renderers. I benchmark Oryx performance against itself but also against other tools to improve it. The Oryx self-test files and the measures are in the repository:
```sh
cargo test --release --test perf -- --ignored --nocapture --test-threads=1 # the timings
cargo test --release --test perf_mem -- --ignored --nocapture --test-threads=1 # the memory
```
> [!NOTE]
> Oryx is not a markdown-to-PDF converter. Its export reproduces themed pages, at a few milliseconds per finished page whatever the document size. Raw conversion is a far faster job: a few milliseconds for a whole small file.
## Privacy
Oryx has no account and no telemetry. It does not report what you open, what you do, or that it is installed. It uses the network to download the images that a markdown file links to by URL, like the badges of a README. These images are kept on your disk so the file opens fast the next time, and `oryx --clear-cache` removes them. More details in [PRIVACY.md](PRIVACY.md).
## Limitations
- Oryx opens text files in UTF-8 only. A file in an older encoding, like Windows-1252 or Shift JIS, is refused rather than shown wrong. Binary files are refused too.
- Books protected by DRM and fixed-layout EPUB books are not supported. CBR comics open when their pages are stored in the RAR archive without compression, which is the usual case.
- Oryx renders the HTML that GitHub allows in a README, plus page breaks and aligned blocks. It does not apply CSS and does not render whole HTML pages.
- Typing works with any keyboard layout, but the input methods for Chinese, Japanese and Korean are not supported.
- On a file of several megabytes, the rest of the file is laid out and colored in the background, so a few lines can change color a moment after you reach them. A PDF export waits for this coloring to finish.
- On Linux, Oryx needs glibc 2.35 and OpenSSL 3, which recent distributions have ([the list](INSTALL.md#requirements)).
- The Mac build is made on GitHub's Mac machines and tested by some nice Mac users (thank you!).
## Why Oryx?
Oryx started as a personal project. I read and write a lot of markdown files, and I tried many of the free solutions. Most take time to open, and slow down or crash on large files. Many are built on Electron or a browser engine, which makes them heavy for a fraction of what they offer. My ideal would have been a portable desktop app that shows formatted markdown, opens instantly on any machine and does not share my notes with somebody on the other side of the planet. A good-looking PDF export would have been a plus. The closest was Obsidian, but the vault constraint broke my flow.
So Oryx began as a renderer, not as an editor. Most markdown editors show the source and then render it. I think a document should first open formatted. A browser does not start by showing the raw HTML, right? Editing came later, as a consequence, then ebooks and comics, because the same engine could do them. Some ideas were explored and left out: reading PDF files would have added 5.5 MB to the app without doing any better than the existing readers. Git and AI agent integration will probably never come. Any new feature has to keep Oryx `Fast and Beautiful`.
## Feedback
Bug reports and ideas are welcome in the [issues](https://github.com/wmahfoudh/oryx/issues). For a bug, the version (`F1`), your system, and if possible the file that shows the problem (or part of it) with some screenshots would be very helpful.
## Credits
Five fonts are built into Oryx: DejaVu Sans for text, Courier Prime for code, STIX Two Math for math, Amiri for Arabic and David Libre for Hebrew. DejaVu is under the DejaVu Fonts License, the other four under the SIL Open Font License. The settings (`Ctrl+,`) can switch the text and code fonts to any font installed on your system.
The sample book in [examples](examples/) is the [Standard Ebooks](https://standardebooks.org) edition of *The Adventures of Sherlock Holmes*, in the public domain and dedicated with CC0 by its producers. The 8 MB file in the same folder is made of Wikipedia articles, under CC BY-SA 4.0, and of public-domain books from Project Gutenberg; its last section lists them.