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

proofweave

v1.0.5

Published

Convert Markdown mathematical proofs into clean, well-formatted LaTeX.

Readme

ProofWeave

Convert Markdown mathematical proofs into clean, well-formatted LaTeX. Try it out.

There are two ways to use ProofWeave:

Example

Before:

# Part I -- A small estimate

This example demonstrates headings, theorem environments, lists, and math.

<!--
This Markdown note is kept as LaTeX comments.
## This heading stays commented out
\[x*y\]
-->

## lemma uniform-noise

### statement

For every \(\mathbf{x}\in\mathcal X\), define \(S = \{\mathbf{v} \in \mathbb R^d : \mathbf{v}^{\mathsf{T}} \mathbf{v} \le 1\}\). Let \(\bm{\Theta}\) be the model matrix. Then
\[
  |f(x)| \le C.
\]

### proof

By the preceding estimate, the claim follows. \square

## proposition finite-sample

### statement

Assume $n \ge 1$. Then the estimator is well-defined.

### proof

The construction is deterministic, so the result follows.

## A useful checklist

- Keep the statement readable.
- Use consistent notation for \(\mathcal X\), \(\mathbf{x}\), and \(\bm{\Theta}\).
  - Nested items are supported.
- Use a display when a formula deserves its own line.

After proofweave proof.md with the default options:

\newcommand{\vx}{\bm{x}}
\newcommand{\vv}{\bm{v}}

\newcommand{\mTheta}{\bm{\Theta}}

\newcommand{\fX}{\mathcal{X}}

\newcommand{\set}[1]{\left\{#1\right\}} % set
\newcommand{\transpose}{{\mkern-1.0mu\mathsf{T}}} % transpose

\section*{Part I -- A small estimate}

This example demonstrates headings, theorem environments, lists, and math.

% This Markdown note is kept as LaTeX comments.
% ## This heading stays commented out
% \[x*y\]

\begin{lemma}\label{lem:uniform-noise}
	For every $\vx \in \fX$, define $S = \set{\vv \in \mathbb{R}^d : \vv^\transpose \vv \le 1}$. Let $\mTheta$ be the model matrix. Then
	\begin{equation}
		  | f(x) | \le C.
	\end{equation}
\end{lemma}

\begin{proof}
	By the preceding estimate, the claim follows.
\end{proof}

\begin{proposition}\label{pro:finite-sample}
	Assume $n \ge 1$. Then the estimator is well-defined.
\end{proposition}

\begin{proof}
	The construction is deterministic, so the result follows.
\end{proof}

\subsection*{A useful checklist}

\begin{itemize}
	\item Keep the statement readable.
	\item Use consistent notation for $\fX$, $\vx$, and $\mTheta$.
		\begin{itemize}
			\item Nested items are supported.
		\end{itemize}
	\item Use a display when a formula deserves its own line.
\end{itemize}
  • The output is a LaTeX body, not a complete document; it does not add a preamble or document environment.
  • Tabs are the default structural indentation, and display math in theorem statements uses equation.
  • Math spacing, canonical labels, three-letter prefixes, notation macros, set/transpose cleanup, and proof-final \square cleanup are enabled by default.
  • Declarations such as \vx, \mTheta, \fX, \set, and \transpose are emitted only when a matching expression was actually changed.
  • Markdown comments become line-by-line LaTeX comments; their marker-only edge lines are removed and their contents remain inactive.

CLI

Installation and usage

Node.js 22 or newer is required. The published npm package contains only the CLI bundle.

npm install --global proofweave@latest
proofweave proof.md > proof.tex

Run it once without a global install:

npx proofweave@latest proof.md > proof.tex

Usage summary:

proofweave [options] [FILE.md]

With no file, or with -, ProofWeave reads Markdown from stdin and writes LaTeX to stdout. Use --output FILE/-o FILE to write a separate file, or --modify/-m to replace the input .md file. Only one .md input file is accepted; diagnostics are written to stderr.

Options

General

--help, -h
    Show help.

--version, -v
    Show the CLI version.

--output FILE, -o FILE
    Write LaTeX to FILE instead of stdout.

--modify, -m
    Overwrite the input Markdown file with LaTeX.

Conversion

--indent=tab|2|4|0
    Structural indentation; the default is tab.

--inline-math=dollar|parentheses
    Emit `$...$` (default) or `\(...\)`.

--statement-display=dollars|brackets|equation
    Display math inside theorem statements; the default is equation.

--other-display=dollars|brackets|equation
    Display math in proofs and ordinary text; the default is brackets (`\[...\]`).

--section-numbering=unnumbered|numbered
    Emit unnumbered section commands by default, or numbered commands.

Any display containing `\tag{...}` is forced to the equation environment.

Tidy

--[no-]remove-boxed
    Remove or preserve `\boxed{...}` wrappers.

--[no-]normalize-label-prefixes
    Normalize theorem labels and references to `thm`, `lem`, `pro`, `cor`, `asm`, `def`, or `rmk`.

--[no-]font-command-braces
    Add braces around single-atom font arguments, for example `\mathcal X` → `\mathcal{X}`.

--[no-]collapse-spaces
    Collapse repeated literal spaces inside math while preserving explicit TeX spacing.

--[no-]normalize-inequality-commands
    Normalize equivalent greater-than, less-than, and not-equal spellings.

--ge-command=LATEX
    Target greater-or-equal command; default `\ge`.

--le-command=LATEX
    Target less-or-equal command; default `\le`.

--ne-command=LATEX
    Target not-equal command; default `\neq`.

--[no-]normalize-empty-set-command
    Normalize `\emptyset` and `\varnothing`.

--empty-set-command=LATEX
    Target empty-set command; default `\varnothing`.

--[no-]normalize-math-symbols
    Convert single bold lowercase/uppercase symbols to `\v*`/`\m*`, and single uppercase `\mathcal` symbols to `\f*`.

--[no-]unify-set-notation
    Convert matched escaped-brace set variants to `\set{...}`.

--[no-]unify-transpose
    Convert transpose spellings such as `^{T}`, `^{\top}`, and `^{\intercal}` to `^\transpose`.

--transpose-expression=LATEX
    Define the body of `\transpose`; default `\mkern-1.0mu\mathsf{T}`.

The \v*, \m*, and \f* conventions follow BAAI's Notation for Machine Learning.

Math spacing

--[no-]math-spacing
    Enable or disable the math-spacing formatter as a whole.

--[no-]relations
    Add consistent spaces around relations such as `=`, `<`, `\le`, and `\in`.

--[no-]binary-operators
    Add consistent spaces around binary operators such as `+`, `-`, `*`, and `\times`.

--[no-]punctuation
    Normalize spaces around commas, semicolons, and colons.

--[no-]compact-parentheses
    Keep delimiters and function calls compact, for example `f(x)`.

--[no-]paired-bars
    Normalize inner spacing for paired absolute-value and norm bars, for example `| x |`.

--[no-]named-functions
    Add the appropriate gap after functions such as `\sin`, `\log`, and `\exp`.

Tidy options remain active when --no-math-spacing is used; the six math-spacing subrules are effective only while --math-spacing is enabled. Use proofweave --help for the same option list in compact form.

Browser

Open https://tshzhu.github.io/proofweave/ to edit Markdown in the browser. The editor supports the same conversion options as the CLI, syntax highlighting, diagnostics, drag-and-drop of one .md file, copy/download actions, editor zoom, and light/dark themes. Conversion runs entirely in the browser.

Shareable option URLs

When a conversion option differs from the default, ProofWeave adds a versioned opt query parameter containing the same conversion flags shown in the CLI panel:

https://tshzhu.github.io/proofweave/?opt=%7B%22v%22%3A1%2C%22args%22%3A%5B%22--indent%3D4%22%5D%7D

Copy the URL or the equivalent CLI command from the sidebar. Markdown content, theme, editor zoom, and selected view are not stored in the URL.

Development

npm ci
npm run dev
npm test
npm run check
npm run build
npm run preview -- --port 4187

npm run build creates the browser site in dist/ and the CLI bundle in dist-cli/. npm pack --dry-run verifies that the npm package contains only the CLI launcher, CLI bundle, README, LICENSE, and package metadata.

License

MIT