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

dough-synth

v0.2.0

Published

wip synth engine that runs natively and in the browser

Downloads

64

Readme

dough

memory

good for baking. wip synth engine that runs natively and in the browser.

see the superdough puzzle for details.

Demo

dough is deployed at dough.strudel.cc.

contributing

in this repository, we practise jam oriented programming. this means:

  • anybody is welcome to make changes
  • to become a collaborator, create an issue and ask to get added
  • we aim to be hierarchy free, assuming good faith in everyone
  • either create a PR, or push directly to main, both is fine
  • we try to follow the design goals, which are open to change

design goals

these are the initial design goals for dough:

  • runs natively and in the browser
  • a single .c file
  • keep it simple stupid
  • runs fast
  • similar to superdough

Development Setup

To be able to build and test the native version, we're going to install:

  1. portaudio for cross platform audio
  2. liblo for osc messaging
  3. pkg-config to simplify building
  4. node.js to run the osc bridge

To build and test the browser version, you need:

  1. emscripten to compile c to wasm
  2. node.js to run the dev server

MacOS Setup

  1. make sure you have https://brew.sh/ installed
  2. install libraries:
brew install pkg-config liblo portaudio libsndfile libsamplerate emscripten

Linux Setup

sudo apt install liblo-dev portaudio19-dev libsndfile1-dev libsamplerate0-dev emscripten
# .. should work similarly with other package managers

Get the Source Code

git clone https://codeberg.org/uzu/dough.git && cd dough

Native Version

here's how you compile and run the native version:

./scripts/build-native.sh

testing with strudel

so far, i'm doing my testing with strudel. to make sure strudel can talk to dough, you need to run the osc bridge in a separate terminal:

# run strudel osc bridge:
npx --yes @strudel/osc --port 7771

now you can run a pattern with .osc()!

WASM version

the demo is not deployed yet, so you need to run it locally:

  1. run the dev server* via node server.mjs
  2. open localhost:8888
  3. press play

compiling the wasm version

here's how to compile to WebAssembly using emcc:

./scripts/build-wasm-emcc.sh

or the clang build might be easier:

./scripts/build-wasm-clang.sh

after compiling, refresh the page to get the new version of dough.wasm.

MacOS: the system clang might not work, so you'd need to brew install llvm then echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc.

git lfs

this repo uses git lfs. you may have to install the git-lfs plugin and initialize it in the repo by running git lfs install. if the files you see in snapshots/* are smaller than 1kB then git-lfs is not working.

snapshot testing

the reference contained in dough.js is tested with snapshots. if you're in a "correct" state, meaning dough does what you expect it to do, run:

./scripts/write-snapshots.sh

at any later time, you can test the current behavior of dough against the previously "correct" state via:

./scripts/test-snapshots.sh

this is also part of test.yml to make sure things don't break.

note that .pcm files are stored with git lfs, which is why write-snapshots will track them automatically.

inspiration

dough is inspired by