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

@raisindb/function-assemblyscript

v0.5.10

Published

Guest SDK for writing RaisinDB server functions in AssemblyScript, compiled to a WebAssembly component

Readme

@raisindb/function-assemblyscript

Write a RaisinDB server function in AssemblyScript and ship it as a WebAssembly component — TypeScript-shaped syntax, no embedded JavaScript engine, artifacts measured in kilobytes.

raisindb create function greet --lang assemblyscript --ns demo
raisindb function build wasm/demo/greet
raisindb function run   wasm/demo/greet --input '{"name":"Ada"}'

Writing a handler

import { run, log, nodes, unknownHandler, cabi_realloc } from "@raisindb/function-assemblyscript";

function greet(input: string): string {
  log.info("greeting");
  const children = nodes.getChildren("content", "/pages", 50);
  return '{"greeting":"hello","pages":' + children.length.toString() + "}";
}

// The component exports ONE function; the node's `entry_file` suffix picks the
// handler, so routing is an ordinary switch.
function route(name: string, input: string): string {
  if (name == "default") return greet(input);
  return unknownHandler(name, "default");
}

export function handler(np: i32, nl: i32, ip: i32, il: i32): i32 {
  return run(np, nl, ip, il, route);
}
export { cabi_realloc };

handler and cabi_realloc must both be exported from the entry module: wasm-tools component new looks them up by name.

Why the lowering is hand-written

AssemblyScript deliberately does not implement WASI or the Component Model and has no wit-bindgen backend, so asc produces a core module while the host requires a component. assembly/abi.ts is the bridge — the only file that knows about pointers — and raisindb function build runs asc → wasm-tools component embed → wasm-tools component new.

Two ABI details it exists to get right, both of which fail silently:

  • An imported interface is named with its package version, raisin:function/[email protected].
  • A variant discriminant is a u8 padded to the payload's alignment, so result<string, string> is { u8 tag, 3 pad, i32 ptr, i32 len }. Read as an i32 the tag picks up padding and every Ok looks like an Err — with the payload still decoding correctly.

Strings, not objects

Handlers take and return JSON strings. AssemblyScript has no built-in JSON, and bundling one would make every artifact pay for it. Use json-as if you want typed (de)serialisation, or build strings directly for simple outputs.