Open-source, local-first browser extension for exporting the AI chat conversation currently open in your browser to local files.
The extension is designed around no telemetry, no analytics, no remote rendering, no external export servers, no remote hosted code, and minimal Manifest V3 permissions.
No account is required to use Jelluvi. The extension operates on the supported AI chat page already open in your browser.
- Product name: Jelluvi.
- Icon source:
assets/brand/jelluvi.png. - Runtime surfaces use generated 128px/512px derivatives so the canonical 1200px source is not shipped on every popup or landing-page load.
- Primary action and focus color:
#005FEFin the light theme. - Brand accent color:
#00C6FF. - Light theme uses a clean white background and neutral slate text.
- Dark theme uses a dark navy or near-black background with readable slate text.
- Core exports remain local-first with no telemetry, no server uploads, no remote rendering, no external fonts, and no remote hosted code.
- ChatGPT at
https://chatgpt.com/*andhttps://chat.openai.com/*is stable. - Claude and Gemini are beta visible-message adapters with documented limitations.
- Perplexity and NotebookLM are experimental visible-message adapters until real live QA passes.
For current adapter status and live QA criteria, see Provider QA Checklists.
This project is not affiliated with, endorsed by, or sponsored by OpenAI, Anthropic, Google, Perplexity, or any AI platform.
- Markdown
.md - TXT
.txt - JSON
.json - CSV
.csv - HTML
.html - PDF
.pdf - DOCX
.docx - PNG snapshot
.png - ZIP bundle
.zip
Markdown profiles are available for default archives, Obsidian, GitHub, GitBook, and research logs.
- The popup contains only provider status, format choices, Export, Copy MD, Preview, and transient preparation controls. There is no manual Scan button or Options drawer.
- Export, Copy MD, and Preview prepare or refresh the local snapshot automatically.
- Preview provides provider-neutral all, selected, user, assistant, and range views. The current prepared view can be downloaded, copied, opened as PDF, or saved to the opt-in Local Library.
- Settings contains persistent export, content, PDF, privacy, library, and batch controls. Support and product documentation remain on GitHub and the website.
Provider metadata, origins, support levels, limitations, and capabilities are defined in one catalog. See Provider architecture.
pnpm install --frozen-lockfile
pnpm buildThen load dist/ as an unpacked extension:
- Open
chrome://extensions. - Enable
Developer mode. - Click
Load unpacked. - Select the project
dist/directory.
- Open
edge://extensions. - Enable
Developer mode. - Click
Load unpacked. - Select the project
dist/directory.
- Open
vivaldi://extensions. - Enable
Developer mode. - Click
Load unpacked. - Select the project
dist/directory.
pnpm dev
pnpm build
pnpm package
pnpm check
pnpm test:e2epnpm check runs lint, typecheck, unit tests, and a production build.
Core exports stay free and open-source. Jelluvi does not add ads, telemetry, branding in exports by default, feature lockouts, or pricing gates around the core local export workflow.
Support channels:
- GitHub Sponsors:
https://github.com/sponsors/voropaevv
Business model:
- Donations support maintenance, docs, provider fixtures, and compatibility updates.
- Paid support can cover setup help, private QA guidance, and migration support.
- Custom enterprise builds are optional services for organizations with stricter packaging needs.
- A future cloud companion may be explored, but it must remain optional and separate from core local exports.
- Processing happens locally in the browser after explicit user action.
- No telemetry, analytics, ads, trackers, session replay, remote logging, remote rendering, or export server is used.
- No Jelluvi account is required.
- Conversation content is not uploaded to Jelluvi or any export server.
- Conversation content is not stored by default.
- Browser storage is used for versioned local export, PDF, content, theme, and redaction preferences.
- Optional site access is requested only when the user starts batch discovery or batch export.
- Jelluvi does not request browsing-history (
tabs) or browser-downloads permissions.
- ChatGPT is the primary v1 platform.
- Secondary platform adapters are best-effort and currently scan visible loaded messages only.
- The extension exports the current conversation only; it does not scrape account-wide history in the background.
- PDF output is generated locally from the normalized conversation model. If local PDF generation fails, Jelluvi falls back to local PDF-ready HTML and shows a warning.
- PDF v1 embeds local Noto Sans and Noto Sans Mono fonts with Latin, Greek, and Cyrillic support. CJK text, complex emoji, and advanced formula layout may use fallback glyphs; formulas are preserved as plain text.
- PNG export is a local semantic long-image renderer for moderate selected or range exports. The maximum local PNG height is 16,000 px; longer chats fall back to a local text explanation and should use selected messages, ranges, PDF, HTML, or text formats.
- ZIP bundle mode stores selected formats under canonical
conversation.*names, includesmanifest.jsonwith settings and file hashes, and preserves embedded data-image assets underassets/with hashed filenames. - Some AI platform UI changes may require fixture and selector updates.
- Run
pnpm buildagain after changing source files, then reload the unpacked extension. - If provider detection does not answer, the popup exits the checking state after three seconds and
shows
Retry. Reload Jelluvi and the chat tab if retry still fails. - If no messages are found, confirm the active tab is an open supported AI chat conversation.
- If an export is marked partial, let the current chat finish loading and export again.
- If a download does not appear, check whether the browser blocked page-initiated downloads.
- If a secondary platform export looks incomplete, verify the first and last messages before relying on the file.
Product and release detail:
pnpm build
pnpm packageThe package script writes release/jelluvi-v<version>.zip and a matching .sha256 checksum.
Before publishing changes, verify that generated artifacts and local files are not tracked:
git ls-filesRun a current tree secret scan:
gitleaks detect --source . --redact --verboseFor a full git history review, inspect all reachable commits and then run the same scanner against the repository history:
git log --all --oneline
gitleaks detect --source . --redact --verbose