Offline · DOCX and PPTX · CI-ready

Check DOCX and PPTX for accessibility issues.

officelens opens a Word or PowerPoint file, reads it directly, and points at the structure that blocks assistive technology. It runs offline and never uploads a document.

curl -fsSL https://raw.githubusercontent.com/srivtx/officelens/main/install.sh | sh

Installs the officelens binary with Bun. It is not published to npm; bunx github:srivtx/officelens#main runs it without installing.

officelens fixtures/
$ officelens fixtures/bad.docx fixtures/bad.pptxfixtures/bad.docx (docx)  errors:2  warnings:2  info:0ERROR  DOCX-ALT-001  word/document.xml  Drawing (docPr id=1) has no alt text (descr or title).WARNING  DOCX-HEAD-002  word/document.xml  Document contains body text but no headings.WARNING  DOCX-LINK-006  word/document.xml  Hyperlink text contains a raw address: "https://example.com".ERROR  DOCX-TBL-005  word/document.xml  Table's first row is not marked as a header (w:tblHeader).fixtures/bad.pptx (pptx)  errors:1  warnings:2  info:0ERROR  PPTX-ALT-001  ppt/slides/slide1.xml  Missing alternative text (descr) for shape "Picture 1"WARNING  PPTX-LANG-004  ppt/slides/slide1.xml  No language specified on this slide's text runsWARNING  PPTX-TBL-003  ppt/slides/slide1.xml  Table does not have a header row (firstRow) enabled

What it catches

The failures that make a Word or PowerPoint file hard to use with a screen reader, each with a plain explanation.

Images with no alt text
A picture, chart, or shape that a screen reader cannot describe is announced as nothing useful.
Documents with no headings
Body text with no headings leaves assistive technology without an outline to navigate.
Heading levels that jump
A jump from one level to the next, such as H1 straight to H3, breaks the outline a screen reader relies on.
Tables with no header row
A table whose first row is not marked as a header cannot be navigated cell by cell.
No document language
Without a language set, a screen reader may mispronounce the whole document.
Slides with no title
A slide without a title gives a screen reader no landmark to jump to.

Quick start

Install once, then point it at a file or a directory. The exit code is the CI gate.

quick start
# install the binary$ curl -fsSL https://raw.githubusercontent.com/srivtx/officelens/main/install.sh | sh# audit one file$ officelens report.docx# audit a directory, and fail CI on warnings too$ officelens --dir docs/ --fail-on warning

Every flag, the exit codes, and the library API are in Usage.

Playground

Upload a .docx or .pptx file, or run one of the bundled samples. Everything runs in your browser; nothing is uploaded.

Runs entirely in your browser. Nothing is uploaded.

Choose or drop a document

DOCX and PPTX only. Parsed locally.

No document audited yet.

Documentation

The landing page is the pitch. The details live on four short pages.

Rules
Every DOCX and PPTX rule code, the OOXML parts a run reads, and the static pipeline behind it.
Usage
Install, every CLI flag, the exit-code scheme, JSON output, and the library API.
CI
SARIF 2.1.0 and GitHub code scanning, with a workflow you can paste.
FAQ
Scope, limitations, and how officelens compares to the checkers you already have.