Skip to content

Blog

Vale vs. EkLine: Why We Built a "Zero-Config" Alternative for Docs CI

Vale is the industry standard for prose linting, but it requires significant "configuration debt" (managing .ini files, style folders, and regex rules). EkLine offers a "Zero-Config" alternative that works out of the box. Unlike Vale, EkLine includes native broken link validation and uses smart filt

Split illustration: Vale's do-it-yourself setup leaves a 'Linter Mechanic' buried in config files, while a writer drives a zero-config EkLine car.
Published on
Read time
4 min

If you manage technical documentation, you know Vale. It is the industry standard for prose linting. It is powerful, open-source, and highly customizable.

But "customizable" is a double-edged sword.

To get Vale running effectively in a CI/CD pipeline, you often end up managing a complex web of .vale.ini files, styles/ directories, and vocab.txt lists. You become a "Linter Mechanic" instead of a writer or engineer.

We built EkLine not to replace the need for quality checks, but to remove the maintenance tax associated with them.

Here is a look at the difference between the "Do-It-Yourself" approach (Vale) and the "Batteries-Included" approach (EkLine).

The Hidden Cost of Vale: "Configuration Debt"

Vale is an incredible engine. It uses Regular Expressions to catch style violations. But out of the box, it does very little. You have to build the car around the engine.

1. The Setup Friction

To set up a robust Vale environment, you typically need:

  1. A .vale.ini configuration file.
  2. A styles/ directory (which you must sync across repos).
  3. Specific rule implementations (YAML files) for every check.
  4. A separate tool (like lychee) to check for broken links, because Vale doesn't do that.

Typical Vale Config:

.vale.iniINI
StylesPath = styles
MinAlertLevel = suggestion
Packages = Google, Microsoft
 
[*.md]
BasedOnStyles = Vale, Google
Google.Passive = NO
Microsoft.Contractions = YES

You have to decide every rule. You have to maintain every exception.

2. The "Noise" Problem in CI

When you add Vale to a GitHub Action, it lints the entire file.

If a developer fixes a typo in a 5,000-line legacy file, Vale might flag 50 preexisting style errors.

Result: The developer ignores the check, or you turn it off.

The EkLine Approach: "Batteries Included"

We designed EkLine to be the tool you drop into your workflow when you want results, not a configuration project. It is a Documentation Reviewer that works out of the box.

1. Zero-Config Setup

EkLine comes pre-trained with the best practices from the Google Developer Style Guide and Microsoft Manual of Style. You don't need to create a styles folder. You don't need to write Regex.

You simply add the action, and it starts reviewing.

.github/workflows/ekline.ymlYAML
- uses: ekline-io/ekline-github-action@v1
  with:
    ek_token: ${{ secrets.EKLINE_KEY }}
    reporter: github-pr-review
    filter_mode: added

That’s it. No external config files required.

With Vale, you need a second tool to check for 404s (Broken Links).

EkLine includes Broken Link Validation natively.

It scans your docs for dead URLs and invalid email formats automatically during the review. One tool, one workflow.

3. Smart Noise Reduction (filter_mode)

This is the feature developers love most. EkLine allows you to scope the review strictly to the lines changed in the PR.

  • filter_mode: added: EkLine only reviews the lines you added or modified.
  • filter_mode: diff_context: EkLine reviews the changed lines and their immediate context.

This means you can add EkLine to a massive, messy legacy repo today, and it won't scream about old errors. It will only guard the new code.

Comparison: The Maintenance Burden

FeatureValeEkline
SetupHigh Effort (Config + Styles)Zero Config (SaaS)
Link Validation❌ Requires separate tool (e.g., lychee)✅ Native & Built-in
Noise Control❌ Lints entire file✅ Filter by added lines
Rule UpdatesManual (Update style files)Automatic (Managed Cloud)
Review TypeStatic Analysis (Regex)AI-Assisted Review

When to use which?

Stick with Vale if:

  • You have a dedicated Technical Writer who loves tweaking Regex rules.
  • You require a fully offline / local-only solution.
  • You have highly specific, non-standard style requirements that you've already built custom rules for.

Switch to EkLine if:

  • You are an Engineering Team: You want docs quality CI, but you don't want to maintain a "docs infra" team.
  • You want to focus on Writing: You have Technical Writers who love writing rather than setting up rules.
  • You hate noise: You only want feedback on the code you just wrote (filter_mode: added).
  • You want Simplicity: You want Grammar, Style, Tone, and Broken Links checked in a single GitHub Action.

Summary

Vale is a great engine for those who want to build their own linter.

EkLine is a complete car for those who just want to drive.

If you are tired of maintaining .ini files and want a reviewer that just works, give EkLine a try.


Read more about

Blog

What Is LFM2.5-24B-A2B, and Can It Run Your Agent Locally?

·15 min read

LFM2.5-24B-A2B uses 2.45B parameters per token, but runtimes normally keep all 24B weights in memory. What hardware it needs, how its tool calls work, and a worksheet for deciding whether to adopt, test or defer it for a local agent.

Blog

How to keep a Pylon knowledge base accurate after every release

·11 min read

Pylon's signals catch what tickets show is missing. A release-time check catches what a release made wrong, before customers or the AI agent see the old answer. A playbook with three cadences and one approver per fix.

Blog

Claude Code for technical writers: what works and what breaks

·11 min read

A five-step Claude Code setup for documentation, from CLAUDE.md to a lint hook, plus an honest check of what the newer features fix and what still depends on one writer.

Blog

What Are GitHub Actions Lockfiles, and Do They Replace SHA Pinning?

·15 min read

GitHub Actions workflow lockfiles record the commit and source repository behind every action an onboarded workflow uses, transitive actions included. What they replace, what they leave to you, and how to pilot one release workflow.

Blog

AI Agent Pricing: What Should Count as a Billable Outcome?

·16 min read

Before you choose seats, usage, or outcome pricing for an AI agent, write down the event you will bill. A decision table, a billable-event record, seven edge cases, and a modeled cost per outcome.

Blog

What Is Poppy? When Should Your API Support Customer Agents?

·15 min read

Poppy, the Personal Agent Protocol from Sierra and Meta, is a draft 0.1 consent and session layer for customers' AI agents. What it adds over OAuth and MCP, and whether your API should adopt, experiment, or wait.