{"id":41339402,"url":"https://github.com/mmonterroca/docxgo","last_synced_at":"2026-02-27T08:56:47.902Z","repository":{"id":320965311,"uuid":"1083290316","full_name":"mmonterroca/docxgo","owner":"mmonterroca","description":"Complete rewrite of go-docx: Production-grade Word document creation with domain-driven architecture, full OOXML compliance, and comprehensive error handling.","archived":false,"fork":false,"pushed_at":"2026-01-14T06:00:19.000Z","size":13054,"stargazers_count":73,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-14T23:37:33.486Z","etag":null,"topics":["document-generation","docx","golang","microsoft-word","ooxml","word"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmonterroca.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-25T18:07:13.000Z","updated_at":"2026-01-14T21:25:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"3af68b53-d32c-4bf5-b1b8-01c49ccb5fad","html_url":"https://github.com/mmonterroca/docxgo","commit_stats":null,"previous_names":["mmonterroca/docxgo"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/mmonterroca/docxgo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmonterroca%2Fdocxgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmonterroca%2Fdocxgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmonterroca%2Fdocxgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmonterroca%2Fdocxgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmonterroca","download_url":"https://codeload.github.com/mmonterroca/docxgo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmonterroca%2Fdocxgo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28682260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["document-generation","docx","golang","microsoft-word","ooxml","word"],"created_at":"2026-01-23T06:38:43.294Z","updated_at":"2026-02-27T08:56:47.882Z","avatar_url":"https://github.com/mmonterroca.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docxgo\n\nProduction-grade Microsoft Word .docx (OOXML) file manipulation in Go.\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/mmonterroca/docxgo/v2.svg)](https://pkg.go.dev/github.com/mmonterroca/docxgo/v2)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Go Report Card](https://goreportcard.com/badge/github.com/mmonterroca/docxgo)](https://goreportcard.com/report/github.com/mmonterroca/docxgo)\n\n## Overview\n\n**docxgo** is a powerful, clean-architecture library for creating Microsoft Word documents in Go. Built with production-grade code quality, comprehensive documentation, and modern design patterns.\n\n### Key Features\n\n- ✅ **Clean Architecture** - Interface-based design, dependency injection, separation of concerns\n- ✅ **Type Safety** - No `interface{}`, explicit error handling throughout\n- ✅ **Builder Pattern** - Fluent API for easy document construction\n- ✅ **Thread-Safe** - Concurrent access supported with atomic operations\n- ✅ **Production Ready** - EXCELLENT error handling, comprehensive validation\n- ✅ **Well Documented** - Complete godoc, examples, and architecture docs\n- ✅ **Open Source** - MIT License, use in commercial and private projects\n\n---\n\n## Status\n\n**Current Version**: v2.2.2 (Stable)\n**Stability**: Production Ready\n**Released**: February 2026\n**Test Coverage**: 50.7%\n\n**Latest Features**: Table Style Borders (v2.2.2), Theme System (v2.1.0+), Round-trip Style Preservation (v2.2.1)\n\n\u003e **Note**: This library underwent a complete architectural rewrite in 2024-2025, implementing clean architecture principles, comprehensive testing, and modern Go practices. Version 2.0.0 released October 2025, with theme system added in v2.1.0 and continued improvements through v2.2.2.\n\n---\n\n## Installation\n\n```bash\ngo get github.com/mmonterroca/docxgo/v2\n```\n\n### Requirements\n\n- Go 1.21 or higher\n- No external C dependencies\n- Works on Linux, macOS, Windows\n\n---\n\n## Quick Start\n\n### Option 1: Simple API (Direct Domain Interfaces)\n\n```go\npackage main\n\nimport (\n    \"log\"\n    docx \"github.com/mmonterroca/docxgo/v2\"\n)\n\nfunc main() {\n    // Create document\n    doc := docx.NewDocument()\n\n    // Add paragraph with formatted text\n    para, _ := doc.AddParagraph()\n    run, _ := para.AddRun()\n    run.SetText(\"Hello, World!\")\n    run.SetBold(true)\n    run.SetColor(docx.Red)\n\n    // Save document\n    if err := doc.SaveAs(\"simple.docx\"); err != nil {\n        log.Fatal(err)\n    }\n}\n```\n\n### Option 2: Builder API (Fluent, Chainable - Recommended)\n\n```go\npackage main\n\nimport (\n    \"log\"\n    docx \"github.com/mmonterroca/docxgo/v2\"\n    \"github.com/mmonterroca/docxgo/v2/domain\"\n)\n\nfunc main() {\n    // Create builder with options\n    builder := docx.NewDocumentBuilder(\n        docx.WithTitle(\"My Report\"),\n        docx.WithAuthor(\"John Doe\"),\n        docx.WithDefaultFont(\"Calibri\"),\n        docx.WithDefaultFontSize(22), // 11pt in half-points\n        docx.WithPageSize(docx.A4),\n        docx.WithMargins(docx.NormalMargins),\n    )\n\n    // Add content using fluent API\n    builder.AddParagraph().\n        Text(\"Project Report\").\n        Bold().\n        FontSize(16).\n        Color(docx.Blue).\n        Alignment(domain.AlignmentCenter).\n        End()\n\n    builder.AddParagraph().\n        Text(\"This is bold text\").Bold().\n        Text(\" and this is \").\n        Text(\"colored text\").Color(docx.Red).FontSize(14).\n        End()\n\n    // Build and save\n    doc, err := builder.Build()\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    if err := doc.SaveAs(\"report.docx\"); err != nil {\n        log.Fatal(err)\n    }\n}\n```\n\n### Option 3: Read and Modify Existing Documents 🆕\n\n```go\npackage main\n\nimport (\n    \"log\"\n    docx \"github.com/mmonterroca/docxgo/v2\"\n)\n\nfunc main() {\n    // Open existing document\n    doc, err := docx.OpenDocument(\"template.docx\")\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    // Read existing content\n    paragraphs := doc.Paragraphs()\n    for _, para := range paragraphs {\n        // Modify existing text\n        runs := para.Runs()\n        for _, run := range runs {\n            if run.Text() == \"PLACEHOLDER\" {\n                run.SetText(\"Updated Value\")\n                run.SetBold(true)\n            }\n        }\n    }\n\n    // Add new content\n    newPara, _ := doc.AddParagraph()\n    newRun, _ := newPara.AddRun()\n    newRun.SetText(\"This paragraph was added by the reader\")\n\n    // Save modified document\n    if err := doc.SaveAs(\"modified.docx\"); err != nil {\n        log.Fatal(err)\n    }\n}\n```\n\n### More Examples\n\nSee the [`examples/`](examples/) directory for 13 comprehensive examples:\n\n- **[01_basic](examples/01_basic/)** - Simple document with builder pattern\n- **[02_intermediate](examples/02_intermediate/)** - Professional product catalog\n- **[03_toc](examples/03_toc/)** - Table of contents generation\n- **[04_fields](examples/04_fields/)** - TOC, page numbers, hyperlinks\n- **[05_styles](examples/05_styles/)** - Built-in style system (40+ styles)\n- **[06_sections](examples/06_sections/)** - Page layout, margins, orientation\n- **[07_advanced](examples/07_advanced/)** - All features combined\n- **[08_images](examples/08_images/)** - Image insertion and positioning\n- **[09_advanced_tables](examples/09_advanced_tables/)** - Cell merging, nested tables, styling\n- **[10_paragraph_spacing](examples/10_paragraph_spacing/)** - Line and paragraph spacing\n- **[11_multi_section](examples/11_multi_section/)** - Multi-section layouts\n- **[12_read_and_modify](examples/12_read_and_modify/)** - Read and modify existing documents\n- **[13_themes](examples/13_themes/)** - Theme system with 7 preset themes\n\n---\n\n## Architecture\n\nThis library follows clean architecture principles with clear separation of concerns:\n\n```\ngithub.com/mmonterroca/docxgo/v2/\n├── domain/          # Core interfaces (public API)\n│   ├── document.go  # Document interface\n│   ├── paragraph.go # Paragraph interface\n│   ├── run.go       # Run interface\n│   ├── table.go     # Table interfaces\n│   ├── section.go   # Section interfaces\n│   ├── image.go     # Image interfaces\n│   └── style.go     # Style interfaces\n│\n├── internal/        # Internal implementations\n│   ├── core/        # Core domain implementations\n│   ├── manager/     # Service managers (ID, media, style, relationship)\n│   ├── reader/      # Document reading/parsing\n│   ├── serializer/  # XML serialization\n│   ├── writer/      # .docx file writing\n│   └── xml/         # OOXML structures\n│\n├── pkg/             # Public utilities\n│   ├── errors/      # Structured error types\n│   ├── constants/   # OOXML constants\n│   └── color/       # Color utilities\n│\n├── themes/          # Theme system (7 preset themes)\n│\n└── examples/        # 13 usage examples\n    ├── 01_basic/    ... 13_themes/\n```\n\n### Design Principles\n\n1. **Interface Segregation** - Small, focused interfaces\n2. **Dependency Injection** - No global state\n3. **Explicit Errors** - Errors returned immediately, not silently ignored\n4. **Immutability** - Defensive copies to prevent external mutation\n5. **Type Safety** - Strong typing, no `interface{}`\n6. **Thread Safety** - Concurrent access supported\n7. **Documentation** - Every public method documented\n\n---\n\n## Features\n\n### ✅ Fully Implemented\n\n**Core Document Structure**\n\n- Document creation with metadata (title, author, subject, keywords)\n- Paragraphs with comprehensive formatting\n- Text runs with character-level styling\n- Tables with rows, cells, and styling\n- Sections with page layout control\n\n**Text Formatting**\n\n- Bold, italic, underline, strikethrough\n- Font color (RGB), size, and family\n- Highlight colors (15 options)\n- Alignment (left, center, right, justify)\n- Line spacing (single, 1.5, double, custom)\n- Indentation (left, right, first-line, hanging)\n\n**Advanced Table Features** (Phase 9 - Complete)\n\n- **Cell Merging**: Horizontal (colspan) and vertical (rowspan)\n- **Nested Tables**: Tables within table cells\n- **8 Built-in Styles**: Normal, Grid, Plain, MediumShading, LightShading, Colorful, Accent1, Accent2\n- Row height control\n- Cell width and alignment\n- Borders and shading\n\n**Images \u0026 Media** (Phase 8 - Complete)\n\n- **9 Image Formats**: PNG, JPEG, GIF, BMP, TIFF, SVG, WEBP, ICO, EMF\n- Inline and floating images\n- Custom dimensions (pixels, inches, EMUs)\n- Positioning (left, center, right, custom coordinates)\n- Automatic format detection\n- Relationship management\n\n**Fields \u0026 Dynamic Content** (Phase 6 - Complete)\n\n- **Table of Contents (TOC)**: Auto-generated with styles\n- **Page Numbers**: Current page, total pages\n- **Hyperlinks**: External URLs and internal bookmarks\n- **StyleRef**: Dynamic text from heading styles\n- **Date/Time**: Document creation/modification dates\n- **Custom Fields**: Extensible field system\n\n**Headers \u0026 Footers** (Phase 6 - Complete)\n\n- Default, first page, and even/odd page headers/footers\n- Page numbering in footers\n- Dynamic content with fields\n- Per-section customization\n\n**Styles System** (Phase 6 - Complete)\n\n- **40+ Built-in Styles**: All standard Word paragraph styles\n- **Character Styles**: For inline formatting\n- **Custom Styles**: Create and apply user-defined styles\n- Style inheritance and cascading\n\n**Builder Pattern** (Phase 6.5 - Complete)\n\n- Fluent API for easy document construction\n- Error accumulation (no intermediate error checking)\n- Chainable methods for all operations\n- Functional options for configuration\n\n**Quality \u0026 Reliability** (Phase 11 - Complete)\n\n- **EXCELLENT Error Handling**: Structured errors with rich context\n- Comprehensive validation at every layer\n- Thread-safe ID generation (atomic counters)\n- **50.7% Test Coverage** (improvement plan ready: → 95%)\n- **0 Linter Warnings** (golangci-lint with 30+ linters)\n- Complete godoc documentation\n\n### Planned Features\n\n- Mail merge and templates\n- Comments and change tracking\n- Custom XML parts\n- Advanced drawing shapes\n- Document comparison\n- Content controls\n\n---\n\n## Error Handling\n\nAll operations return explicit errors - no silent failures. The error system was rated **EXCELLENT** in Phase 11 review:\n\n```go\n// Structured errors with full context\npara, err := doc.AddParagraph()\nif err != nil {\n    // Error contains: operation, code, message, and context\n    // Example: \"operation=Document.AddParagraph | code=VALIDATION_ERROR | ...\"\n    log.Fatal(err)\n}\n\n// Validation errors with detailed information\nerr := run.SetSize(10000) // Invalid size\nif err != nil {\n    // Returns: ValidationError with field, value, and constraint details\n    var validationErr *errors.ValidationError\n    if errors.As(err, \u0026validationErr) {\n        fmt.Printf(\"Field '%s' failed: %s\\n\", validationErr.Field, validationErr.Message)\n    }\n}\n\n// Builder pattern accumulates errors\nbuilder := docx.NewDocumentBuilder()\nbuilder.AddParagraph().\n    Text(\"Hello\").\n    FontSize(9999). // Invalid - error recorded\n    Bold().\n    End()\n\n// All errors surface at Build()\ndoc, err := builder.Build()\nif err != nil {\n    // Returns first accumulated error with full context\n    log.Fatal(err)\n}\n```\n\n**Error System Features**:\n\n- ✅ **DocxError**: Structured errors with operation context\n- ✅ **ValidationError**: Domain-specific validation errors\n- ✅ **BuilderError**: Error accumulation for fluent API\n- ✅ **7 Error Codes**: Well-defined error categories\n- ✅ **10+ Helper Functions**: Easy error creation\n- ✅ **100% Best Practices**: Proper wrapping, context, no panics\n\nSee [docs/ERROR_HANDLING.md](docs/ERROR_HANDLING.md) for comprehensive review.\n\n---\n\n## Testing\n\n```bash\n# Run all tests\ngo test ./...\n\n# Run with coverage\ngo test -cover ./...\n\n# Generate coverage report\ngo test -coverprofile=coverage.out ./...\ngo tool cover -html=coverage.out\n\n# Run specific package\ngo test -v ./internal/core\n\n# Run benchmarks\ngo test -bench=. ./...\n```\n\n**Current Test Coverage**: 50.7%\n\nSee [docs/COVERAGE_ANALYSIS.md](docs/COVERAGE_ANALYSIS.md) for detailed coverage analysis.\n\n---\n\n## Documentation\n\n### 📖 Complete Documentation Suite\n\n**For Users:**\n\n- **[V2 API Guide](docs/V2_API_GUIDE.md)** - Complete v2 API reference with examples ⭐ START HERE\n- **[Implementation Status](docs/IMPLEMENTATION_STATUS.md)** - What's implemented, what's planned\n- **[Examples](examples/README.md)** - 13 working code examples\n- **[Migration Guide](MIGRATION.md)** - Migrating from v1 to v2\n\n**For Developers:**\n\n- **[V2 Design](docs/V2_DESIGN.md)** - Architecture, design decisions, and roadmap\n- **[Contributing Guide](CONTRIBUTING.md)** - How to contribute\n- **[Error Handling](docs/ERROR_HANDLING.md)** - Complete error system review\n- **[Coverage Analysis](docs/COVERAGE_ANALYSIS.md)** - Test coverage report\n\n**Quick Links:**\n\n- [API Reference (pkg.go.dev)](https://pkg.go.dev/github.com/mmonterroca/docxgo/v2)\n- [Documentation Index](docs/README.md) - Complete documentation guide\n- [Credits](CREDITS.md) - Project history and contributors\n\n---\n\n## Performance\n\nOptimized for real-world usage:\n\n- **Pre-allocated slices** with sensible defaults (paragraphs: 32, tables: 8)\n- **Thread-safe atomic counters** for ID generation\n- **Lazy loading** of relationships and media\n- **Efficient string building** for text extraction\n- **Memory-conscious** defensive copies only when necessary\n\n**Benchmarks** (coming in Phase 11.5):\n\n- Simple document creation: target \u003c 1ms\n- Complex document (100 paragraphs, 10 tables): target \u003c 50ms\n- Image insertion: target \u003c 5ms per image\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for:\n\n- Code of conduct\n- Development workflow (Git Flow)\n- Testing requirements\n- Pull request process\n\n### Quick Contribution Guide\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes with tests\n4. Ensure tests pass (`go test ./...`)\n5. Commit your changes (follow commit message conventions)\n6. Push to your fork\n7. Open a Pull Request\n\n---\n\n## License\n\n**MIT License**\n\nThis means:\n\n- ✅ **Free to use** in any project (commercial or personal)\n- ✅ **No copyleft** - modifications don't need to be shared\n- ✅ **Permissive** - do almost anything you want\n- ✅ **Attribution required** - keep copyright notices\n\nSee [LICENSE](LICENSE) for full text.\n\n### Copyright\n\n```\nCopyright (C) 2024-2026 Misael Monterroca\nCopyright (C) 2022-2024 fumiama (original enhancements)\nCopyright (C) 2020-2022 Gonzalo Fernández-Victorio (original library)\n```\n\nSee [CREDITS.md](CREDITS.md) for complete project history.\n\n---\n\n## Credits \u0026 History\n\nThis project evolved through multiple stages:\n\n1. **gonfva/docxlib** (2020-2022) - Original library by Gonzalo Fernández-Victorio\n2. **fumiama/go-docx** (2022-2024) - Enhanced fork with images, tables, shapes\n3. **mmonterroca/docxgo v1** (2023-2024) - Professional features (headers, TOC, links)\n4. **mmonterroca/docxgo v2** (2024-2026) - Complete architectural rewrite\n\n**Current Maintainer**: Misael Monterroca (misael@monterroca.com)\n**GitHub**: [@mmonterroca](https://github.com/mmonterroca)\n\n**V2 Rewrite**:\n\n- All development phases completed\n- 6,646+ lines of production code\n- 1,500+ lines of documentation\n- Clean architecture implementation\n- Production-grade quality\n\nFor complete project genealogy, see [CREDITS.md](CREDITS.md).\n\n---\n\n## Roadmap\n\n### Release History\n\n- **v2.2.2** (February 2026 - Current Stable)\n  - Table style borders fix (TableGrid, PlainTable1 now render with visible borders)\n  - Grid column width calculation from cell widths\n  - Comprehensive documentation overhaul\n  - Restored 13_themes example\n\n- **v2.2.1** (January 2026)\n  - Hyperlink RelationshipID preservation during round-trip\n  - Drawing position serialization fix\n  - Internal hyperlink anchor support\n  - Custom styles preservation during round-trip\n\n- **v2.2.0** (January 2026)\n  - Table cell border serialization with explicit properties\n\n- **v2.1.1** (November 2025)\n  - Go module path fix (/v2 suffix)\n\n- **v2.1.0** (October 2025)\n  - Complete theme system with 7 preset themes\n  - Custom theme support (Clone, WithColors, WithFonts, WithSpacing)\n\n- **v2.0.1** (November 2025)\n  - Go module path fix (/v2 suffix)\n\n- **v2.0.0** (October 2025)\n  - Production-ready stable release\n  - Clean architecture implementation\n  - Document reading and modification\n  - Comprehensive documentation\n\n- **v2.0.0-beta** (October 2025)\n  - Initial beta release\n\n### Upcoming (dev branch)\n\n- Table style borders (TableGrid, PlainTable1) - fix for [#15](https://github.com/mmonterroca/docxgo/issues/15)\n- Updated examples with table styles\n- Restored example 13 (themes)\n\n### Planned Features\n\n- Mail merge and templates\n- Comments and change tracking\n- Content controls / form fields\n- Custom XML parts\n- Advanced drawing shapes\n- Document comparison\n\nSee [docs/IMPLEMENTATION_STATUS.md](docs/IMPLEMENTATION_STATUS.md) for detailed status.\n\n---\n\n## Support \u0026 Community\n\n- **Issues**: [GitHub Issues](https://github.com/mmonterroca/docxgo/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/mmonterroca/docxgo/discussions)\n- **Email**: misael@monterroca.com\n- **Documentation**: [pkg.go.dev](https://pkg.go.dev/github.com/mmonterroca/docxgo/v2)\n\n### Reporting Bugs\n\nPlease include:\n\n- Go version (`go version`)\n- OS and architecture\n- Minimal reproduction code\n- Expected vs actual behavior\n\n---\n\n## Related Projects\n\n- **[UniOffice](https://github.com/unidoc/unioffice)** - Commercial, comprehensive OOXML library\n- **[gingfrederik/docx](https://github.com/gingfrederik/docx)** - Write-only docx library\n- **[Office Open XML](http://www.ecma-international.org/publications/standards/Ecma-376.htm)** - OOXML specification\n\n### Why Choose docxgo?\n\n- ✅ **Free \u0026 Open Source** - MIT License, no restrictions\n- ✅ **Clean Architecture** - Production-grade code quality\n- ✅ **Feature Complete** - 95% of planned features implemented\n- ✅ **EXCELLENT Error Handling** - Structured errors, rich context\n- ✅ **Well Documented** - Complete godoc, examples, architecture docs\n- ✅ **Active Development** - Regular updates, responsive to issues\n- ✅ **Modern Go** - Follows current best practices (Go 1.21+)\n- ✅ **Builder Pattern** - Fluent API for easy document construction\n\n**Comparison**:\n\n- **UniOffice** - Commercial ($$$), more features, heavier\n- **gingfrederik/docx** - Write-only, simpler, less features\n- **docxgo** - Free, balanced features, production-ready\n\n---\n\n**Made with ❤️ by [Misael Monterroca](https://github.com/mmonterroca)**\n\n_Star ⭐ this repo if you find it useful!_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmonterroca%2Fdocxgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmonterroca%2Fdocxgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmonterroca%2Fdocxgo/lists"}