GenOffice fork with a provider-agnostic AI slot — bring your own local LLM or OpenRouter key
4
stars
41
commits
TypeScript
primary language
Aug 18, 2026
updated
A free, open-source AI Office suite — this fork drops the cloud-account requirement and talks to any OpenAI-compatible endpoint instead: a local server (Ollama, LM Studio, vLLM, llama.cpp server, text-generation-webui) or a hosted API (OpenRouter, or any other OpenAI-compatible provider).
Forked from genspark-ai/genoffice (Apache-2.0). Changed per Apache-2.0 §4(b): the AI provider defaults (
packages/ai-provider/src/providers.ts) and settings UI (apps/shell/src/renderer/src/SettingsModal.tsx) — see git history for the full diff. Everything else is upstream GenOffice, unmodified.
Demo — upstream's video; the editor features it shows are unchanged in this fork, only the AI provider setup differs.
GenOffice is a free, open-source alternative to Microsoft Office for macOS,
Windows, and Linux, built around AI editing as a first-class workflow rather
than a bolted-on chat box. It opens and saves the real Microsoft Office
formats — Word (.docx), Excel (.xlsx), PowerPoint (.pptx) — and edits
PDF and Markdown too: a word processor, spreadsheet, presentation editor,
PDF editor, and Markdown editor as six Electron apps sharing one engine
layer.
Watch the demo video on YouTube
.docx editing — only what you touched changes; Word never notices..xlsx sidecar, own charts, pivot tables, slicers..pptx engine with masters, layouts, smart guides, non-destructive crop.This fork does not publish prebuilt installers — build from source (see
Development below: npm install, then npm run dist:mac /
dist:win / dist:linux). Upstream's own prebuilt installers, linked from
genspark-ai/genoffice, default to
the Genspark cloud provider — they are not this fork.
| App | Product | What it is |
|---|---|---|
apps/docs | GenOffice Docs | .docx word processor. Byte-preserving round trip: only dirty paragraphs are regenerated (paragraph patch), everything else in the original file is kept byte-for-byte, so opening and saving never breaks layout in Word. Paginated view whose line metrics reproduce the original document's layout, tracked changes, comments, styles, equations, ink. |
apps/sheets | GenOffice Sheets | .xlsx spreadsheet. UI built on the open-source Univer core (Apache-2.0) with a large layer of in-house extensions; .xlsx import/export runs through an in-house Rust sidecar (calamine + IronCalc), charts are rendered in-house (Konva), plus pivot tables, slicers, conditional formatting, and formula tracing. |
apps/slides | GenOffice Slides | .pptx presentations. In-house .pptx parse/render/edit engine with masters, charts, cropping, ink, and text shaping (HarfBuzz metrics). |
apps/pdf | GenOffice PDF | .pdf viewer/editor on pdf.js (Apache-2.0) + pdf-lib (MIT): annotations, forms, outlines, stamps, signatures, page operations, and printing support. True text editing — paragraph selection with in-block reflow, alignment restoration, original-font preservation — and content-stream image insert/edit, all rewriting page content streams through PDFium wasm (BSD-3-Clause) with subset-embedded fonts — no cover-up annotations. |
apps/markdown | GenOffice Markdown | .md / .markdown editor: Tiptap block editor over plain Markdown files — headings, lists, tables, images, code blocks — saved back as plain Markdown, hosted in shell tabs. |
apps/shell | GenOffice | The suite shell: home screen, tabbed hosting of the five editors, light/dark/system theme, auto-update. |
Every app embeds the same AI panel: block-granular AI editing with version snapshots and diffs in docs, a tool-calling agent over workbook/slide/PDF state in the others.
The whole suite ships light / dark / system UI themes built on shared design
tokens (packages/ui), with a CI guard that keeps chrome colors on the token
system. Document surfaces stay light in dark mode — Word-style dark chrome
around white paper — so files render and export identically in both themes.
AI backend. On a fresh install this fork defaults to the Local /
Custom (OpenAI-compatible) provider with the base URL, model, and key all
blank — nothing is pre-configured, no account or cloud sign-in required.
Point it at any server that speaks the OpenAI chat/completions wire
protocol:
| Server | Base URL | Model | API key |
|---|---|---|---|
| Ollama | http://localhost:11434/v1 | e.g. llama3.1 | leave blank |
| LM Studio | http://localhost:1234/v1 | the model loaded in-app | leave blank |
| OpenRouter | https://openrouter.ai/api/v1 | e.g. openai/gpt-4o-mini | your OpenRouter key |
Settings → AI Provider → Local / Custom (OpenAI-compatible), fill in the three fields, then Test connection.
Upstream's other providers are still selectable in the same screen and work
as upstream describes: Genspark signs in via a device-code flow (no key
needed) and also unlocks the Genspark ("gsk") tool endpoints the agents
build on — web/image search, image generation and editing, media analysis,
audio transcription (packages/ai-search); Claude / Gemini / DeepSeek /
OpenAI need that vendor's own API key.
All pure TypeScript, no Electron dependency, unit-tested (except the UI kit):
packages/docx-engine — docx parsing → block tree (with docxIndex
anchors and passthrough), OOXML fragment generation, byte-level paragraph
patching.packages/pptx-engine / packages/pptx-render — pptx model and rendering.packages/file-parse — text extraction for AI attachments (office formats,
text formats).packages/agent-core — the AI agent loop and skill composition shared by
every app.packages/ai-provider — provider abstraction and streaming for the model
backends.packages/ai-search — Genspark auth + web/image search tools.packages/i18n, packages/ui, packages/project-store,
packages/electron-utils — shared i18n core, React UI kit, recent-files
store, and Electron main-process helpers.npm install
npm run fixtures # generate test .docx fixtures
npm test # engine + app unit tests (docs/sheets/slides need no display)
npm run typecheck # tsc --noEmit across every workspace
npm run dev # all five editors + shell against Vite dev servers
npm run dev:docs # a single app (same pattern works per workspace)
npm run dist:mac # package macOS dmg (regenerates third-party notices)
npm run dist:win # package Windows nsis installer
npm run dist:linux # package Linux AppImage + deb + rpm
The sheets app additionally needs a Rust toolchain for its xlsx sidecar
(cargo on PATH); npm run build -w @genoffice/sheets compiles it
automatically.
Local UI/e2e driver scripts (Playwright + Electron, for local acceptance, not
committed by default) live in scripts/drivers/.
open docx ─► archive original by hash (never touched)
─► docx-engine parses word/document.xml top-level elements (w:p / w:tbl / …)
─► Block tree, each block anchored by docxIndex + original XML slice
─► Tiptap streaming editor (manual + AI editing, dirty tracking)
save ─► dirty blocks → OOXML fragments (referencing existing styles only)
─► splice into original document.xml (untouched blocks keep original bytes)
─► repack zip; all other entries copied byte-for-byte
The same philosophy holds in sheets and slides: the original file is the source of truth, edits are applied as narrow patches, and everything the editor didn't touch survives the round trip untouched.
Is GenOffice free? Yes. GenOffice is free and open-source under the Apache-2.0 license — no trial, no paid tier for the apps themselves.
Can GenOffice open Microsoft Word, Excel, and PowerPoint files?
Yes. GenOffice opens and saves native .docx, .xlsx, and .pptx files.
Saving is byte-preserving: parts of the file you didn't touch are written
back byte-for-byte, so documents keep working in Microsoft Office.
Does GenOffice work offline? Document editing is fully local — files never leave your machine to be opened, edited, or saved. The AI features need a network connection to whatever endpoint you configure in Settings → AI Provider — a LAN-only local server (e.g. Ollama) keeps that traffic off the public internet too; a cloud provider (Genspark, OpenRouter, a named vendor) does not.
Can GenOffice edit PDF files? Yes — real PDF text and image editing that rewrites the page content stream with the original fonts preserved, not cover-up annotations.
See SECURITY.md for the process security posture (renderer sandboxing, IPC validation, external-link gating) and the threat models for AI-generated content.
GenOffice would not be possible without these open-source projects:
npm run notices regenerates the bundled third-party license summary
(tools/gen-third-party-notices.mjs); all runtime dependencies are
MIT/Apache-2.0/BSD-3-Clause/OFL, and the bundled fonts (Liberation, Carlito,
Caladea, Noto CJK subsets) are OFL/Apache.
GenOffice is licensed under the Apache License 2.0, with one
exception: the ee/ directory is reserved for future enterprise modules and
is covered by the GenOffice Enterprise License.
The GenOffice and Genspark names and logos are trademarks of Mainfunc, Inc. The Apache-2.0 license does not grant permission to use them (see section 6); forks should use their own branding.
TypeScript
94.2%
CSS
3.4%
Rust
1.6%
GenOffice fork with a provider-agnostic AI slot — bring your own local LLM or OpenRouter key
4
stars
41
commits
TypeScript
primary language
Aug 18, 2026
updated
A free, open-source AI Office suite — this fork drops the cloud-account requirement and talks to any OpenAI-compatible endpoint instead: a local server (Ollama, LM Studio, vLLM, llama.cpp server, text-generation-webui) or a hosted API (OpenRouter, or any other OpenAI-compatible provider).
Forked from genspark-ai/genoffice (Apache-2.0). Changed per Apache-2.0 §4(b): the AI provider defaults (
packages/ai-provider/src/providers.ts) and settings UI (apps/shell/src/renderer/src/SettingsModal.tsx) — see git history for the full diff. Everything else is upstream GenOffice, unmodified.
Demo — upstream's video; the editor features it shows are unchanged in this fork, only the AI provider setup differs.
GenOffice is a free, open-source alternative to Microsoft Office for macOS,
Windows, and Linux, built around AI editing as a first-class workflow rather
than a bolted-on chat box. It opens and saves the real Microsoft Office
formats — Word (.docx), Excel (.xlsx), PowerPoint (.pptx) — and edits
PDF and Markdown too: a word processor, spreadsheet, presentation editor,
PDF editor, and Markdown editor as six Electron apps sharing one engine
layer.
Watch the demo video on YouTube
.docx editing — only what you touched changes; Word never notices..xlsx sidecar, own charts, pivot tables, slicers..pptx engine with masters, layouts, smart guides, non-destructive crop.This fork does not publish prebuilt installers — build from source (see
Development below: npm install, then npm run dist:mac /
dist:win / dist:linux). Upstream's own prebuilt installers, linked from
genspark-ai/genoffice, default to
the Genspark cloud provider — they are not this fork.
| App | Product | What it is |
|---|---|---|
apps/docs | GenOffice Docs | .docx word processor. Byte-preserving round trip: only dirty paragraphs are regenerated (paragraph patch), everything else in the original file is kept byte-for-byte, so opening and saving never breaks layout in Word. Paginated view whose line metrics reproduce the original document's layout, tracked changes, comments, styles, equations, ink. |
apps/sheets | GenOffice Sheets | .xlsx spreadsheet. UI built on the open-source Univer core (Apache-2.0) with a large layer of in-house extensions; .xlsx import/export runs through an in-house Rust sidecar (calamine + IronCalc), charts are rendered in-house (Konva), plus pivot tables, slicers, conditional formatting, and formula tracing. |
apps/slides | GenOffice Slides | .pptx presentations. In-house .pptx parse/render/edit engine with masters, charts, cropping, ink, and text shaping (HarfBuzz metrics). |
apps/pdf | GenOffice PDF | .pdf viewer/editor on pdf.js (Apache-2.0) + pdf-lib (MIT): annotations, forms, outlines, stamps, signatures, page operations, and printing support. True text editing — paragraph selection with in-block reflow, alignment restoration, original-font preservation — and content-stream image insert/edit, all rewriting page content streams through PDFium wasm (BSD-3-Clause) with subset-embedded fonts — no cover-up annotations. |
apps/markdown | GenOffice Markdown | .md / .markdown editor: Tiptap block editor over plain Markdown files — headings, lists, tables, images, code blocks — saved back as plain Markdown, hosted in shell tabs. |
apps/shell | GenOffice | The suite shell: home screen, tabbed hosting of the five editors, light/dark/system theme, auto-update. |
Every app embeds the same AI panel: block-granular AI editing with version snapshots and diffs in docs, a tool-calling agent over workbook/slide/PDF state in the others.
The whole suite ships light / dark / system UI themes built on shared design
tokens (packages/ui), with a CI guard that keeps chrome colors on the token
system. Document surfaces stay light in dark mode — Word-style dark chrome
around white paper — so files render and export identically in both themes.
AI backend. On a fresh install this fork defaults to the Local /
Custom (OpenAI-compatible) provider with the base URL, model, and key all
blank — nothing is pre-configured, no account or cloud sign-in required.
Point it at any server that speaks the OpenAI chat/completions wire
protocol:
| Server | Base URL | Model | API key |
|---|---|---|---|
| Ollama | http://localhost:11434/v1 | e.g. llama3.1 | leave blank |
| LM Studio | http://localhost:1234/v1 | the model loaded in-app | leave blank |
| OpenRouter | https://openrouter.ai/api/v1 | e.g. openai/gpt-4o-mini | your OpenRouter key |
Settings → AI Provider → Local / Custom (OpenAI-compatible), fill in the three fields, then Test connection.
Upstream's other providers are still selectable in the same screen and work
as upstream describes: Genspark signs in via a device-code flow (no key
needed) and also unlocks the Genspark ("gsk") tool endpoints the agents
build on — web/image search, image generation and editing, media analysis,
audio transcription (packages/ai-search); Claude / Gemini / DeepSeek /
OpenAI need that vendor's own API key.
All pure TypeScript, no Electron dependency, unit-tested (except the UI kit):
packages/docx-engine — docx parsing → block tree (with docxIndex
anchors and passthrough), OOXML fragment generation, byte-level paragraph
patching.packages/pptx-engine / packages/pptx-render — pptx model and rendering.packages/file-parse — text extraction for AI attachments (office formats,
text formats).packages/agent-core — the AI agent loop and skill composition shared by
every app.packages/ai-provider — provider abstraction and streaming for the model
backends.packages/ai-search — Genspark auth + web/image search tools.packages/i18n, packages/ui, packages/project-store,
packages/electron-utils — shared i18n core, React UI kit, recent-files
store, and Electron main-process helpers.npm install
npm run fixtures # generate test .docx fixtures
npm test # engine + app unit tests (docs/sheets/slides need no display)
npm run typecheck # tsc --noEmit across every workspace
npm run dev # all five editors + shell against Vite dev servers
npm run dev:docs # a single app (same pattern works per workspace)
npm run dist:mac # package macOS dmg (regenerates third-party notices)
npm run dist:win # package Windows nsis installer
npm run dist:linux # package Linux AppImage + deb + rpm
The sheets app additionally needs a Rust toolchain for its xlsx sidecar
(cargo on PATH); npm run build -w @genoffice/sheets compiles it
automatically.
Local UI/e2e driver scripts (Playwright + Electron, for local acceptance, not
committed by default) live in scripts/drivers/.
open docx ─► archive original by hash (never touched)
─► docx-engine parses word/document.xml top-level elements (w:p / w:tbl / …)
─► Block tree, each block anchored by docxIndex + original XML slice
─► Tiptap streaming editor (manual + AI editing, dirty tracking)
save ─► dirty blocks → OOXML fragments (referencing existing styles only)
─► splice into original document.xml (untouched blocks keep original bytes)
─► repack zip; all other entries copied byte-for-byte
The same philosophy holds in sheets and slides: the original file is the source of truth, edits are applied as narrow patches, and everything the editor didn't touch survives the round trip untouched.
Is GenOffice free? Yes. GenOffice is free and open-source under the Apache-2.0 license — no trial, no paid tier for the apps themselves.
Can GenOffice open Microsoft Word, Excel, and PowerPoint files?
Yes. GenOffice opens and saves native .docx, .xlsx, and .pptx files.
Saving is byte-preserving: parts of the file you didn't touch are written
back byte-for-byte, so documents keep working in Microsoft Office.
Does GenOffice work offline? Document editing is fully local — files never leave your machine to be opened, edited, or saved. The AI features need a network connection to whatever endpoint you configure in Settings → AI Provider — a LAN-only local server (e.g. Ollama) keeps that traffic off the public internet too; a cloud provider (Genspark, OpenRouter, a named vendor) does not.
Can GenOffice edit PDF files? Yes — real PDF text and image editing that rewrites the page content stream with the original fonts preserved, not cover-up annotations.
See SECURITY.md for the process security posture (renderer sandboxing, IPC validation, external-link gating) and the threat models for AI-generated content.
GenOffice would not be possible without these open-source projects:
npm run notices regenerates the bundled third-party license summary
(tools/gen-third-party-notices.mjs); all runtime dependencies are
MIT/Apache-2.0/BSD-3-Clause/OFL, and the bundled fonts (Liberation, Carlito,
Caladea, Noto CJK subsets) are OFL/Apache.
GenOffice is licensed under the Apache License 2.0, with one
exception: the ee/ directory is reserved for future enterprise modules and
is covered by the GenOffice Enterprise License.
The GenOffice and Genspark names and logos are trademarks of Mainfunc, Inc. The Apache-2.0 license does not grant permission to use them (see section 6); forks should use their own branding.
TypeScript
94.2%
CSS
3.4%
Rust
1.6%