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

@juicesharp/rpiv-i18n

v2.1.0

Published

Pi extension. The localization foundation for rpiv-* skills: locale detection, the /languages command, the --locale flag, and a cross-package locale registry.

Downloads

3,483

Readme

@juicesharp/rpiv-i18n

npm version License: MIT

Pick the language every rpiv-* extension speaks in your Pi Agent terminal. It adds a /languages picker and a --locale flag, and remembers your choice between sessions. It is also the SDK any Pi extension author calls to make their own TUI strings translatable — three lines, with English fallback per key.

Install

pi install npm:@juicesharp/rpiv-i18n

Restart your Pi session.

Quick start

Run the picker and choose a language:

/languages

Arrow keys move, Enter selects, Esc cancels. A marks your current choice, and a System default row hands control back to your environment. The moment you select, every installed extension that uses the SDK renders in the new language — no restart.

To set it for one launch instead, pass the flag:

pi --locale uk

| Code | Language | | --- | --- | | de | Deutsch | | en | English | | es | Español | | fr | Français | | pt | Português | | pt-BR | Português (Brasil) | | ru | Русский | | uk | Українська | | zh | 中文 |

To localize your own extension, add @juicesharp/rpiv-i18n to your peerDependencies (marked optional), then at extension load:

import { scope } from "@juicesharp/rpiv-i18n";
import { registerLocalesFromDir } from "@juicesharp/rpiv-i18n/loader";

registerLocalesFromDir("@my-org/cool-tool", import.meta.url);
export const t = scope("@my-org/cool-tool");
// then t("welcome.title", "Welcome") at every render site

Wrap both imports in the dynamic-import shim from the integration guide below to stay online in English when the SDK is absent.

What you get

  • One dial for every extension/languages writes a single preference and rebuilds the strings of every registered package at once, not one setting per tool.
  • Nine languages, no file editing — every locale in the table above ships with the extension; nothing to download, compile, or configure.
  • A localized UI with zero setup on most Unix systemsLANG and LC_ALL are read at startup, so uk_UA.UTF-8 gives you Ukrainian chrome before you touch anything.
  • Your selection cannot silently revert — the picker writes to disk before applying in memory; if the write fails you get Failed to save locale preference — selection not persisted and the old locale stays put.
  • Localize your own extension in one callregisterLocalesFromDir reads your package's locales/*.json; scope(ns) gives you t(key, fallback).
  • A broken translation never takes an extension down — an unparseable locale file warns and is skipped, a missing key falls back to English, and a key missing everywhere returns the inline English literal you passed at the call site.
  • Only the TUI is translated — system prompts, tool descriptions, and other LLM-facing copy stay English on purpose, so model behavior does not change with your locale.

Configuration

Your choice is stored at $XDG_CONFIG_HOME/rpiv-i18n/locale.json, defaulting to ~/.config/rpiv-i18n/locale.json. The file is created with mode 0600 and holds exactly one key:

| Key | What it does | Default | | --- | --- | --- | | locale | UI locale code, e.g. "uk". Omitted from the file entirely when you pick System default. | absent — falls through to environment detection, then English |

{ "locale": "uk" }

Surfaces and environment inputs:

| Surface | Effect | | --- | --- | | /languages | Opens the picker. Requires an interactive session; otherwise it reports /languages requires interactive mode. | | --locale <code> | Sets the locale for that session, ahead of the config file. | | LANG, LC_ALL | Used when no locale is configured. The language segment is taken from <lang>_<REGION>.<charset>; C and POSIX are ignored. | | XDG_CONFIG_HOME | Relocates the config directory. Must be an absolute path or ~-prefixed, per the XDG spec. |

Resolution order: --locale → config file → LANGLC_ALL → English.

Reference

  • SDK reference — every export from @juicesharp/rpiv-i18n and /loader, the fallback contract, the detection chain, and the globalThis escape hatch.
  • Integration guide — step-by-step guide to localizing your own Pi extension, from optional peer dependency to a live smoke test.
  • Contributing translations — what to translate, key naming, file shape, PR checklist.

Requirements

An interactive terminal is needed for /languages; the flag, the config file, and environment detection all work without one. No API keys, no network access, no native dependencies. The 0600 permission bit and LANG/LC_ALL detection are Unix conventions and are not exercised on Windows.

Related

License

MIT — see LICENSE.