PowerPoint Viewer
pendingby Blue obsidian
View PowerPoint (.pptx) files directly inside the app.
Obsidian PowerPoint Viewer Plugin
A powerful Obsidian community plugin that allows you to open and read PowerPoint files (.pptx and .ppt) directly inside Obsidian with perfect rendering fidelity.
Features
- Custom View for PowerPoint Files: Opens
.pptxand.pptfiles inside Obsidian instead of externally - Perfect Rendering: Uses LibreOffice to convert presentations to PDF for pixel-perfect display
- Intelligent PDF Caching: Automatically caches converted PDFs based on file hash - subsequent opens are instant!
- Silent Conversion (Windows): No more CMD popup windows during conversion
- Thumbnail Sidebar: Slim sidebar with compact slide thumbnails for quick navigation
- Navigation Toolbar:
- Previous/Next slide buttons
- Slide counter (e.g., "3 / 20")
- Zoom in/out controls
- Keyboard Navigation:
↑/↓: Previous/Next slide+/-: Zoom in/out
- Desktop Support: Works on macOS, Windows, and Linux with LibreOffice installed
- Clean UI: Matches Obsidian's design language (inspired by PDF viewer)
- Automatic Cache Cleanup: Old cached PDFs (>7 days) are automatically removed
Requirements
Desktop (Required for conversion)
LibreOffice must be installed for PowerPoint to PDF conversion:
- macOS:
brew install --cask libreoffice - Windows: Download from libreoffice.org
- Linux:
sudo apt install libreoffice
Development Prerequisites
- Node.js or Bun installed
- Obsidian installed
Install Dependencies
bun install
# or
npm install
Build the Plugin
bun run build
# or
npm run build
This creates main.js which bundles all required libraries locally.
Development Mode (Watch)
bun run dev
# or
npm run dev
Installation in Obsidian
Method 1: Manual Installation (Development)
- Build the plugin (see above)
- Copy these files to your Obsidian vault's plugins folder:
<vault>/.obsidian/plugins/obsidian-powerpoint/ ├── main.js ├── manifest.json └── styles.css - Open Obsidian Settings → Community Plugins
- Disable Safe Mode (if enabled)
- Reload Obsidian or click "Reload plugins"
- Enable "PowerPoint Viewer" in the plugin list
Method 2: Symlink (For Development)
# Navigate to your vault's plugins directory
cd /path/to/your/vault/.obsidian/plugins/
# Create a symlink to this project
ln -s /Users/andrewemmanuel/Documents/Codes/obsidian-powerpoint obsidian-powerpoint
# Reload Obsidian
Usage
- Install LibreOffice (see Requirements above)
- Place a
.pptxor.pptfile in your Obsidian vault - Click on the file in the file explorer
- First time: The plugin will convert it to PDF (may take a few seconds) and cache it
- Subsequent opens: The cached PDF is loaded instantly - no reconversion needed!
- The presentation will open with perfect rendering
- Use the thumbnail sidebar, toolbar buttons, or keyboard shortcuts to navigate
Keyboard Shortcuts
- Up Arrow (
↑): Previous slide - Down Arrow (
↓): Next slide - Plus (
+): Zoom in - Minus (
-): Zoom out
PDF Caching System
The plugin uses an intelligent caching system to dramatically improve performance:
- Hash-based Caching: Each PowerPoint file is hashed (MD5), and the converted PDF is stored with this hash
- Instant Loading: If you open the same file again, the cached PDF is used - no reconversion needed
- Smart Invalidation: If you modify the PowerPoint file, the hash changes and a new PDF is generated
- Cache Location: PDFs are stored in your system's temp directory under
obsidian-pptx-cache/ - Automatic Cleanup: PDFs older than 7 days are automatically removed when the plugin loads
- No Manual Management: The cache is completely transparent - you don't need to do anything!
Performance Impact:
- First open: 3-10 seconds (depending on presentation size)
- Subsequent opens: <1 second (instant from cache)
Testing
- Download or create a sample
.pptxfile - Add it to your Obsidian vault
- Click on the file to open it
- Verify:
- Slides render correctly
- Navigation buttons work
- Keyboard shortcuts work
- Zoom controls work
- Slide counter updates
Project Structure
obsidian-powerpoint/
├── src/
│ ├── main.ts # Plugin entry point
│ ├── PptxView.ts # Custom view implementation
│ └── converter.ts # PPTX/PPT to PDF conversion
├── manifest.json # Plugin metadata
├── styles.css # Plugin styles
├── esbuild.config.mjs # Build configuration
├── package.json # Dependencies
└── tsconfig.json # TypeScript configuration
Architecture
Conversion Pipeline
- File Loading: User opens
.pptxor.pptfile - LibreOffice Conversion: File is converted to PDF using LibreOffice headless mode
- PDF Rendering: PDF is rendered using PDF.js with canvas-based rendering
- Display: Slides shown with thumbnail sidebar and navigation controls
Components
main.ts: Registers the custom view and file extension handlers (.pptx,.ppt)converter.ts: Handles PowerPoint to PDF conversion:- Tries LibreOffice conversion (desktop)
- Provides helpful error messages for mobile
- Cleans up temporary PDF files
PptxView.ts: Implements the slide viewer with:- PDF.js rendering on canvas elements
- Thumbnail sidebar with slide previews
- Toolbar with navigation controls
- Keyboard event handlers
- Zoom functionality
styles.css: Obsidian-themed styling matching the PDF viewer design
Future Enhancements
- Mobile/Android support with web-based conversion
- Slide annotations and highlights
- Export slides as images
- Text extraction from slides
- Note linking to specific slides
- Presentation mode (fullscreen)
Technical Details
- Language: TypeScript
- Platform: Obsidian Plugin API
- Conversion: LibreOffice (headless mode)
- Renderer: PDF.js (canvas-based)
- Build Tool: esbuild
- Target: ES6, works in Electron environment
Troubleshooting
Plugin doesn't appear in Obsidian
- Ensure all three files (
main.js,manifest.json,styles.css) are in the plugins folder - Check Obsidian console (Ctrl+Shift+I / Cmd+Option+I) for errors
- Verify Safe Mode is disabled
PowerPoint file doesn't open
Error: "LibreOffice not found"
- Install LibreOffice (see Requirements section)
- Verify LibreOffice is in your system PATH
- On macOS: Check
/Applications/LibreOffice.app/Contents/MacOS/sofficeexists - On Windows: Check
C:\Program Files\LibreOffice\program\soffice.exeexists
Error: "Failed to render PDF"
- Check console for detailed error messages
- Ensure the PowerPoint file is not corrupted
- Try with a simple test presentation first
- Verify LibreOffice can open the file directly
Conversion is slow
- First conversion creates a temporary PDF (takes a few seconds)
- Subsequent views should be faster
- Large presentations with many images may take longer
Build fails
- Ensure dependencies are installed:
bun install - Check Node.js/Bun version compatibility
- Clear
node_modulesand reinstall
Mobile/Android Support
Currently, the plugin requires LibreOffice for conversion, which is only available on desktop platforms. Mobile support is planned for future releases using web-based conversion services.
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.