Skip to content

Welcome to lychee!

lychee is a fast, async, stream-based link checker written in Rust. 🦀✨ It finds broken URLs and mail addresses inside Markdown, HTML, reStructuredText, websites, and more!

Let’s take a look at some usage examples.

The following command recursively checks all links in all supported files inside the current directory.

Terminal window
lychee .

This traverses all subdirectories and checks the links in all files which lychee supports, such as .md, .html, and more.

Terminal window
lychee https://example.com

This command checks all links on the website https://example.com. It is not recursive and only checks the links on the given page. Recursion is currently not supported. You can however download the sitemap of a website and use that as input.

Check Only Specific Files

Terminal window
lychee README.md
lychee test.html info.txt
lychee test.html info.txt https://example.com

This command checks only the links in the given files. It also demonstrates how to check multiple inputs, such as files and URLs in a single command.

Terminal window
lychee --offline path/to/directory

This will only check the links in the files in the given directory and not make any network requests. It is helpful for a quick local “linting” of files.

Terminal window
lychee https://raw.githubusercontent.com/lycheeverse/lychee/master/README.md

If a URL is given as input and it ends with a file extension other than .html, lychee respects the file extension and interprets the file accordingly. Here, we interpret the file as Markdown.

Terminal window
cat test.md | lychee -
echo 'https://example.com' | lychee -

You don’t need to put links into a file first. You can also pipe them into lychee directly.

Terminal window
lychee 'public/**/*.html'

Have many files in the same directory structure you want to check? You don’t need to list them all. Just use a shell glob!

The above command checks all .html files in the public directory and its subdirectories.

Advanced Globbing And ~ Expansion

Terminal window
lychee '~/projects/big_project/\*_/README._'

This command checks all README files inside the big_project directory with files ending in any file extension. The ~ gets expanded to your home directory.

Terminal window
lychee --glob-ignore-case --verbose '~/projects/\*_/[r]eadme._'

In this command, we ignore the case when globbing, so it matches

  • ~/projects/my_project_/readme.md
  • ~/projects/cool_app_/README.txt
  • ~/projects/website_/readme.rst
  • ~/projects/rust_game_/README
  • ~/projects/python_script_/Readme.markdown

If you have atool installed, you can check links inside .epub files as well!

Terminal window
acat -F zip {file.epub} "_.xhtml" "_.html" | lychee -