{"slug": "show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office", "title": "Show HN: AI-first open-source alternative to Microsoft and Google Office", "summary": "InjOffice, an AI-first open-source alternative to Microsoft and Google Office, released its source under Apache-2.0 on 2026-09-08, with 25 of 26 npm packages published at version 0.1.0. The project provides browser and server libraries for editing office artifacts, featuring plain-JSON models, provider-neutral agent change sets, and surgical OOXML patching, with the original OOXML bytes remaining the authority.", "body_md": "InjOffice is a set of browser and server libraries for editing office artifacts. It adds plain-JSON models, pure transformation engines, provider-neutral agent change sets, optional editor integrations, and surgical OOXML patching. A hosted InjOffice service is not required: consumers can use the browser-local WASM engine, run offline, inject their own backend, or opt into the in-repo `injoffice-server`.\n\nThe repository is a monorepo with independently consumable TypeScript packages, private apps, and Go modules. The TypeScript packages target Node.js 22 or newer and modern bundlers. UI integrations use React and, where noted, Univer OSS as an optional editor shell. Univer is not the file authority. Native paint compilers are a preview mode.\n\nRelease status (2026-09-08): the source is licensed under Apache-2.0; 25 of 26 npm packages are published at 0.1.0. `@injoffice/xlsx-wasm` is not yet published. See the [release checklist](/injectinglabs/injoffice/blob/main/docs/PUBLIC-RELEASE.md). The scoped v3 Native Office completion matrix is complete; broader format coverage remains partial and this is not Microsoft Office parity.\n\nThe original OOXML bytes remain the authority. The supported path is XLSX-first and the same shape for documents and presentations:\n\n1. Go `Extract*` reads package bytes (`xlsxpatch.ExtractNativeWorkbookV1` /`ExtractNativeWorkbookV2` ,`docxpatch.ExtractNativeDocumentV1` ,`pptxpatch.ExtractNativePPTX` ).\n2. The result is versioned native JSON consumed by `@injoffice/sheets` ,`@injoffice/docs` , and`@injoffice/pptx-native` .\n3. TypeScript paint compilers emit renderer-neutral preview commands. Paint is not a save path.\n4. Editors emit mutation JSON.\n5. Go `Apply*` writes those mutations back into the original archive.\n\nReact, Konva, DOM/HTML layout, screenshots, and Univer must not decide file identity or pass/fail semantics.\n\nTwenty-six TypeScript packages under `packages/`:\n\n| Package | Purpose | \n|---|---|\n| `@injoffice/agent-tools` | Model-neutral agent sessions, bounded reads, immutable change sets, approval hooks, CAS commits, verification, and a JSON tool dispatcher | \n| `@injoffice/agent-office` | Capability-scoped XLSX, DOCX, native/authored PPTX, and PDF adapters for the agent change-set lifecycle | \n| `@injoffice/sheets` | Native XLSX JSON contracts, sheet paint compilers, and fail-closed mutation batches | \n| `@injoffice/docs` | Native DOCX JSON contracts, pagination, and page-paint compilers | \n| `@injoffice/pptx-native` | Versioned native PPTX JSON contract shared by parsers, patchers, and renderers | \n| `@injoffice/pptx-authored` | Deterministic compiler from authored `DeckSpec` /`WireDeck` to native PPTX v1 | \n| `@injoffice/pptx-render` | DOM-free native PPTX RenderTree compiler and renderer-neutral paint commands | \n| `@injoffice/charts` | Chart specs, extraction, ECharts options, and optional Univer UI | \n| `@injoffice/pivots` | Pivot specs, deterministic aggregation, and optional Univer UI | \n| `@injoffice/shapes` | Shape specs, SVG geometry, XLSX conversion, and optional Univer UI | \n| `@injoffice/outlines` | Validated nested row/column groups with optional Univer commands and undo | \n| `@injoffice/sparklines` | Line, column, and win/loss models with optional Univer lifecycle commands and undo | \n| `@injoffice/print` | Spreadsheet print configuration, lifecycle events, native conversion, and host adapters | \n| `@injoffice/collab` | Presence, ordered edits, durable outbound journal, causal collaborative undo/redo, permissions, and live share | \n| `@injoffice/connectors` | Host-injected data sources, atomic lifecycle/refresh commands, and deterministic range preprocessing | \n| `@injoffice/slides` | `DeckSpec` authoring, wire compilation, and legacy React preview surfaces | \n| `@injoffice/pdf` | PDF page, text, image, annotation, form, OCR, and redaction operations | \n| `@injoffice/font-metrics` | Font discovery, native text-layout contracts, and HarfBuzz shaping | \n| `@injoffice/history` | Host-backed durable version lifecycle, isolated previews, restore lineage, and grid/text diffs | \n| `@injoffice/formulas` | Audited client formula facade, host-injected calculation jobs, and revisioned collaborative result distribution | \n| `@injoffice/native-runtime` | Browser-safe worker protocol and lifecycle shared by optional native WASM engines | \n| `@injoffice/xlsx-exchange` | Host-neutral XLSX snapshot/server-unit jobs, progress, cancellation, safe loading, and save-as | \n| `@injoffice/xlsx-wasm` | Optional browser worker distribution of the native Go XLSX extract/apply engine | \n| `@injoffice/pptx-wasm` | Optional browser worker distribution of the native Go PPTX extract/apply engine | \n| `@injoffice/docx-wasm` | Optional browser-worker distribution of the native DOCX extract/apply engine | \n| `@injoffice/univer-sheets` | Configurable composition of the complete public Univer Sheets plugin surface | \n\nPrivate workspace apps (not published):\n\n| App | Purpose | \n|---|---|\n| `apps/playground` | Browser engine proofs, browser-local native XLSX, DOCX, and PPTX round trips, and collaboration demos. | \n| `apps/docx-page-paint-worker` | Native DOCX page-paint worker | \n\nGo modules under `go/` are surgical file writers, native extract/apply engines, validators, an optional in-process collaboration hub, and an optional HTTP server:\n\n| Module | Purpose | \n|---|---|\n| `github.com/injectinglabs/injoffice/go/xlsxpatch` | Native XLSX extract/apply, charts, pivots, drawings, and archive-preserving patches | \n| `github.com/injectinglabs/injoffice/go/docxpatch` | Native DOCX extract/apply and surgical document edits | \n| `github.com/injectinglabs/injoffice/go/pptxpatch` | Native PPTX extract/apply and bounded PPTX generation | \n| `github.com/injectinglabs/injoffice/go/slidesqc` | Presentation quality checks | \n| `github.com/injectinglabs/injoffice/go/officecompat` | Format-neutral OPC preservation, mutation envelope, and native corpus | \n| `github.com/injectinglabs/injoffice/go/collab` | In-process room hub and linear operation log | \n| `github.com/injectinglabs/injoffice/go/injoffice-server` | Optional XLSX/DOCX/PPTX extract/mutations HTTP server, opaque artifact store, and collab HTTP+SSE | \n\nEach TypeScript package has its own README and five-minute example.\n\nFor npm consumers using Univer 0.25.1 (including the collaboration package's\npeer dependency), add `\"overrides\": { \"@univerjs/core\": { \"nanoid\": \"5.1.16\" } }`\nto your application's root `package.json`, run `npm install`, and check `npm audit`.\nThe repository's override does not propagate to consumers. See the\n[dependency advisory and mitigation](/injectinglabs/injoffice/blob/main/docs/DEPENDENCY-TRANSPARENCY.md#security-advisory-snapshot).\n\nPrerequisites: Node.js 22+ and the Go versions declared by each module's `go.mod`.\n\n```\nnpm ci\nnpm run typecheck\nnpm test\nnpm run build\nnpm run check:packages\n```\n\n`check:packages` imports every built ESM entry and inspects every `npm pack` payload so source-only or incomplete releases fail in CI.\n\nRun the browser playground with:\n\n```\nnpm run dev\n```\n\nOpen [http://127.0.0.1:3100](http://127.0.0.1:3100) directly into Sheets, the first of four comprehensive workspaces: Sheets, Docs, Slides, and PDF. The introduction is removed; legacy `#/overview` links open Sheets. Existing capabilities from the twenty-six TypeScript packages are grouped inside those examples, not separate sidebar pages. Advanced views use explicitly labelled independent samples where they do not share an artifact model.\n\nCreate and edit:\n\n- `#/sheets` live workbook plus native XLSX inspection and bounded write-back\n- `#/docs` browser-local real DOCX extraction, guarded text write-back, exact-byte readback, and explicit preservation/refusal evidence; it does not claim Word pagination or page-paint\n- `#/slides` DeckSpec authoring, themes, editable transitions, layout QC, and canvas editing\n- `#/pdf` real-file PDF viewing, high-DPI rendering, navigation, zoom, text search, outline inspection, current-page rotation, and download\n\nWithin Sheets, Analyze and More tools include:\n\n- `#/sheets?feature=charts` ,`pivots` ,`shapes` ,`connectors` , and`formulas` (the old standalone hashes remain compatible bookmarks).\n\nOther capabilities remain inside their relevant tool workspace; these legacy bookmarks still select the corresponding internal view:\n\n- `#/agent` provider-independent capability discovery, bounded inspection, immutable planning, preview/diff, validation, human approval, atomic commit, verification, and refusal proofs across XLSX, DOCX, PPTX, and PDF-shaped artifacts\n- `#/history` structured workbook and document diffs\n- `#/pptx-authored` ,`#/pptx-native` , and`#/pptx-render` , including browser-local bounded PPTX text and AutoShape mutation, exact-byte re-extraction verification, and download\n- `#/font-metrics` browser-safe layout contracts with an explicit Node shaping boundary\n- `#/collab` zero-setup, two-editor browser collaboration simulation for sheets, documents, decks, and PDF annotations, with the HTTP + SSE sidecar proof available as an integration mode\n\nThe playground labels the runtime boundary on every route. Most proofs run entirely in the browser. Native XLSX, DOCX, and PPTX extract/apply use version-matched Go WASM engines in browser Workers by default; their server fallbacks are explicit and never automatic. The server-integration collaboration mode stays on the optional Go sidecar. The React shell is not a second OPC writer.\n\nAn optional `injoffice-server` reuses those same extract/mutation handlers and\nstores packages under opaque artifact IDs (localhost by default):\n\n```\ncd go/injoffice-server\ngo run ./cmd/injoffice-server\n```\n\nOr, from the repository root:\n\n```\ndocker compose up --build\n```\n\nVite proxies `/healthz`, `/v1/capabilities`, `/v1/xlsx`, `/v1/docx`, `/v1/pptx`, and `/v1/collab` to the server. Compose publishes the\nserver only; it does not run the playground. Start the Vite playground separately,\nset `VITE_INJOFFICE_API_BASE` to an explicit server origin to enable XLSX,\nDOCX, and PPTX fallback, then select it under `#/sheets`, `#/docs`, or\n`#/pptx-native`; or switch `#/collab` to its HTTP + SSE integration mode. An\nempty API base never enables a same-origin fallback. The server is a local\ndevelopment sidecar with no authentication, authorization, tenant isolation,\nor rate limiting; do not expose it directly to the internet.\n\nStatic deployments do not include that local proxy, but the default XLSX,\nDOCX, and PPTX browser paths need no API. A self-hosted build can set\n`VITE_INJOFFICE_API_BASE` to the\nHTTPS origin of a secured, API-compatible host for the explicit server fallback.\n\nThe optional `@injoffice/xlsx-wasm`, `@injoffice/docx-wasm`, and\n`@injoffice/pptx-wasm` packages wrap the corresponding Go extract/apply\nfunctions in browser workers, allowing supported local workflows without the\nGo sidecar. The playground uses XLSX, DOCX, and PPTX browser paths by default\nand does not upload package bytes unless the user selects an explicitly\nconfigured server fallback. See each package README and\nthe matching `go/*patch/cmd/*nativewasm/README.md` binding documentation.\n\nRun a Go module independently, for example:\n\n```\ncd go/xlsxpatch\ngo test ./...\n```\n\n- **Native file API.** Go`Extract*` → native JSON (`@injoffice/sheets` ,`@injoffice/docs` ,`@injoffice/pptx-native` ) → TypeScript paint compilers (preview) → mutation JSON → Go`Apply*` .\n- **Plain data contracts.** Native JSON,`ChartSpec` ,`PivotSpec` ,`DeckSpec` , and the wire types are JSON-compatible and independent of a particular host.\n- **Agent change sets.**`@injoffice/agent-tools` owns a provider-neutral inspect → plan → preview/diff → validate → approve → commit → verify lifecycle. Format adapters advertise exact JSON-schema capabilities and refuse unsupported work; applications retain model, prompt, authorization, storage, and UI control.\n- **Pure core, optional shell.** Aggregation, extraction, diffing, pagination, paint compilation, and mutations can run without React, Univer, or the DOM. Univer is an optional editor shell, not the file authority.\n- **Optional runtime.** Libraries work offline or with a host-injected backend. The XLSX, DOCX, and PPTX WASM runtimes are the playground's browser-local defaults; the in-repo`injoffice-server` remains optional for storage, collaboration, and centralized trust or policy enforcement. Public releases contain only generic library and server components, never consumer-specific backend code, authentication configuration, tenant data, or credentials.\n- **Fail-closed fidelity.** Surgical writers start from original OOXML bytes and preserve untouched ZIP parts. If a requested edit cannot be performed safely, it should return an error rather than silently rebuild and discard unsupported content.\n\nThe capabilities enumerated by the scoped v3 completion matrix are complete, but native format coverage outside that scope remains partial. Do not assume Microsoft Office, LibreOffice, or unrestricted Excel round-trip parity. See [Native Office completion](/injectinglabs/injoffice/blob/main/docs/NATIVE-OFFICE-COMPLETION.md) and [Public release](/injectinglabs/injoffice/blob/main/docs/PUBLIC-RELEASE.md) for the precise status.\n\nInjOffice is pre-1.0. APIs may evolve between minor versions until the public contracts stabilize. Capabilities and limitations are documented per package; roadmap text is not a compatibility guarantee.", "url": "https://wpnews.pro/news/show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office", "canonical_source": "https://github.com/injectinglabs/injoffice", "published_at": "2026-09-09 05:24:20+00:00", "updated_at": "2026-09-09 06:01:07.117419+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["InjOffice", "Microsoft", "Google", "Univer", "Apache-2.0", "npm", "TypeScript", "Go"], "alternates": {"html": "https://wpnews.pro/news/show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office", "markdown": "https://wpnews.pro/news/show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office.md", "text": "https://wpnews.pro/news/show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office.txt", "jsonld": "https://wpnews.pro/news/show-hn-ai-first-open-source-alternative-to-microsoft-and-google-office.jsonld"}}