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

pipelinepulse

v1.0.4

Published

CI/CD orchestration tool with metric-driven canary deployments and self-healing capabilities

Readme

PipelinePulse

A lightweight yet powerful CI/CD orchestration tool with progressive rollouts, metric-based deployments, and self-healing capabilities.

Why PipelinePulse?

PipelinePulse integrates canary deployments and auto-rollbacks into your existing CI/CD pipeline without requiring a complete overhaul.

System Architecture

graph TD
    CI[Your CI System] -->|Triggers| PP[PipelinePulse]
    PP -->|Build/Test Commands| CI
    PP -->|Deploy Commands| INFRA[Infrastructure<br/>K8s/Cloud/etc]
    PP -->|Records State| DB[(Deployment<br/>History DB)]
    PP -->|Reads Metrics| METRICS[Metrics Source]
    METRICS -->|Feedback| PP
    PP -->|Auto-Rollback| INFRA

Getting Started

  • Install the package: npm install pipelinepulse
  • Create a configuration file (see Quick Start below)
  • Run your pipeline with npx pipelinepulse start pipeline.yaml
  • For programmatic usage, see the examples below

Features

Core Orchestration with Resilience

  • Exponential backoff retry logic for command execution
  • Concurrent execution of pipeline stages with configurable parallelism
  • Timeout capability to prevent hung deployments
  • Recovery from network failures and transient errors

Metric-Driven Deployments

  • Progressive traffic percentage rollouts
  • Metric evaluation with automated rollback thresholds
  • Health checks during deployment

Self-Healing Auto-Rollback

  • Automatic rollback when metrics exceed thresholds
  • Configurable error thresholds with baseline comparison
  • Immediate response to quality degradation without human intervention

State Persistence

  • SQLite-based state persistence for deployment history
  • Automatic recovery from crashes
  • Comprehensive tracking of pipeline and stage execution

Observability

  • Structured logging with component tagging
  • Metrics for deployment success/failure rates and durations
  • Lead time tracking for deployments

Security

  • Injection Prevention: Validates commands to prevent security risks
  • Config Validation: Blocks patterns like curl | bash via pattern matching
  • YAML Validation: Checks against MITRE ATT&CK patterns

Installation

npm install pipelinepulse

Quick Start

Create a configuration file pipeline.yaml:

pipeline:
  name: simple-deployment
  maxConcurrency: 2
  maxRetries: 3
  stages:
    - name: build
      command: npm run build
    - name: test
      command: npm test
    - name: deploy
      command: npm run deploy

canary:
  enabled: true
  initialPercentage: 20
  samplingPeriod: 30
  errorThresholdPercentage: 5
  metrics:
    - error-rate
    - response-time
  metricsCommands:
    error-rate: node scripts/get-error-rate.js
    response-time: node scripts/get-response-time.js
  deployCommands:
    initial: node scripts/deploy-initial.js --percentage=20
    update: node scripts/deploy-update.js
    final: node scripts/deploy-final.js
  rollbackCommands:
    execute: node scripts/rollback.js

Run your pipeline:

npx pipelinepulse start pipeline.yaml

Usage Examples

Programmatic Usage

const PipelinePulse = require('pipelinepulse');

async function deployApp() {
  const pulse = new PipelinePulse({
    configPath: './pipeline.yaml',
    dbPath: './deployment-history.db'
  });
  
  await pulse.initialize();
  
  const pipeline = await pulse.createPipeline({
    name: 'production-deploy',
    maxConcurrency: 2
  });
  
  pipeline.addStage({ name: 'build', command: 'npm run build' });
  pipeline.addStage({ name: 'test', command: 'npm test' });
  pipeline.addStage({ name: 'deploy', command: 'npm run deploy' });
  
  const result = await pipeline.execute();
  
  if (result.success) {
    console.log(`Deployment completed in ${result.duration / 1000} seconds`);
  } else {
    console.error(`Deployment failed at stage: ${result.failedStage}`);
  }
  
  await pulse.stop();
}

deployApp().catch(console.error);

Canary Deployment Example

const canary = await pulse.createCanaryDeployment({
  initialPercentage: 10,
  samplingPeriod: 30,
  errorThreshold: 5
});

const result = await canary.deploy({
  service: 'payment-service',
  newVersion: '2.1.0',
  deployCommands: {
    initial: 'node scripts/deploy.js --version=2.1.0 --percentage=10',
    update: 'node scripts/increase-traffic.js --percentage=50',
    final: 'node scripts/increase-traffic.js --percentage=100'
  },
  rollbackCommands: {
    execute: 'node scripts/rollback.js'
  },
  metricsCommands: {
    'error-rate': 'node scripts/get-error-rate.js',
    'response-time': 'node scripts/get-response-time.js'
  }
});

console.log(`Canary deployment ${result.success ? 'succeeded' : 'failed'}`);

CLI Commands

pipelinepulse <command> [options]

Commands:

  • start <config-path> → Start the PipelinePulse server
  • deploy <config-path> <name> → Execute a pipeline from config
  • status <pipeline-id> [port] → Check pipeline status
  • help → Show help

API Reference

PipelinePulse Class

const pulse = new PipelinePulse(options);
await pulse.initialize();
const pipeline = await pulse.createPipeline(config);
const canary = await pulse.createCanaryDeployment(config);
await pulse.stop();

Pipeline Class

pipeline.addStage({ name, command, args, timeout });
const result = await pipeline.execute();

CanaryDeployment Class

const result = await canary.deploy({
  pipelineId,
  service,
  newVersion,
  deployCommands,
  rollbackCommands,
  metricsCommands
});

Chaos Engineering & Resilience Testing

PipelinePulse is built with resilience in mind and has been tested against various failure scenarios:

  • Network Outages: Recovers automatically from temporary network failures during metric collection or command execution
  • Process Termination: Maintains state even when abruptly terminated, allowing recovery on restart
  • Resource Contention: Handles high concurrency with configurable limits to prevent resource exhaustion
  • Metric Anomalies: Properly distinguishes between normal variation and severe issues