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

@candid-core/schema

v0.1.1

Published

Zod-style schema runtime for Candid: builders with static inference, structural validation, a TypeScript-native binary codec, typed actors over a transport-only agent, and form metadata — all driven by candid-core's canonical Contract model.

Readme

@candid-core/schema

A Zod-style schema runtime for Candid, driven by candid-core's canonical Contract model: schema builders with static inference, structural validation, a TypeScript-native Candid binary codec, typed actors over a transport-only agent, and UI-agnostic form metadata.

import { c, type Infer } from "@candid-core/schema";
import { validate } from "@candid-core/schema/validate";
import { encode, decode } from "@candid-core/schema/codec";

const Account = c.record({ owner: c.principal, balance: c.nat });
type Account = Infer<typeof Account>; // { owner: Principal; balance: bigint }

validate(Account, value);       // { ok: true } | { ok: false, issues }
encode(Account, value);         // { ok: true, bytes } | { ok: false, issues }

Modules, each a subpath export:

  • . — the schema core: the c builders, Schema<in out T> (deliberately invariant), Infer, and the node interfaces walkers narrow on.
  • ./validate — bounded, fail-closed structural validation; never throws on any value; issues carry stable codes and $-rooted paths.
  • ./contract — build the same schemas at runtime from a canonical Contract JSON document plus a hash-enforced field-name table.
  • ./codec — the Candid binary wire format, schema-directed, with the spec's coercion relation on decode and explicit resource budgets. Verified bidirectionally against the reference implementation's vectors.
  • ./actorcreateActor/callFunc over a two-method byte-pipe Transport; an @icp-sdk/core agent adapts in ~10 lines, and the agent never sees a schema.
  • ./forms — form-generation metadata: per-kind controls, constraints, labels, lazy recursion, and validation-issue-to-form-node resolution.
  • ./labels — the Candid label hash and the _N_ rendering convention.

The domain shapes (a deliberate decision)

Types describe the modern domain, not the agent-js runtime shapes: opt T is T | null (collapsing opts fail closed at generation), variants are { tag, value } discriminated unions, anonymous vec nat8 is Uint8Array, nat/int/64-bit integers are bigint. Compatibility with agent-js value shapes is an explicit non-goal, recorded on the project's issue tracker.

@icp-sdk/core is a type-only peer dependency: the principal primitive types against its Principal, so the shipped declaration files import that type and a TypeScript consumer must install it — without it, compiling this package's types fails with a missing-module error naming @icp-sdk/core/principal. It is marked optional in npm's install metadata because nothing imports it at runtime: plain JavaScript consumers need nothing, and no bytes from it are bundled. Any package providing that subpath's types satisfies the requirement.

Verification

Every published artifact passes a packaged-consumer gate before release: the tarball npm pack produces is extracted into a clean project, compiled under strict TypeScript with skipLibCheck off, and executed — root and every subpath export, a real encode/validate round-trip. The codec is additionally verified in both directions against the reference implementation's own wire vectors.

Provenance

Generated bindings, the Contract model, and the conformance gates live in the candid-core repository; this package versions independently (pre-1.0), and each release documents the generator version it pairs with.