Read and search local PowerPoint presentations and Word documents in Obsidian.
Read locally · Search PPTX and DOCX · Reference exact slides · Keep sources unchanged
Office Viewer opens local .pptx presentations and .docx Word documents in
desktop Obsidian without conversion or upload. PPTX keeps its slide-reference
and embed workflows; DOCX deliberately focuses on continuous reading and
search within the current document.
The current release is 0.2.5. GitHub receives the release first; Obsidian Community Plugins may follow after its catalog refreshes.

Obsidian Community Plugins (recommended)
GitHub Release
Download main.js, manifest.json, and styles.css from
GitHub Releases
into <Vault>/.obsidian/plugins/office-viewer/, reload Obsidian, and enable
Office Viewer.
SECURITY.md.Bug reports should use the latest release and include Copy diagnostic summary when available. Never upload confidential presentations, screenshots containing sensitive content, filenames, paths, slide text, or images.
Reading
.pptx files directly from your Vault and read them slide by slide.ArrowLeft / ArrowRight and PageUp / PageDown keys.Word document reading and search
.docx files directly from the Vault in a continuous, read-only view.Cmd+F or Ctrl+F to open the document search panel and focus its
field; Escape closes it. Search covers visible main-body text in the current
document only. Results are one entry per matching paragraph, with a match
count and excerpt, and jump to a visible session-only highlight.Thumbnails
Full screen
Fallback
Slide references and embeds

Cmd+C / Ctrl+C remains unchanged; the explicit action
copies the selected text followed by the stable slide reference.![[deck.pptx]], prose-mixed, or multi-embed lines stay ordinary
Markdown.Speaker notes
Presentation content search

Cmd+F or Ctrl+F in an open PPTX to search that presentation. When
speaker notes are available, search defaults to slides and notes together and
offers All / Slides / Notes scope filters for the current view only.Error handling
.ppt files are recognized and explained without attempting to parse
them. Legacy .doc and macro-enabled .docm are not registered.Reading position
Presentation companion note
.pptx viewer, use Open companion note to create or claim
one same-directory, same-basename Markdown note for presentation-level
writing. Merely opening a PPTX does not write the Vault.Compatibility awareness
Diagnostic summary
Languages
Privacy
Requirements: desktop Obsidian, Node.js 22, and npm.
npm install
npm run build
mkdir -p /path/to/vault/.obsidian/plugins/office-viewer
cp main.js manifest.json styles.css /path/to/vault/.obsidian/plugins/office-viewer/
Enable Office Viewer under Community plugins, then open a .pptx or
.docx from the Vault file explorer. Rebuild and copy the same three files after source
changes. npm run test:e2e performs the equivalent build-and-install path in a
sandboxed test Vault without using a personal Obsidian configuration.
A release ZIP contains the three runtime files (main.js, manifest.json,
and styles.css) plus the project license, attribution notice, and bundled
renderer licenses. GitHub Releases publish only the three Obsidian runtime
files (with build provenance attestations); the full ZIP stays available as the
tag CI artifact from npm run release:package. Extract the ZIP contents to
<Vault>/.obsidian/plugins/office-viewer/, reload Obsidian, and enable
Office Viewer. To upgrade, disable the plugin, replace all three runtime
files together, reload Obsidian, and re-enable it. To uninstall, disable the
plugin and remove the office-viewer directory; the plugin never writes to
source PPTX or DOCX files.
npm install
npm run fixtures
npm run verify
npm run test:e2e
npm run test:e2e:docx
npm run test:compatibility
npm run test:compatibility:docx
npm run test:performance
npm run test:performance:docx
npm run test:performance:baseline
npm run release:check
npm run release:package
npm run test:release
npm run test:e2e downloads and launches a sandboxed Obsidian instance. It
does not use the normal Obsidian configuration or a personal Vault. Six cases
exercise the production adapter; a separate installed case uses a test-only
adapter to inject one recoverable slide failure, then rebuilds the production
bundle before exiting.
npm run test:compatibility opens the representative corpus through the same
installed plugin path, captures fixed-environment screenshots, compares them
with approved visual baselines, and writes ignored run artifacts under
artifacts/compatibility/. The first renderer currently scores 90.0% readable
main content and meets the 80% M0 gate with known SVG degradation; see
docs/compatibility/aiden-pptx-renderer-1.2.4.md.
npm run test:compatibility:docx uses a pinned installed Obsidian environment
and requires at least 90% readable main-body content. The accepted result is
100%; see docs/compatibility/docx-preview-0.3.6.md.
npm run test:performance repeats the installed-Obsidian benchmark on the
current machine and writes ignored evidence under
artifacts/performance/aiden-pptx-renderer-1.2.4/. The committed
reference-machine result for @aiden0z/[email protected] is
tests/performance/baselines/aiden-pptx-renderer-1.2.4.json, with the matching
human-readable report in
docs/performance/aiden-pptx-renderer-1.2.4.md. Validate the committed evidence
shape and fixed gate calculation with npm run test:performance:baseline.
npm run test:performance:docx measures DOCX first-readable, search-ready,
query, cleanup, stress DOM, and heap budgets in installed Obsidian. The accepted
baseline is documented in docs/performance/docx-preview-0.3.6.md.
To refresh the reference baseline, run npm run test:performance without
changing its samples or thresholds, inspect the recorded verdict, then copy
artifacts/performance/aiden-pptx-renderer-1.2.4/results.json and
artifacts/performance/aiden-pptx-renderer-1.2.4/summary.md byte-for-byte over
those two committed files. Run
npm run test:performance:baseline after the copy. A budget miss remains valid
evidence and must be committed as FAIL rather than tuned away.
npm run release:check validates package, manifest, compatibility-version,
supported-extension, license, and required-documentation consistency without
requiring a version bump on main.
npm run release:check:publish adds tag, commit, and GitHub-release guards
for tagged releases only. Publish releases with the plain manifest version as
the tag and release name, for example 0.2.1, not v0.2.1; Obsidian matches
the GitHub release directly against manifest.json.
npm run release:package creates a
deterministic dist/office-viewer-<version>.zip. npm run test:release
installs that extracted ZIP into a clean test Vault, opens real PPTX and DOCX
fixtures,
rehearses an in-place package upgrade, and verifies disable/removal without
network access or source mutation. Tag CI requires the exact manifest version
as the tag name, runs publish checks, attests main.js / manifest.json /
styles.css, proves a second package build is byte-identical, uploads the ZIP
as a workflow artifact, and publishes only those three attested files to the
GitHub Release.
.pptx and .docx are parsed. Legacy .ppt receives an explicit local
explanation and external-open fallback; legacy .doc and macro-enabled
.docm are not registered.PRIVACY.md and SECURITY.md..ppt/.doc parsing, OCR, Vault-wide
search, main-slide search highlighting, DOCX paragraph references or embeds,
multi-slide or full-deck embeds, prose-mixed or multi-embed Live Preview
lines, telemetry, accounts, licensing, and cloud services are out of scope.The committed minimal presentation is generated from repository-authored
content with PptxGenJS. See tests/fixtures/README.md for provenance.
Office Viewer is an open-source project by Jerry Pan.