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

@dpeek/dataless

v0.1.0

Published

A durable, agent-first data layer for portable programs

Downloads

97

Readme

Dataless

Dataless rewrites Formless's data layer; Formless is intended to become its UI. A portable JSON Program defines typed Records and Operations. The Authority owns validation, transactions, and durable storage.

The current runtime is Bun with SQLite, built with Effect. Cloudflare is deferred.

Documentation

  • AGENTS.md: working rules and the spec ownership map.
  • spec/: agent-facing contracts for implemented behavior.
  • todo/: agent-facing workstreams, remaining proposals, and dependencies.

User-facing guides are deferred until there is an audience.

Codeless runs capability work from todo/, integrates through main, and leaves dev for personal development.

Contributor quick start

Install Bun before starting. From the repository root in the first terminal:

bun install
bun run dev

This starts the server in the ignored tmp/ directory with Bun watch mode. Wait for the readiness message before connecting. Source changes restart the process; the installed Program and data persist.

In a second terminal, also starting from the repository root:

cd tmp
bun ../bin/dataless describe
bun ../bin/dataless operations

These commands use the running project's RPC endpoint. A new project starts with an empty Program, so an empty Operation list is expected. Connect an MCP client to define Records, Fields, and Operations. Example JSON files are not automatically loaded by serve.

Commands discover the nearest ancestor containing .dataless/, so run them inside the intended project. Without an existing ancestor project, serve creates one in its working directory. In project mode, client commands require an existing project and do not start the server.

The default listener is 127.0.0.1:3765, with RPC at /rpc and MCP at /mcp. A port conflict fails startup; serve --port provides a development override. Use the endpoints printed at startup when overriding the port.

For command help, from the repository root:

bun run dataless --help

See Clients and transports for invocation inputs, results, and explicit database/remote targeting.

Connect an MCP client

Use a client on the same machine as the server. From the second terminal, still in tmp/, retrieve the existing owner token:

bun ../bin/dataless token

Configure the client with:

| Setting | Value | | -------------------- | ----------------------------------------------- | | Transport | Streamable HTTP | | URL | http://127.0.0.1:3765/mcp | | Authorization header | Bearer <token>, using the token printed above |

The token command prints a secret. Keep it out of committed configuration and URLs; use the client's secret or environment-variable support where available. A desktop client must receive any referenced environment variable in its own process environment.

This is a local, same-user development setup. A client on another machine cannot reach this loopback address. The endpoint is served by the running project server.

See MCP contracts for discovery and invocation, and semantic edits for authoring.

Checks

Run checks from the repository root:

bun run smoke
bun run check

smoke runs the project workflow tests: temporary projects, authenticated RPC/MCP, CLI use, persistence, and restart. The tests stop their servers and remove their temporary state.

check runs Dataless's TypeScript, lint, formatting, and tests, with automatic fixes. Review any resulting file changes. For tests alone, use bun test. Server tests require local loopback listeners.

Release

From a clean main checkout, publish the next patch release with:

bun run release

The script verifies npm authentication, runs the full check and an npm package dry run, increments the patch version, commits package.json with the version as the complete commit message, creates a matching v<version> tag, and publishes @dpeek/dataless. It intentionally does not push the commit or tag.

For non-interactive local publishing, create an npm granular access token with read/write access to @dpeek/dataless (or the @dpeek scope) and Bypass 2FA enabled. Keep it outside the repository, for example in your user-level ~/.npmrc:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

Put the token itself in the repository's ignored .env file:

NPM_TOKEN=npm_your_token_here

bun run release loads .env and passes the token to npm. Never put the token directly in a committed .npmrc or source file.

If npm package settings disallow tokens, publishing will still require an OTP. For hosted CI, prefer npm trusted publishing instead of a long-lived token.

Examples and evaluations

Local state

The development project normally keeps its database, installed Program, receipts, and owner credential under tmp/.dataless/. Connection metadata records the current listener addresses. The repository ignores tmp/ and its root .dataless/; ignore .dataless/ yourself in other project repositories.

Stop the development server with Ctrl+C. Restarting preserves its Program, data, and token. To reset a disposable development project, stop every process using it, then delete tmp/.dataless/. This permanently removes its data and token; update the MCP client credential after creating the replacement project.

See Project and storage for the lifecycle and storage contracts.

Backing up a database

There is no Dataless backup command. For a live database, use SQLite-aware tooling such as the SQLite backup API or VACUUM INTO.

For a file copy, stop all processes using the database and wait for clean exit. Do not copy only the main database while writes may be active. After an unclean stop, a -wal file may hold committed data: keep it paired with its database and recover through SQLite before making a clean backup. Do not discard or mix WAL files from different databases. See SQLite's backup and recovery guidance.