npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@rejot-dev/thalo-cli

v0.2.5

Published

A command-line linter for thalo files. Runs diagnostics on `.thalo` and `.md` files containing thalo syntax.

Downloads

876

Readme

thalo-cli

A command-line linter for thalo files. Runs diagnostics on .thalo and .md files containing thalo syntax.

Installation

# Install globally
npm install -g @rejot-dev/thalo-cli

# Or with pnpm
pnpm add -g @rejot-dev/thalo-cli

Development

# From the monorepo root
pnpm install
pnpm exec turbo run build --filter=@rejot-dev/thalo-cli

# Run directly
node apps/thalo-cli/dist/mod.js --help

Parser

The CLI uses a WebAssembly-based parser (via web-tree-sitter) that works on all platforms and Node.js versions, including Node.js 24+. Run thalo --version to see which parser is active.

Format Command

The thalo format command requires the optional @rejot-dev/thalo-prettier plugin:

npm install @rejot-dev/thalo-prettier

Note: thalo-prettier prefers native tree-sitter bindings but will fall back to WASM if native bindings are unavailable. All other CLI commands work on Node.js 24+ via WASM fallback.

Usage

thalo [options] [files or directories...]

Basic Examples

# Check all files in a directory
thalo notes/

# Check specific files
thalo file.thalo journal.md

# Check current directory
thalo

Options

| Option | Description | | --------------------- | ------------------------------------------------------ | | -h, --help | Show help message | | -v, --version | Show version number | | -q, --quiet | Only show errors, suppress warnings and info | | -f, --format <fmt> | Output format: default, json, compact, github | | --no-color | Disable colored output | | --severity <level> | Minimum severity to report: error, warning, info | | --max-warnings <n> | Exit with error if warnings exceed threshold | | --rule <rule>=<sev> | Set rule severity (can be repeated) | | --list-rules | List all available rules | | -w, --watch | Watch files for changes and re-run |

Output Formats

Default

Colored output with file location, severity, rule code, and message:

/path/to/file.md:1:1 ERROR [unknown-entity] Unknown entity type 'lore'.
/path/to/file.md:3:11 WARNING [unresolved-link] Unresolved link '^self'.

JSON (-f json)

Structured JSON output for tooling integration:

{
  "files": 11,
  "issues": 70,
  "errors": 54,
  "warnings": 16,
  "info": 0,
  "diagnostics": [
    {
      "file": "/path/to/file.md",
      "line": 1,
      "column": 1,
      "endLine": 9,
      "endColumn": 1,
      "severity": "error",
      "code": "unknown-entity",
      "message": "Unknown entity type 'lore'."
    }
  ]
}

Compact (-f compact)

Minimal single-line format:

/path/to/file.md:1:1: E [unknown-entity] Unknown entity type 'lore'.
/path/to/file.md:3:11: W [unresolved-link] Unresolved link '^self'.

GitHub Actions (-f github)

Workflow commands for GitHub Actions annotations:

::error file=/path/to/file.md,line=1,col=1,endLine=9,endColumn=1,title=unknown-entity::Unknown entity type 'lore'.
::warning file=/path/to/file.md,line=3,col=11,endLine=3,endColumn=17,title=unresolved-link::Unresolved link '^self'.

Rules

List all available rules with --list-rules:

| Rule | Default | Description | | -------------------------- | ------- | -------------------------------- | | unknown-entity | error | Unknown entity type used | | missing-required-field | error | Required metadata field missing | | unknown-field | warning | Unknown metadata field used | | invalid-field-type | error | Field value has wrong type | | missing-required-section | error | Required section missing | | unknown-section | warning | Unknown section used | | unresolved-link | warning | Link reference not found | | duplicate-link-id | error | Same link ID used multiple times |

Configuring Rules

Override rule severities with --rule:

# Disable a rule
thalo --rule unknown-entity=off notes/

# Change severity
thalo --rule unresolved-link=error notes/

# Multiple rules
thalo --rule unknown-entity=off --rule unknown-field=off notes/

Valid severities: error, warning, info, off

CI Integration

GitHub Actions

- name: Lint thalo files
  run: thalo -f github notes/

Warning Threshold

Fail if too many warnings:

thalo --max-warnings 10 notes/

JSON Report

Generate a report file:

thalo -f json notes/ > thalo-report.json

Watch Mode

Re-run on file changes:

thalo -w notes/

Press Ctrl+C to exit.

Exit Codes

| Code | Meaning | | ---- | ------------------------------------- | | 0 | No errors | | 1 | Errors found or max warnings exceeded | | 2 | Invalid arguments |