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

@cavuno/board

v4.26.0

Published

Build custom job boards and careers pages with Cavuno’s TypeScript SDK.

Readme

Cavuno Board SDK

Build custom job boards and careers pages with Cavuno’s TypeScript SDK.

@cavuno/board is the zero-dependency client for the Cavuno Board API. It runs in browsers, Node.js 20 or newer, and Cloudflare Workers, with TypeScript declarations generated from the API’s OpenAPI contract.

Documentation · Installing · SDK reference · API reference · Source

Installation

Install as package

npm install @cavuno/board

The package includes ESM and CommonJS builds. ESM imports are tree-shakeable, and helper packages such as @cavuno/board/format can be imported separately.

Install via CDN

No package manager or build step? Follow the CDN installation guide for a version-pinned build and its integrity hash. The CDN build is the same SDK downloaded as one file; package imports remain the recommended choice when they are available.

See Installing for every installation option.

Quick start

import { createBoardClient } from '@cavuno/board';

const board = createBoardClient({
  board: 'pk_your_publishable_key',
});

const [context, jobs] = await Promise.all([
  board.context(),
  board.jobs.list({ limit: 20 }),
]);

console.log(context.name);
console.log(jobs.data);

A pk_… key identifies a board and is public by design. Get it from Settings → Developer → SDK in Cavuno. The client connects to https://api.cavuno.com by default.

The client exposes typed namespaces for jobs and search, companies, salaries, blog, board-user authentication, saved jobs, applications, job alerts, messaging, employer workflows, checkout, candidate access, and SEO data.

Handle errors

Every non-2xx response throws a BoardApiError with the API status, code, details, and request ID.

import { BoardApiError, isNotFound } from '@cavuno/board';

try {
  await board.jobs.retrieve('missing-job');
} catch (error) {
  if (isNotFound(error)) {
    // Render your application's not-found state.
  } else if (error instanceof BoardApiError) {
    console.error(error.code, error.requestId);
  }
}

See Handle SDK errors for the complete error contract and guards.

Authentication

  • A pk_… publishable key identifies the board and may be included in browser code.
  • Candidate and employer sessions use board.auth.*. Choose browser storage deliberately; server-rendered applications should keep sessions in their own httpOnly cookies.
  • Operator and admin credentials must never be used with this SDK or exposed to frontend code.

Read Authentication and sessions before adding signed-in workflows.

Make a request to a custom endpoint

For an endpoint without a namespace method, board.client.fetch<T>(path, init) uses the same board base path, headers, bearer token, serialization, and hooks as the rest of the client. Treat the generic response type as your application’s assertion; custom responses are not generated from the public OpenAPI contract.

See board.client.fetch() for options and examples.

Set up with a coding agent

The package includes version-matched Agent Skills for Codex, Claude Code, Cursor, and other compatible coding agents:

npx @cavuno/board setup

Then ask your agent to set up the Cavuno board using the installed cavuno-board-setup skill. See Set up with an agent for the review and verification workflow.

Resources

MIT © Wollemia

Advertising defaults

board.context() returns ads.enabled, ads.clientId (the AdSense publisher ID), and ads.defaultSlotId (a Google-issued ad unit ID). Render ads only when enabled with a valid publisher and unit. The default reuses the board's existing advertising setup: the enabled jobs:list.footer unit takes priority, otherwise the first enabled valid unit in alphabetical placement-key order is used. No configured unit, disabled advertising, or an invalid publisher yields a null default. Google approval and an existing ad unit are still required.

Your frontend owns ad positions and sizes. Reuse the default across placements, or pass another Google-issued slot ID to an individual ad component; there is no SDK placement registry. Custom units should still respect ads.enabled and the board's consent requirements.