Show HN: TinyDOCX – Word/ODT library (14x smaller than docx)

Show HN (score: 6)
Found: December 22, 2025
ID: 2778

Description

Other
Show HN: TinyDOCX – Word/ODT library (14x smaller than docx) After posting tinypdf here, someone opened an issue asking for Word/OpenOffice support. I understand - sometimes you need an editable document, not a PDF.

I didn't want to extend the library itself, so I built tinydocx: <1K lines of TypeScript, zero dependencies, 7.7KB minified+gzipped. The popular docx package is 108KB with 5 dependencies.

What's included: - Text formatting (bold/italic/underline/strikethrough, colors, custom fonts) - Headings (H1-H6) - Tables with borders and column widths - Bullet and numbered lists (with nesting) - Images (PNG, JPEG, GIF, WebP) - Hyperlinks - Headers/footers with page numbers - Blockquotes and code blocks - Markdown to DOCX conversion - ODT (OpenDocument) support with the same API

What's not included: - Table of contents, footnotes, bookmarks - Track changes, comments - Multi-column layouts, text wrapping - Reading/modifying existing .docx files - Math equations, drawing shapes

DOCX files are just ZIP archives containing XML. Once you understand the structure, generating simple documents is straightforward. The hard part is knowing which XML elements Word actually requires vs. what's optional cruft.

Works great for invoices, reports, form letters - anything where you want the recipient to edit the document. Pairs nicely with tinypdf when you need both formats.

GitHub: https://github.com/Lulzx/tinydocx npm: npm install tinydocx

More from Show

Show HN: Control Claude permissions using a cloud-based decision table UI

Show HN: Control Claude permissions using a cloud-based decision table UI We’ve been building visual rule engines (clear interfaces + API endpoints that help map input data to a large number of outcomes) for a while and had the fun idea lately to see what happens when we use our decision table UI with Claude’s PreToolUse hook.<p>The result is a surprisingly useful policy&#x2F;gating layer– these tables let your team:<p>- Write multi-factor, exception-friendly policies (e.g. deny rm -rf &#x2F; when --force; allow cleanup only in node_modules; ask on network calls like curl&#x2F;wget; block kubectl delete or SQL DROP, each with a clear reason)<p>- Roll out policy changes instantly (mid-run, flip a risky operation from allow → ask; the next attempt across devs and agents is gated immediately– no git pull, agent restart, or coordination)<p>- Adopt lightweight governance that is somewhat agent agnostic and survives churn (MCP&#x2F;skills&#x2F;etc)- just add columns&#x2F;rules as new tools and metadata show up<p>- Get a quick central utility to understand which tools are being used, which tools get blocked most often, and why

Show HN: Claude Code Scheduler

Show HN: Claude Code Scheduler I found myself frequently wanting to schedule tasks in Claude Code (both one-time and recurring) so I built a CC plugin to help with that.<p>To install: &#x2F;plugin marketplace add jshchnz&#x2F;claude-code-scheduler &#x2F;plugin install scheduler@claude-code-scheduler<p>Then just tell Claude what you want (some examples):<p>Every Wednesday at 3am find dead code: unused functions, unreachable branches, commented-out code, and unused imports. List by file with line numbers.<p>Schedule a code review every weekday at 9am. Review commits from the last 24 hours, check for bugs, security issues, error handling gaps, and code that needs comments. Summarize with file:line references.

Show HN: Webctl – Browser automation for agents based on CLI instead of MCP

Show HN: Webctl – Browser automation for agents based on CLI instead of MCP

Show HN: Tsonic – A TypeScript to native code compiler via CLR and NativeAOT

Show HN: Tsonic – A TypeScript to native code compiler via CLR and NativeAOT

No other tools from this source yet.