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

@codincod/codemirror-lang-clojure

v0.1.0

Published

Clojure language support for the CodeMirror code editor

Readme

@codincod/codemirror-lang-clojure

This package implements Clojure language support for the CodeMirror code editor.

Written in part for CodinCod, a competitive coding platform, where it colours the editor people solve puzzles in.

This code is released under an MIT license.

Usage

import {EditorView, basicSetup} from "codemirror"
import {clojure} from "@codincod/codemirror-lang-clojure"

const view = new EditorView({
  parent: document.body,
  extensions: [basicSetup, clojure()],
})

Measuring it

The grammar is measured against real Clojure with lezer-survey, which has to sit beside this directory:

npm run measure -- ~/corpora/clojure
npm run gaps -- ~/corpora/clojure

Against the 889 Clojure snippets CodinCod's guessing game holds, 853 parse with no error node. The other 36 are files Clojure's own reader turns down as well, mostly a paren the snippet was cut in half by; every file the reader accepts, the grammar reads clean. The reader turns down 50 in all, so on 14 of them this parser is the more forgiving of the two, which is what an editor wants while somebody is still typing.

What it covers

Clojure, ClojureScript, the .cljc files that are both, and EDN, which are one reader between them. Every reader macro the language has: sets, anonymous functions, regular expressions, metadata, namespaced maps, reader conditionals, tagged literals, symbolic values, and the datum comment that removes the form behind it however long it runs.

The tree says which word in a form is the verb, which words a let or a defn binds, and which of the punctuation a Lisp is made of is a name rather than syntax: / is division, % is an argument, result# is a gensym, and a comma is whitespace.

The oracle

tools/reads asks Clojure's own reader whether a file reads, which is how the corpus is told from the files that only share its extension. It runs babashka out of the code runner's Nix store, and prints one line for every file the reader turned down.