Chris Collins

Tools · dev

Documentation linter

Lint Markdown with the real markdownlint rules (MD001–MD060, your .markdownlint.json) and AsciiDoc with structure checks that match Asciidoctor's warnings, with quick fixes — plus a table formatter for Markdown, AsciiDoc, CSV and TSV.

Added

Works with

How to use it

Paste a Markdown or AsciiDoc document, or open a file, and the problems are listed beside it with the line, the rule and — where the change is safe — a Fix button. A second tab formats tables.

How to use it

  1. Paste or Open file…; the format is detected (or choose it). Click a result’s line number to select that line. Fix applies one fix, Fix all every safe one.

  2. Prose checks adds heuristics: repeated words (the the, also across a line break), sentences longer than the word count you set, and possible passive voice. They are suggestions, not rules — "was eaten" is flagged; whether it should change is up to you. Code blocks, tables and attribute lines are skipped.

  3. Folder… lists a project folder (in your browser — nothing is uploaded) so that include:: targets and image paths can be checked, and lets you open any document in it.

  4. Open in previewer ↗ sends the document to the Markdown and AsciiDoc previewer; Convert ↗ to the converter.

Markdown

This runs markdownlint 0.42.0 itself — the library markdownlint-cli2 0.24.0 uses — so the rule ids, aliases, defaults and messages are the real ones (MD001 heading levels through MD060 table column style), and each rule links to its documentation. Paste your .markdownlint.json, .jsonc or .yaml under markdownlint configuration; comments, aliases ("line-length": false) and "default": false work. Fixes are markdownlint’s own. Align tables re-pads every pipe table in the document.

I checked the output against markdownlint-cli2 on a test document with the default configuration and with a custom one: the results are the same, line for line.

AsciiDoc

These checks run on the parsed document (attributes and conditionals applied, as Asciidoctor does). Below them, Asciidoctor.js lists its own warnings for the same text.

Rule Finds Quick fix

ADOC001

Section levels that jump (== then ====)

Change the level

ADOC002

A second = title when the doctype isn’t book

Make it ==

ADOC003

{attribute} references that aren’t defined (a typo, usually)

Escape it

ADOC004

[id] and xref: targets that don’t exist, with a hint when you used the section title instead of its id ([first] for _first)

Use the real id

ADOC005

Delimited blocks (----, ====, `

===, `//// …) that are never closed

Close it at the end

ADOC006

List continuation mistakes: a ` followed by a blank line, a ` outside a list, and a block between numbered items without a + (which restarts the numbering at 1)

Remove or add the +

ADOC007

Table rows with too few cells, cells spanning past the last column

—

ADOC008

include:: and image targets missing from the chosen folder

—

ADOC009

Images without alt text

—

ADOC010

Ids used twice

—

ADOC011

ifdef/endif that don’t pair up

Fix the endif

ADOC012

Callout list items with no matching <n> in the code

—

ADOC013

Markdown links and images ([text](url)), which AsciiDoc shows literally

Rewrite as AsciiDoc

ADOC014

Trailing spaces (except a ` +` hard break)

Remove

ADOC015

Body text glued to the document header

Where these overlap with Asciidoctor’s own warnings I checked them against asciidoctor --verbose (2.0.26) on a document full of mistakes: each of its warnings has a matching check, on the same line. If a document starts with a gitwebsite header (:type:, :areas: …), it is also checked with the same rules as the AsciiDoc studio.

Tables

Paste a Markdown pipe table, an AsciiDoc |=== table, CSV, or cells copied from a spreadsheet (TSV) and get it back as an aligned Markdown table, an AsciiDoc table, CSV or TSV. You can transpose it and sort by a column (numbers sort as numbers, 1,000 after 999). Convert inline markup turns bold, code and links into their AsciiDoc form and back. Wide characters (CJK, emoji) count as two columns when aligning, as they do in a terminal. For cleaning data rather than formatting it, the data wrangler and the CSV tool go further.

Privacy

Everything runs in your browser and nothing you paste or open is uploaded. markdownlint 0.42.0 (about 250 KB as a bundled module) and, for AsciiDoc, Asciidoctor.js 3.0.4 (about 1.2 MB) are loaded from the jsDelivr CDN when first needed. A folder you choose is only listed and read locally.

Runs entirely in your browser — network requests go only to the services named on this page.