A minimalist, modern PDF reader and organizer with built-in AI chat capabilities. Built with Electron, Vue 3, and Gemini AI.
- Clean, distraction-free interface - Minimalist design focused on reading
- Smooth navigation - Pan and zoom with mouse controls
- Page tracking - Automatic page detection and navigation
- Document library - Organize and access your PDFs easily
- Starred documents - Bookmark your favorites
- Search - Full-text search across all pages with result navigation
- Multimodal AI integration - Chat with Google's Gemini AI about your documents
- Context-aware - Add specific pages, page ranges, or the entire document as context
- Streaming responses - Real-time AI responses with markdown formatting
- Chat history - Automatically saves all conversations
- Model selection - Choose from multiple Gemini models
- Custom models - Add your own Gemini models in settings
- Dark mode - System-aware dark theme
- Responsive design - Adapts to window size
- Glassmorphism UI - Modern, translucent design elements
- Keyboard shortcuts - Efficient navigation
- Help modal - Built-in quick guide
- Desktop Framework: Electron 38
- Frontend: Vue 3 (Composition API)
- PDF Rendering: vue-pdf-embed + PDF.js
- AI: Google Gemini API (via Vercel AI SDK)
- Icons: Lucide Vue
- Markdown: markdown-it + highlight.js
- Build Tool: Vite + electron-vite
- Node.js 18 or higher
- npm or pnpm
-
Clone the repository
git clone https://github.com/yourusername/opendocs.git cd opendocs -
Install dependencies
npm install # or pnpm install -
Get a Gemini API Key
- Visit Google AI Studio
- Create a new API key
- You'll add this in the app's Settings later
npm run dev
# or
pnpm devThis starts the Electron app with hot-reload enabled.
opendocs/
βββ src/
β βββ main/ # Electron main process
β β βββ index.js # Main entry point, IPC handlers
β βββ preload/ # Preload scripts
β β βββ index.js # IPC bridge
β βββ renderer/ # Vue app (renderer process)
β βββ src/
β β βββ assets/ # CSS, images
β β βββ components/ # Vue components
β β β βββ AIChatSidebar.vue
β β β βββ DocListItem.vue
β β β βββ ReaderToolbar.vue
β β βββ views/ # Main views
β β β βββ LibraryView.vue
β β β βββ ReaderView.vue
β β β βββ SettingsView.vue
β β βββ router/ # Vue Router
β β βββ App.vue
β β βββ index.html
βββ resources/ # App icons
βββ package.json
npm run build
# or
pnpm build# macOS
npm run build:mac
# Windows
npm run build:win
# Linux
npm run build:linuxBuilt apps will be in the dist/ folder.
- Launch opendocs
- Click settings in the bottom left
- Enter your Gemini API key
- (Optional) Add custom AI models
- Click open in the bottom right
- Or drag and drop a PDF into the library
- Open a PDF
- Click the β¨ icon in the top right
- (Optional) Click β to add context:
- Current Page - Just the page you're viewing
- Page Range - Specify a range (e.g., 1-10)
- Full Document - Entire PDF
- Type your question and press Enter
- Click the π icon in the toolbar
- Type your search query
- Use β β arrows to navigate results
Esc- Close search or modalsβ/Ctrl + F- Search in document (when in reader)
The AI chat uses a sophisticated context management system:
- Current Page: Extracts text from the visible page
- Page Range: Allows you to specify which pages to include
- Full Document: Processes the entire PDF text
Context items appear as chips in the input area and can be removed individually.
- Conversations are automatically saved to localStorage
- Each chat is linked to its document
- History is accessible via the π icon in the chat sidebar
- You can delete individual chats
- Default models: Gemini 2.0 Flash Lite, 1.5 Flash, 1.5 Pro
- Add custom models in Settings β Models
- Each model requires: Model Name and Model ID
Configure app builds for different platforms:
- App icons for macOS (.icns), Windows (.ico), Linux (.png)
- App ID, category, and bundle identifier
- Platform-specific settings
Development workflow shortcuts (if using cook):
dev- Start development serverbuild- Build for macOSinstall- Install dependencies
- Ensure the file path is valid
- Check browser console for errors
- Try a different PDF
- Verify API key is set in Settings
- Check internet connection
- Ensure the model ID is correct
- PDFs with scanned images (OCR) may not have extractable text
- Try a different PDF with native text
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is open source and available under the MIT License.
- PDF.js - Mozilla's PDF rendering library
- Gemini AI - Google's multimodal AI
- Electron - Cross-platform desktop framework
- Vue.js - Progressive JavaScript framework
Made with β€οΈ for better document reading from TheAlphaOnes