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

vite-plugin-botpress-actions

v0.2.0

Published

Vite plugin for building Botpress-compatible actions from TypeScript

Downloads

6

Readme

vite-plugin-botpress-actions

A Vite plugin that transforms modular TypeScript/JavaScript code into self-contained Botpress actions for deployment in Botpress Studio's Execute Card environment.

Features

  • 🔍 Auto-discovery - Automatically finds and processes all actions in src/actions/
  • 📝 Schema extraction - Generates separate schema files for Botpress registration
  • 🔄 Code transformation - Inlines dependencies and extracts function bodies
  • 📦 TypeScript & JavaScript - Supports both .ts and .js files
  • 🎯 Deno-compatible - Outputs code ready for Botpress's Deno runtime

Installation

npm install --save-dev vite-plugin-botpress-actions
# or
pnpm add -D vite-plugin-botpress-actions

Usage

Add the plugin to your vite.config.js or vite.config.ts:

import { defineConfig } from 'vite';
import { botpressActionsPlugin } from 'vite-plugin-botpress-actions';

export default defineConfig({
  plugins: [
    botpressActionsPlugin({
      // Optional configuration
      actionsDir: 'src/actions',    // default
      schemasDir: 'src/schemas',    // default
      sharedDir: 'src/shared',      // default
      outputDir: 'dist',             // default
      extensions: ['ts', 'js']      // default
    })
  ]
});

How It Works

The plugin performs a three-pass build process:

  1. Analyzes all actions to map schema usage
  2. Generates individual schema files in dist/schemas/
  3. Transforms action code into self-contained function bodies in dist/actions/

Input Structure

src/
├── actions/
│   ├── myAction.ts       # Action implementations
│   └── anotherAction.js
├── schemas/
│   └── shared/           # Reusable schemas
│       └── common.ts
└── shared/               # Utility functions
    └── helpers.ts

Output Structure

dist/
├── actions/
│   ├── myAction.ts       # Function body only (paste into Execute Card)
│   └── anotherAction.js
└── schemas/
    ├── myActionInputSchema.ts    # Action-specific schemas
    └── shared/
        └── common.ts             # Shared schemas

Action Format

Actions must follow this structure:

// src/actions/myAction.ts
import { z } from '@bpinternal/zui';
import { helperFunction } from '../shared/helpers.ts';

// Define schemas
const inputSchema = z.object({
  name: z.string()
});

const outputSchema = z.object({
  message: z.string()
});

// Export async function (name doesn't matter)
export async function myAction(input: z.infer<typeof inputSchema>) {
  const result = helperFunction(input.name);
  return { message: result };
}

Configuration Options

| Option | Type | Default | Description | |--------|------|---------|-------------| | actionsDir | string | 'src/actions' | Directory containing action files | | schemasDir | string | 'src/schemas' | Directory containing schema files | | sharedDir | string | 'src/shared' | Directory containing shared utilities | | outputDir | string | 'dist' | Output directory for built files | | extensions | string[] | ['ts', 'js'] | File extensions to process | | inlinePackages | object | { nanoid: '...' } | External packages to inline |

Botpress Runtime

Actions run in a secure, sandboxed Deno environment with these pre-installed libraries:

  • axios - HTTP client
  • _ (Lodash) - Utility library
  • luxon - Date/time manipulation
  • z/zui - Zod validation (@bpinternal/zui)
  • client - Botpress Client (when enabled in bot settings)
  • zai - Botpress AI utilities (@botpress/zai)

Don't import these in your actions - they're globally available.

License

MIT