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

vorta

v1.1.0

Published

a tool to manage your local

Readme

vorta

overview

vorta is a tool to configure local environments in much the same way we configure CI/CD pipelines. A lot of the time we build out complex flows for our CI/CD around testing, linting, and deployment. These complex flows are also generally needed for each person's local development environment too, but we don't have a nice tool to handle it. vorta is looking to fill in this gap, so that the local environment can be as predictable and reproducible as your CI/CD pipelines.

In an ideal world you'd use vorta calls in your CI/CD pipeline as well. You can even add steps to a pipeline that validate the local env isn't broken by a new change, not just the deployed code.

A developers local environment is as important, if not more so, than production. Let's make sure to validate not just that the repo will release the code, but that local development is stable too!

how does it work?

vorta is designed to look at the ./jems folder relative to your cwd for the vorta. In the ./jems folder you have a series of .yml files that can be run. To run a single jem you'd call:

$ vorta <jem-name>
finding <jem-name>...
running <jem-name> steps!
...
vorta ran the <jem-name> in <some>ms!

jems

A jem, short for Jem'Hadar, is a simple yaml file of this format:

version: 1.0.0
tasks:
  build-files:
    script: 'yarn run build'
  start-docker:
    if: tasks.build-files.failure != true
    script: 'docker-compose -f ./dc/base.yml up -d'
    failure: 'echo "heck, docker is not working" && exit'
    parallel: true
    ignoreFailure: true
  start-dev:
    script: 'yarn run start'
    success: 'open localhost:3000'
    parallel: true

flows:
  local:
    tasks:
      - build-files
      - start-docker
      - start-dev
    failure: 'node ./report-failure.js --local-broken'

tasks

Tasks are fundamentally a set of bash scripts with a success or failure hook. If you provide a success option it will be called on a 0 exit code, the optional failure option is called on all non-zero exits. A task can be marked parallel if it can or should be run alongside others.

NOTE: if a script is provided, the success of the task is now determined by that file. If you have a failure script that exits with a 0 the rest of the tasks in the flow will be run.

name

The name of a step needs to be unique. This unique name can be used to validate steps further down with if keys.

script

This is any bash script. We will spin up an SH session and persist ALL env variables to it from the parent.

if (optional)

This block allows you to access the success/failure of previous steps to determine if a step should be run. This is useful if you want to be able to only clean a cache under certain conditions, or build just parts.

success (optional)

This script is invoked on a zero exit code. If it throws an error, it will fail the task. When invoked a map is available on process.vorta that will provide the task id of all running tasks.

failure (optional)

This script is invoked on a non-zero exit code. If it throws an error, it will fail the task. When invoked a map is available on process.vorta that will provide the task id of all running tasks.

parallel (optional)

If set to true, indicates that a task can run at the same time as others. We automatically group all parallel tasks via a Promise.all.

ignoreFailure (optional)

If set to true, the exit code will be stored in process.vorta, but the step will always be a success.

flows

Flows are arrays of tasks to run, checking the status of each step before running the next. If a flow contains a mix of sync and parallel tasks, they execute grouped by parallel. For example:

version: 1.0.0
tasks:
  build-files:
    script: 'yarn run build'
  start-docker:
    script: 'docker-compose -f ./dc/base.yml up -d'
    parallel: true
  start-dev:
    script: 'yarn run start'
    parallel: true
  build-deps:
    script: 'yarn run deps-build'

flows:
  local:
    tasks:
      - build-deps
      - build-files
      - start-docker
      - start-dev
    failure: 'node ./report-failure.js --local-broken'
    exit: 'node ./spindown-local.js'

This would execute build-deps, then build-files, then both start-docker and start-dev would be started at the same time, with output interleaved.

name

The name of a flow needs to be unique. This unique name can be used to validate flows further down with if keys.

tasks

This is an array of 'tasks' selected by their name. For a flow to exit 0 all tasks must pass.

success (optional)

This script is invoked on a zero exit code. If it throws an error, it will fail the flow. When invoked a map is available on process.vorta that will provide the task id of all running tasks.

failure (optional)

This script is invoked on a non-zero exit code. If it throws an error, it will fail the flow. When invoked a map is available on process.vorta that will provide the task id of all running tasks.

exit (optional)

This script is invoked on any exit signal sent by the parent process. Use it to send SIGINT and other signals to running child processes. When invoked a map is available on process.vorta that will provide the task id of all running tasks.

process.vorta

This is a helper we provide to enable complex scripting. Let's explain by complex example!

version: 1.0.0
tasks:
  build-files:
    script: 'yarn run build'
  start-docker:
    script: 'docker-compose -f ./dc/base.yml up -d'
    parallel: true
  start-dev:
    script: 'yarn run start'
    parallel: true
  build-deps:
    script: 'yarn run deps-build'

flows:
  local:
    tasks:
      - build-deps
      - build-files
      - start-docker
      - start-dev
    failure: 'node ./report-failure.js --local-broken'
    exit: 'node ./spindown-local.js'

When the exit script from the local flow is called there will be this available:

const vortaProcesses = process.vorta;
console.log(JSON.stringify(vortaProcesses, null, 2))

Resulting in:

{
  'build-files': {
    taskId: 1,
    success: true,
    failure: false,
    exitCode: 0,
    stdio: [object Object]
  },
  'start-docker': {
    taskId: 2,
    success: true,
    failure: false,
    exitCode: 0,
    stdio: [object Object]
  },
  'start-dev': {
    taskId: 3,
    success: true,
    failure: false,
    exitCode: 0,
    stdio: [object Object]
  },
  'build-deps': {
    taskId: 4,
    success: true,
    failure: false,
    exitCode: 0,
    stdio: [object Object]
  },
}

taskId

This is the process id. You can use it to forward signals.

success/failure

Wether or not a step worked.

exitCode

The exit code of each step.

stdio

This is a collection of the streams we have open to the different sh shells. You can use this to read or send information!

TODO: Build the features lmao!