Skip to main content

Auto-fix alignment in markdown docs

Project description

Overview

CLI utility that auto-fixes alignment issues in markdown documentation files - tables, box-drawing diagrams, list descriptions, and more.

┌───────────────────┐       ┌───────────────────┐
│  ┌────┐   ┌────┐ │        │  ┌────┐   ┌────┐  │
│  │ A  │   │ B  │ │        │  │ A  │   │ B  │  │
│  └──┬─┘   └──┬─┘ │        │  └──┬─┘   └──┬─┘  │
│     │         │   │       │     │        │    │
│     └────┬───┘    │  -->  │     └────┬───┘    │
│           v       │       │          v        │
│     ┌──────┐      │       │     ┌──────┐      │
 │     │  C   │      │      │     │  C   │      │
│     └──────┘      │       │     └──────┘      │
└───────────────────┘       └───────────────────┘
See all 12 checks

Tables

Aligns columns and ensures | content | spacing in cells.

| Service        | Usage                         |             | Service    | Usage                        |
|----------------|-------------------------------|             |------------|------------------------------|
| Linear API     | Status transitions, comments|        -->    | Linear API | Status transitions, comments |
| GitHub API| Repo clone, PR creation       |                  | GitHub API | Repo clone, PR creation      |

List descriptions

Aligns the separator dash in list item descriptions.

- docs/repo.md - mirrors CI steps                       - docs/repo.md                    - mirrors CI steps
- docs/guides/testing-strategy.md - test suite  -->     - docs/guides/testing-strategy.md - test suite

Definition lists

Aligns the : separator in key-value list items.

- timeout: 30s                    - timeout:         30s
- retries: 3               -->    - retries:         3
- max-connections: 100            - max-connections: 100

Box widths

Ensures all lines in a box group have the same total length.

┌──────────────┐       ┌───────────────┐
│  Linear UI  │   -->  │  Linear UI    │
│  (userscript)│       │  (userscript) │
└──────────────┘       └───────────────┘

Rail alignment

Aligns vertically adjacent box chars to the same column.

┌──────┬──────┐       ┌──────┬──────┐
│      │      │       │      │      │
│       │     │  -->  │      │      │
│      │      │       │      │      │
└──────┴──────┘       └──────┴──────┘

Arrow alignment

Aligns standalone v/^ arrows with their source pipes.

┌──────┐                     ┌──────┐
│ step │                     │ step │
└──┬───┘                     └──┬───┘
   │           -->              │
     v                          v
┌──────┐                     ┌──────┐
│ next │                     │ next │
└──────┘                     └──────┘

Pipe continuity

Traces from T-junctions to detect drifted connector pipes.

┌──────┬──────┐              ┌──────┬──────┐
│ src  │ dest │              │ src  │ dest │
└──────┴──┬───┘              └──────┬──────┘
       │           -->              │
       │                            │
          │                         │
┌──────┴──────┐              ┌──────┴──────┐
│   output    │              │   output    │
└─────────────┘              └─────────────┘

Box spacing

Ensures minimum right-side spacing between content and box wall.

┌───────────┐       ┌────────────┐
│  errors[] │       │  errors[]  │
│  (strings)│  -->  │  (strings) │
└───────────┘       └────────────┘

Box walls

Verifies nested box right walls match their opening/closing borders.

┌──────────────────┐       ┌──────────────────┐
│  content here    │       │  content here    │
│  more text       │  -->  │  more text       │
└────────────────┘         └──────────────────┘

Box padding

Normalizes left-padding of content lines inside boxes.

┌──────────────┐       ┌──────────────┐
│ validateAuth │       │ validateAuth │
│ compare with │  -->  │ compare with │
└──────────────┘       └──────────────┘

Horizontal arrows

Closes gaps between arrow tips and box walls.

┌──────┐          ┌──────┐       ┌──────┐          ┌──────┐
│ Src  │─────────>│ Dest │  -->  │ Src  │─────────>│ Dest │
└──────┘          └──────┘       └──────┘          └──────┘

Wide chars

Detects ambiguous/double-width Unicode chars in code blocks.

┌──────────┐
│ ▶ start  │  -->  warning: wide char '▶' (U+25B6) at col 2
│ ● status │
└──────────┘

Motivation

In the era of agentic engineering, documentation is the most critical artifact in any codebase. It guides both humans and AI agents. When docs are visually harmonious - with aligned columns, consistent box widths, and straight connector lines - they become easier to read, parse, and maintain by everyone.

Features

  • 3 modes - check (default), auto-fix in place, or unified diff
  • flexible paths - files, directories, or glob patterns (e.g. "docs/**/*.md")
  • CI-friendly - exit code 0 when aligned, 1 when issues found
  • 12 checks - tables, boxes, arrows, pipes, lists (see examples above)

Commands

docalign <path>                        # check-only (default) - detect issues, no writes
docalign --check <path>                # explicit check-only (same as default)
docalign --fix <path>                  # auto-fix files in place
docalign --diff <path>                 # show unified diff of what would change
docalign --verbose <path>              # show actionable hints with each error
docalign --ignore tables,pipes <path>  # skip specific checks
docalign --help                        # show help
docalign --version                     # show version

Paths can be files, directories, or glob patterns (e.g. "docs/**/*.md").

Check names for --ignore: tables, box-widths, box-padding, box-spacing, horiz-arrows, box-walls, rails, arrows, pipes, list-descs, def-lists, wide-chars.

Exit codes: 0 = all aligned, 1 = issues found.

Install

pipx install docalign
# pip install docalign

Update

pipx upgrade docalign
# pip install --upgrade docalign

Uninstall

pipx uninstall docalign
# pip uninstall docalign

Development

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest -v
# dev alias (mdalign)
ln -s $(pwd)/.venv/bin/docalign ~/.local/bin/docalignd   # install
rm ~/.local/bin/docalignd                                # remove

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docalign-0.1.1.tar.gz (50.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docalign-0.1.1-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file docalign-0.1.1.tar.gz.

File metadata

  • Download URL: docalign-0.1.1.tar.gz
  • Upload date:
  • Size: 50.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for docalign-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4a0dc0213b4981b8db18eff51ac73f566cf5716dca511b55defb143d960e9a03
MD5 fd9eff6363325e3fb2da6fe2edf19838
BLAKE2b-256 aaede21bef858d2312bd0b80661ca2ce62059a182196c6923af9707f994b6d9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for docalign-0.1.1.tar.gz:

Publisher: release.yml on lucasvtiradentes/doc-align

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file docalign-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: docalign-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for docalign-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0444b4a032d738bef8feeeb375f6cbed788e9fde993db7ba4e08b587d8502c9b
MD5 26fab7788a9e8e961c03a52fef7550e3
BLAKE2b-256 409b705acefff05a6cd6ef0e68e84c910fc01387e79ee7b66a0b5a3e489ccf1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for docalign-0.1.1-py3-none-any.whl:

Publisher: release.yml on lucasvtiradentes/doc-align

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page