passive voice · weasel words · duplicate words · vague links

Check Markdown writing style

Surface common writing issues — passive voice, weasel words, long sentences, duplicate words, and non-descriptive link text — inspired by Vale and write-good.

Style Checker
Input
234 B
7 lines
Output
151 B
5 lines
Status
error
see panel
Ratio
0.65×
out/in
input · markdown
output · style report
Line 1: weasel word "very".
Line 1: weasel word "basically".
Line 3: non-descriptive link text.
Line 5: possible passive voice.
Line 7: duplicate word.
Quick Start

How to check style

Strips code blocks first, then runs a battery of line-by-line checks for known anti-patterns. Each issue is reported with the offending line number for quick navigation.

  1. 01

    Paste content

    Article, README, or blog post.

    Parsing runs through marked with GFM extensions enabled — tables, task lists, strikethrough, and fenced code blocks all match GitHub’s rendering.

    inputGFMmarkedCommonMarklive
    input · markdownmd · GFM
    Click here.
    loaded · GFMGFM · ready
  2. 02

    Run checks

    Passive voice, weasels, duplicates, vague links are flagged.

    Soft-break behaviour is configurable: by default a single newline becomes a space (CommonMark), toggle on for chat-style <br> insertion.

    checksoft-breaksoptionsconfiglive
    rules · options5 · live
    5 rules
    options applied · livelive
  3. 03

    Review

    Each issue lists line number + reason.

    The preview is scoped under a .mde class so its CSS doesn’t bleed into the rest of the page. Output HTML is whitespace-controlled for clean diffs.

    reportpreviewscoped CSSrenderstable
    issues · renderedn · ready
    L4: passive
    rendered · liverendered
  4. 04

    Revise

    Edit the source and re-run until the report is clean.

    Export covers both raw Markdown and rendered HTML; downloads stream as text/markdown or text/html via Blob + object URL.

    fixclipboard.md.htmlblob
    ✓ · exportedok · done
    ✓ clean
    shipped · ready to shipsuccess
Pro tips

Author Markdown that renders everywhere

GFM is the safe default

GitHub-Flavored Markdown is the de-facto baseline (tables, task lists, strikethrough). CommonMark is stricter but ubiquitous as a fallback.

Soft-break behaviour varies

A single newline is a space in CommonMark, a <br> in GFM. Toggle soft breaks when source matters.

Escape inside code fences

Backticks inside fenced blocks need a longer fence — three becomes four. Use ~~~ if your content has many backticks.

Anchors are slugified

GitHub lowercases, strips punctuation, and joins with hyphens. Duplicate headings get -1, -2 suffixes.

Tables need a header row

The dash row sets alignment (:---, :-:, ---:). Use Table Aligner for diff-friendly columns.

Front matter is YAML

Triple-dash blocks at the top of files are parsed by static-site generators. Use the Front-Matter Validator to catch syntax errors.

Use Cases

When to run a style check

Polish drafts before publishing or filing PRs.

Blog drafts

Catch overuse of weasel words before posting. Render path uses marked with GFM extensions enabled (tables, task lists, strikethrough, autolinks), so what you preview matches what GitHub publishes bit-for-bit. Soft-break behaviour is configurable for chat-style vs prose Markdown.

GFM-compliant

Docs PRs

Sanity-check long technical docs. Pairs cleanly with the Markdown Cheatsheet for syntax you can't quite remember — callout blocks, footnotes, definition lists. Output stays diff-friendly so style-only changes don't drown out real edits in PRs.

GitHub-perfect

Email comms

Tighten team announcements. Cross-platform safe: anchors, code fences, and tables behave identically on GitHub, GitLab, Bitbucket, and Gitea. Heading-anchor slugs follow GitHub's lowercase-and-hyphenate rules so deep links survive a docs migration.

diff-friendly

Marketing copy

Active voice sells better than passive. No server roundtrip — perfect for proprietary content you can't paste into a public tool. The full marked + GFM bundle ships with the page, so it works offline once loaded.

render-stable

Editorial review

Pair with human review to focus on substance. Front matter (YAML / TOML / JSON) passes through unchanged so static-site pipelines (Jekyll, Hugo, Astro, Eleventy) read it correctly. Pair with the Front-Matter Validator to catch syntax errors before deploy.

cross-platform

Inclusive writing

Avoid jargon and vague link text. Output is reproducible: identical input always produces identical Markdown, so doc-generation scripts can rely on it for snapshot tests and embedded into release workflows.

a11y
FAQ

Frequently asked questions

Long sentences (>30 words), passive voice heuristic, weasel words (very, really, basically...), duplicate adjacent words, vague link text (click here / read more).
No — fenced ``` blocks and inline code spans are stripped before checks run.
It's inspired by Vale and write-good. For team-specific rules, use Vale itself.
The detector is a regex heuristic — it can't disambiguate all cases. Use judgement when reviewing.
No. The check runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!