Every document format needs its own parser, and the output still isn't clean enough for a model to read.
One parser for every document that comes out ready for a model to read.
A TypeScript SDK and CLI that routes Excel, PowerPoint, PDF, Python, and directories to the right parser and emits clean Markdown plus structured JSON.
npm install @tyroneross/omniparse Node 18+ · npm install · no API key
$ npx omniparse ./sample.xlsx
Processing: sample.xlsx (excel)
27 words, 133 tokens, 19ms
## Sales
| Product | Region | Q1 | Q2 | Q3 | Q4 | Total |
| Widget A | North | 1200 | 1500 | 1800 | 2100 | 6600 |
$ npx omniparse ./project -r -o output.md
Found 31 files to process
Processing: ABCDCatering.xls (excel) 814 words, 1618 tokens, 59ms
Output written to: output.md One function call, five input types
`parse()` detects Excel, PowerPoint, PDF, Python, or a whole directory from the path and routes to the right parser — you call `parse(path)`, not a specific parser.
Formulas resolved, notes preserved, headings detected
Excel comes out with formulas resolved to values across multi-sheet workbooks; PowerPoint keeps slide-by-slide structure with speaker notes; PDF gets heading detection and table extraction on top of the raw text.
Static analysis, not a subprocess
Python files are parsed statically — no interpreter runs, no code executes — and each module comes out with its docstrings hoisted to the top of the markdown.
Point it at a folder, get one file back
`omniparse ./dir -r -o output.md` walks a directory tree, parses every supported file in parallel, and combines the results into one markdown file with a token estimate per source.
- Parsing runs entirely on your machine — no upload, no network call, no API key
- Python is analyzed statically; nothing gets executed
- Apache-2.0 licensed, source open on GitHub
What formats does it support?
Excel (.xlsx, .xls, .csv, .tsv, .ods, .xlsb), PowerPoint (.pptx), text-based PDFs, Python (.py), and full directory trees — recursively, in one pass.
Is this an LLM wrapper?
No. It's a static parser — no model call happens during parsing. The SDK just emits Markdown and structured JSON that you feed to whatever model you're using downstream.
CLI or library?
Both, same core. `npx omniparse <path>` for a one-off, or `import { parse } from '@tyroneross/omniparse'` for typed, programmatic use.
What license is it under?
Apache-2.0. Source is public on GitHub, package is published on npm as `@tyroneross/omniparse`.
I kept re-solving the same problem at the start of every LLM project: some documents were Excel, some were slide decks, some were PDFs or a folder of Python source, and each one needed a different parser with its own quirks and its own messy output. I’d glue five libraries together, then spend more time cleaning up their output than writing the actual feature.
Omniparse is the one router I wanted instead: point it at a file or a directory, and it comes back as Markdown a model can read plus structured JSON your code can use, with the format-specific mess — Excel formulas, slide notes, PDF headings, Python docstrings — already handled underneath.
npm install @tyroneross/omniparse Node 18+ · npm install · no API key