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 🙏

© 2025 – Pkg Stats / Ryan Hefner

backtalk

v0.3.0

Published

An embeddable scripting language for non-programmers.

Readme

BackTalk

Build Status

    npm install backtalk --save

BackTalk is a programming language that is focused on natural language-inspired embedded scripting. The idea is to let users of your software to talk back to you. The interpreter and parser are implemented in TypeScript, and can be compiled into a relatively simple-to-use library that can be embedded in other {Java|Type}Script software. BackTalk is not done, but is somewhat usable, and can be run both in a command-line REPL as well as in a simple browser-based example (see /examples).

Features

  • small API for embedders
  • a simple debugger with breakpoints
  • async-transparent code execution with promises
  • well-architected with separate parser, AST, and simple VM.

Goals

part of an integrated runtime/developer environment

Code is not free-standing, it only makes sense within the context of the system it is written for. It is expected that users would write small chunks of code that hook into parts of an existing system. This means that the embedding software should help the user as much as possible. They are not expected to be experts.

A scope is created by the embedding program for each of the code chunks a user writes, and this scope contains the necessary information to help the user via code completion and documentation.

separate program structure from program expression

Code should be written in relatively small, isolated chunks that are basically independent. Maybe they interact with systems, but they do not generally interact with each other.

easy to read

The goal of this language is not to implement entire large pieces of software, it is to create points of user customisation within software. For this reason, it should be expressive, and tied closely to the software that is running the chunks. For instance, it should be possible to make nearly natural language-like expressions.

examples

for a collision handler between ball and paddle

when:
    $ball is left of $paddle
    then:
        bounce $ball to the left

    $ball is right of $paddle
    then:
        bounce $ball to the right

for a collision handler between ball and screen edges

when:
    $ball is below $edge
    then:
        bounce $ball down

    $ball is above $edge
    then:
        bounce $ball up

    $ball is left of $edge:
    then:
        increase (left player ) score

    $ball is right of $edge
    then:
        increase ( right player ) score


-- 'left player' is a function call that retrieves a player object or identifier

powerful

Composing expressions allows for simpler, more specific functions to be exposed!

a big red circle:
    a bit left of center
    10 pixels below center

Technical Goals

  • a safe embeddable, user-controllable programming language that can be parsed/interpreted in the browser. Sandboxing is important!
  • reasonably fast, but speed is not a major goal
  • simple API