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

@orkestrel/lsp

v0.0.9

Published

A typed Language Server Protocol client over an injected byte transport — base-protocol framing, JSON-RPC and protocol guards, and a stdio child-process transport. Part of the @orkestrel line.

Readme

@orkestrel/lsp

A typed Language Server Protocol client over an injected byte transport: a host-independent core carrying the base-protocol framing codec, the JSON-RPC and protocol guards, and an LSPClient that completes the initialize handshake, owns opened document URIs, and selects pull or push diagnostics from the server's own capabilities, beside a server environment whose StdioClientTransport carries those bytes over a language server run as a child process.

Create a client with the createLSPClient function, hand it a transport, and call start() before you open a document. The client reaches its peer only through the transport it is handed, so any implementation of LSPTransportInterface drives the same client, and the stdio transport ends the child's whole tree inside a bounded termination window. Part of the @orkestrel line.

Install

npm install @orkestrel/lsp

Requirements

  • Node.js >= 22.12.0
  • ESM and CommonJS builds for the . and ./server entry points
  • TypeScript moduleResolution set to node16, nodenext, or bundler

Usage

import { createLSPClient } from '@orkestrel/lsp'
import { createStdioClientTransport } from '@orkestrel/lsp/server'
import { pathToFileURL } from 'node:url'

declare const directory: string

const transport = createStdioClientTransport({
	server: { command: ['my-language-server', '--stdio'], directory },
	grace: 5_000,
})
const client = createLSPClient({ transport, workspace: pathToFileURL(directory).href })
await client.start()
await client.destroy()

Guide

For the full surface — the client lifecycle, the transport seam, the stdio child transport, the framing codec and its retained decode state, the protocol guards, and the LSPError failure type — see the Language Server Protocol client guide.

Package

Typed entry points per the exports field in package.json: the host-independent client, framing codec, guards, constants, and LSPError from @orkestrel/lsp, and the Node stdio transport — StdioClientTransport and createStdioClientTransport — from @orkestrel/lsp/server.

License

MIT © Orkestrel — see the license.