Skip to content
CAI
Software that uses CAICheck a score

benbalter/word-to-markdown

59.6

Adequate · 19 September 2026

387

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

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.