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

opencode-ext

v0.0.1

Published

OpenCode extensions for loading environment variables and restricting long-running bash commands.

Readme

opencode-ext

OpenCode extensions for loading environment variables and restricting long-running bash commands.

Usage

Add the package to your OpenCode config (opencode.json):

{
  "plugin": ["opencode-ext"]
}

The package exports OpenCodeExtEnv and OpenCodeExtArmor. OpenCode loads both extensions from the package.

Configuration

Create a configuration file in any of these locations:

  1. ~/.opencode-ext.json - global
  2. ./.opencode-ext.json - project root
  3. ./.opencode/ext.json - OpenCode project configuration

Higher-precedence scalar values override lower-precedence values. Arrays and objects use the feature-specific merge behavior described below.

{
  "$schema": "https://github.com/NazmusSayad/opencode-ext/raw/refs/heads/schema/schema.json",
  "env": {
    "files": [".env", ".env.local"],
    "define": {
      "NODE_ENV": "development",
      "MY_VAR": "value"
    },
    "disableGlobal": false,
    "disableCwdEnv": false,
    "disableDirenv": false,
    "disableCwdDirenv": false
  },
  "armor": {
    "priority": "whitelist",
    "message": "Blocked: `{{COMMAND}}` (matched `{{PATTERN}}`)",
    "blacklist": {
      "commands": ["custom-pattern"],
      "disableDefaults": false,
      "disableGlobal": false
    },
    "whitelist": {
      "commands": ["vitest"],
      "disableDefaults": false,
      "disableGlobal": false
    },
    "command": {
      "before": { "command": "set -e", "comment": "Fail fast" },
      "after": { "command": "echo done", "comment": "Notify" }
    }
  }
}

Environment Variables

env.files lists .env files to load. Relative paths are resolved from the project or shell working directory, and paths beginning with ~/ are resolved from the home directory. Files are loaded in configured order, with later files overriding earlier files.

env.define adds inline variables. Project settings override global settings, and .opencode/ext.json settings override project settings.

env.disableGlobal excludes only the global files and define values. env.disableCwdEnv prevents loading configured files from a different shell working directory. env.disableDirenv disables direnv entirely, while env.disableCwdDirenv disables direnv only for a different shell working directory.

Direnv is enabled by default and requires the direnv executable to be installed. No .env files are loaded unless env.files is configured.

Command Armor

armor.priority accepts whitelist or blacklist and defaults to whitelist. The blacklist blocks matching bash command prefixes, while the whitelist provides allowed exceptions according to the selected priority.

armor.blacklist.commands and armor.whitelist.commands add patterns. disableDefaults excludes that list's built-in patterns, and disableGlobal excludes that list's global patterns.

armor.message customizes the blocked-command error and supports the {{COMMAND}} and {{PATTERN}} placeholders.

armor.command.before and armor.command.after inject commands before or after allowed bash commands. Each accepts command and an optional comment.

CLI

Update explicitly named plugins in OpenCode's package cache:

opencode-ext update-plugin plugin-one plugin-two

Omit plugin names to update every plugin discovered in ~/.cache/opencode/packages/.

Debugging

Set OPENCODE_EXT_ENV_LOG_ENABLED=true to enable environment extension logs. They are written to os.tmpdir()/.opencode-ext-env-logs/ by default. Set OPENCODE_EXT_ENV_LOG_PATH to use another directory.

Environment logs contain resolved variable names and values, including secrets. Enable them only when needed and protect or remove the resulting files.

Set OPENCODE_EXT_ARMOR_ENABLE_LOG=true to write Armor logs to os.tmpdir()/.opencode-ext-armor-logs/.