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

@mutinylabs/slip

v0.2.0

Published

Slip SDK — write a football rule in plain English, lock it on Solana, settle it with a TxLINE proof. Zero UI deps; node + browser.

Downloads

23

Readme

@mutinylabs/slip

Infrastructure SDK for AI-compiled, TxLINE-settled parimutuel markets on Solana.

Public boundaries

  • The default @mutinylabs/slip entry is browser safe and Kit based.
  • SlipClient.compileRulebook calls a configured real Slip server API and preserves consumer labels exactly.
  • @mutinylabs/slip/ai uses AI SDK structured output to interpret natural language on a server.
  • @mutinylabs/slip/txline owns authenticated TxLINE fixtures, snapshots, and proofs.
  • createGroqRuleModel runs it against Groq with an explicit server-side API key.
  • compileMarketRuleOutput maps semantic output to canonical TxLINE keys and rejects invalid partitions.
  • RULEBOOK_PROMPT_SKILLS and RULEBOOK_PROMPT_EXAMPLES assemble reusable domain guidance and few-shot demonstrations.
  • TxlineClient owns guest JWT renewal, fixture and score snapshots, proof retrieval, and token activation.
  • The public SlipClient builds all five generated Kit instructions, verifies references, reads accounts, and closes browser subscriptions.
  • ./generated exports the checked-in Codama client rendered from the Anchor IDL.

The default package installs only @solana/kit. Server and Anchor entry points declare their runtime libraries as optional peers, so a browser or automated reader does not inherit Anchor, web3.js, SPL Token, or AI providers merely by installing the SDK. Consumers of /ai, /txline, or /anchor install the optional peers used by that entry point explicitly.

The model never supplies fixture IDs, stat keys, fees, stakes, or settlement values. Model output is untrusted until the deterministic validator accepts it.

Compile a Rulebook

import { compileMarketRule } from "@mutinylabs/slip/ai";
import { TxlineClient } from "@mutinylabs/slip/txline";

const txline = new TxlineClient({
  origin: process.env.TXLINE_DEVNET_ORIGIN,
  apiToken: process.env.TXLINE_API_TOKEN,
});
const fixture = await txline.getFixture(18_209_181);
const rule = await compileMarketRule({
  model: process.env.SLIP_RULE_MODEL!,
  fixture,
  text: "Will both teams score before halftime?",
});

AI Gateway credentials belong on a server. Browser applications should call a server route such as Slip's POST /api/v1/compile rather than embed provider credentials.

Build a public-client action

import { address } from "@solana/kit";
import { createSlipClient, parseAmount } from "@mutinylabs/slip";

const client = createSlipClient({
  network: "devnet",
  rpcUrl: process.env.SOLANA_RPC_DEVNET!,
  websocketUrl: process.env.SOLANA_WS_DEVNET,
  programAddress: address(process.env.SLIP_PROGRAM_ID!),
  settlementMint: address(process.env.SLIP_SETTLEMENT_MINT!),
});
if (!(await client.supportsUnifiedMarkets())) throw new Error("Unified Slip binary unavailable");

const prepared = await client.buyTicket({
  market: address(marketAddress),
  buyer: address(walletAddress),
  outcomeIndex: 2,
  amount: parseAmount("3.5"),
  nonce: 1n,
});

The returned Kit instructions are real and include required idempotent ATA creation. The application retains signing, simulation, submission, and confirmation authority through Wallet Standard or its server signer; the public SDK never invents a successful transaction.

Reads and subscriptions

  • getMarket, getTicket, listMarkets, listWalletTickets
  • watchMarket with an explicit teardown function
  • verifyReference, marketAddress, ticketAddress

Core Solana RPC has no server-side getProgramAccounts pagination. SDK cursor pages are deterministic but perform one program-account scan. Operators with large account sets should back the same public contract with a real Geyser or RPC indexer; the SDK does not pretend local slicing is provider-side pagination.

Verification

pnpm --filter @mutinylabs/slip test
pnpm --filter @mutinylabs/slip typecheck
pnpm --filter @mutinylabs/slip build
pnpm --filter @slip/program test:surfpool

Live boundaries are explicit commands because they require credentials:

pnpm --filter @mutinylabs/slip test:ai
pnpm --filter @mutinylabs/slip test:txline