benbalter/word-to-markdown
59.6
Adequate · 19 September 2026
387
lines of production code
Ruby
primary language
1
measurement over time
What this system is
This system is a Ruby library and command-line tool that converts Microsoft Word documents (.docx) into Markdown format. It achieves this by leveraging LibreOffice as an external conversion engine to process the files, rather than parsing them directly. The tool provides a CLI interface for batch or single-file conversion and includes a modular library for integrating this functionality into other Ruby applications.
Features
Add utility methods for dependency path, version, and process status
The Cliver library now includes a new \Dependency\ extension that provides convenient accessors for dependency information. Users can now retrieve the detected binary path via \detected\_path\ (aliased as \path\), check if the dependency process is currently running via \open?\, and access the major version number via \major\_version\. The \open?\ method safely handles potential argument errors from the underlying process table inspection, and version detection is skipped on Windows platforms.
lib/cliver · high confidence
Add w2m command-line utility for Word to Markdown conversion
A new executable script \bin/w2m\ has been added to the project, providing a command-line interface to convert Word documents to Markdown. Users can run the tool by passing a path to a \.docx\ file as an argument, or use the \--version\ flag to display the current WordToMarkdown and LibreOffice versions (excluding LibreOffice version on Windows). The script includes basic usage validation and help output.
bin · high confidence
Added build/test scripts and switched console to Pry
The project now includes a script/bootstrap script to install dependencies and a script/cibuild script that runs the test suite, RuboCop, and builds the gem. Additionally, the interactive console script has been updated to use Pry instead of IRB for a better development experience.
script · high confidence
Initial release of Word-to-Markdown conversion library
This change introduces the core components of the Word-to-Markdown library, including the Document class for handling file paths, temporary directories, and LibreOffice conversion filters, and the Converter class for semanticizing HTML content (such as headings, tables, and list items) before generating Markdown output. The library is initialized with version 1.1.9.
lib/word-to-markdown · high confidence
Behavioural changes
Default font size for XML elements set to 12
The \Nokogiri::XML::Element\ class now includes a \font\_size\ method that returns the element's font size from its styles, defaulting to 12.0 if no font-size style is present. This change introduces a standard baseline for font sizing within the library's XML element handling.
lib/nokogiri · high confidence
Project modernization with RuboCop, Docker support, and CI updates
The project has been modernized with several infrastructure and configuration changes. RuboCop is now integrated for code style enforcement, targeting Ruby 3.2 and including performance and minitest plugins. Docker support has been added via a new Dockerfile and docker-compose.yml, allowing users to run the converter in a containerized environment with LibreOffice pre-installed. The README has been updated to highlight a JavaScript successor project, provide clearer installation and usage instructions (including a new command-line interface), and list supported features like tables and implicit headings. CI configurations for Travis CI and AppVeyor have been restructured to test against multiple Ruby versions and LibreOffice versions, and dependency management is now handled by Renovate.
(repo-wide) · high confidence
Refactored conversion engine to use LibreOffice and modular components
The library has been restructured to delegate document conversion to LibreOffice (soffice) instead of parsing Word files directly. The main class now initializes a Document and Converter, requiring the user to provide a path to a Word document which is then converted via an external process. This change introduces new dependencies including 'cliver' for dependency resolution, 'premailer' for CSS inlining, and 'nokogiri-styles', while removing the previous inline HTML parsing logic. The API now supports an optional temporary directory argument and includes built-in logging and path detection for LibreOffice across Windows and macOS.
lib · high confidence
Test coverage
Cleanup of obsolete Microsoft Word HTML test fixtures; Migrate test suite to Minitest and add comprehensive coverage.
Dependencies
Major dependency overhaul and gemspec modernization
The gemspec has been significantly updated to declare a minimum Ruby version of 3.2 and replace the local path dependency on reverse\_markdown with a remote version constraint (\>= 1, \< 3). New runtime dependencies have been added, including cliver, descriptive\_statistics (\~\> 2.5), logger, nokogiri-styles, premailer, and sys-proctable, while development dependencies have been upgraded to modern versions such as rake (\~\> 13.0), shoulda (\~\> 4.0), minitest (\~\> 5.0), and rubocop (\~\> 1.0). The Gemfile.lock was removed, and the Gemfile was simplified to use the gemspec with added test coverage via simplecov.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 60.
Lenses
- Code Health 100
- Architecture 69
- Maturity 40
- Readiness 78
- Security 90
Changes since last survey
- 300 commits — 279 feature/other, 21 fixes
By area
- (root) — 135 commits
- (repo) — 47 commits
- lib/word-to-markdown — 30 commits
- lib/word-to-markdown.rb — 24 commits
- .github/workflows — 13 commits
- .github/config.yml — 6 commits
- .github/dependabot.yml — 5 commits
- test/test_word_to_markdown.rb — 5 commits
- .github/ISSUE_TEMPLATE — 4 commits
- .github/settings.yml — 4 commits
- .github/stale.yml — 3 commits
- lib/cliver — 3 commits
- .github/CODE_OF_CONDUCT.md — 2 commits
- .github/no-response.yml — 2 commits
- bin/w2m — 2 commits
- docs/CONTRIBUTING.md — 2 commits
- lib/nokogiri — 2 commits
- script/cibuild — 2 commits
- test/helper.rb — 2 commits
- .github/CODEOWNERS — 1 commit
Notable commits
- fix: Fixed checking of ~/Application
- fix: Merge pull request #194 from benbalter/fix/ci-ruby-modernize
- fix: Merge pull request #62 from benbalter/windows-fix
- fix: Merge pull request #80 from benbalter/fix-ci
- fix: Modernize CI Ruby matrix and fix rubocop config failure
- fix: Obvious bugfix: Error output
- fix: doc fixes
- fix: fix CI
- fix: fix appveyor badge
- fix: fix cant modify frozen string errors
- fix: fix ci
- fix: fix ci
- fix: fix dockerfile
- fix: fix for unicode private characters
- fix: fix for windows support
- fix: fix selector for libreoffice 5
- fix: fix tests
- fix: fix tests
- fix: fix trailing space in test
- fix: fix travis
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
benbalter/word-to-markdown was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 14a9f12a1276b2d8425690ddf1825288db63787d — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.