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

proto-build

v0.2.3

Published

A front-end sandbox tied to project assets that is ideal for build processes.

Readme

proto-build

npm install --save-dev proto-build

Proto-Build was created for less-than-ideal development environments that make modern front-end workflows untenable. You create snippets of HTML that represent your project's UI and place them in your models/ directory. Proto-build uses templates and your input options to build a basic sandbox environment with an index of your models. Global css and js will be applied, project state is saved, and subsequent runs will update only the parts of your project that changed.

Methods

init(options)

Runs project setup, compares project state, updates project accordingly.

watch(options [,callback])

Runs init() and uses chokidar to watch for model and template updates.

writeAssets(options [,callback])

Runs project setup and regenerates declared assets (global and model-specific).

Model Config

Insert model config text at the top of your snippet to add additional assets or display the status of your model. CSS and JS assets will always be relative to that particular model.

css: ../relative/to/that/model.css
css: ../other/one/file.css
js: ../some/script.js
status: wip (or done)
===
<div class="snippet-here">
  ...
</div>

Example Gulp Workflow

var gulp = require('gulp');
var sync = require('browser-sync').create();
var pb = require('proto-build');

var options = {
  name: 'Proto-Build Model Index',
  models: 'test/models',
  output: 'test/output',
  css: ['../css/styles.css']
}

gulp.task('default', function() {

  // start proto-build watch
  // callback only fires on file updates
  pb.watch(options, sync.reload);

  // start browser-sync
  sync.init({ server: './', startPath: 'test/output' });
  
  // watch for css, rewrite assets, and inject
  gulp.watch('test/css/**/*', function() {
    pb.writeAssets(options, function() {
      gulp.src('test/css/**/*').pipe(sync.stream({match: '**/*.css'}));
    })
  })

  // watch for js, rewrite assets, and reload
  gulp.watch('test/js/**/*', function() {
    pb.writeAssets(options, function() {
      sync.reload();
    })
  })
})

Options

None of your declared paths have to exist when declared. Proto-Build will make and populate them for you.

var options = {

  name: 'Project Name',
  // (string) project name that appears on index page

  models: 'path/models/',
  // (string) path to model directory
  
  output: 'path/output/',
  // (string) path to output directory

  css: ['path/style.css'],
  // (array) paths to css files (relative to output)

  js: ['path/script.js'],
  // (array) paths to js files (relative to output)

  templates: 'path/templates/',
  // (string) path to folder with template overwrites

  fileMode: 0755,
  // (integer) permissions for created files (0744 default)

  dirMode: 0755
  // (integer) permissions for created directories (0744 default)
  
}