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

opencami

v1.9.1

Published

OpenCami - A beautiful web client for OpenClaw

Readme

OpenCami 🦎

A beautiful web client for OpenClaw.

npm License: MIT

OpenCami Chat Interface

Install

Option 1 (recommended)

curl -fsSL https://opencami.xyz/install.sh | bash

Option 2

npm install -g opencami

Run

✅ Recommended (OpenCami runs on the same machine as the OpenClaw Gateway)

opencami --gateway ws://127.0.0.1:18789 --token <GATEWAY_TOKEN>

Then open: http://localhost:3000

🌐 Remote access over Tailscale (keep Gateway local)

This is the safest setup: Gateway stays on loopback, you access OpenCami via https://<magicdns>:<port>.

  1. In OpenClaw, allowlist the exact OpenCami URL (no trailing slash):
{
  "gateway": {
    "controlUI": {
      "allowedOrigins": ["https://<magicdns>:3001"]
    }
  }
}
  1. Restart the gateway:
openclaw gateway restart
  1. Start OpenCami with the same origin:
opencami \
  --gateway ws://127.0.0.1:18789 \
  --token <GATEWAY_TOKEN> \
  --origin https://<magicdns>:3001

⚠️ Note: --gateway must be ws:// or wss:// (not https://).

CLI options

opencami [--port <n>] [--host <addr>] [--gateway <ws(s)://...>] [--token <token>] [--password <pw>] [--origin <url>] [--no-open]

--port <n>        Port to listen on (default: 3000)
--host <addr>     Host to bind to (default: 127.0.0.1)
--gateway <url>   OpenClaw gateway WS URL (default: ws://127.0.0.1:18789)
--token <token>   Gateway token (sets CLAWDBOT_GATEWAY_TOKEN)
--password <pw>   Gateway password (sets CLAWDBOT_GATEWAY_PASSWORD)
--origin <url>    Origin header for backend WS (sets OPENCAMI_ORIGIN)
--no-open         Don't open browser on start
-h, --help        Show help

Configuration

You can also set env vars instead of flags:

CLAWDBOT_GATEWAY_URL=ws://127.0.0.1:18789
CLAWDBOT_GATEWAY_TOKEN=...
OPENCAMI_ORIGIN=https://<magicdns>:3001   # only needed for remote HTTPS

Troubleshooting (quick)

  • "origin not allowed" → add the exact URL to gateway.controlUI.allowedOrigins and pass the same value as --origin / OPENCAMI_ORIGIN (exact match, no trailing /).
  • Pairing required → approve the device in OpenClaw (openclaw devices list/approve).
  • Fallback (only if needed): OPENCAMI_DEVICE_AUTH_FALLBACK=1

Security notes

  • Prefer wss:// for remote connections.
  • Prefer token auth (CLAWDBOT_GATEWAY_TOKEN) over password.
  • Keep allowedOrigins minimal (exact origins only, no wildcards).
  • Treat OPENCAMI_DEVICE_AUTH_FALLBACK=true as temporary compatibility mode.
  • Do not expose OpenCami directly to the public internet without TLS + access controls.
  • For Tailnet deployments, limit Tailnet device/user access.

Troubleshooting

"origin not allowed"

Cause: gateway rejected browser origin.

Fix:

  1. Add origin to gateway.controlUI.allowedOrigins (exact match, no trailing /)
  2. Set identical OPENCAMI_ORIGIN (or --origin) in OpenCami
  3. Restart gateway (openclaw gateway restart)

Missing scope operator.admin

Cause: gateway auth succeeded but the device was paired with insufficient scopes.

Fix (v1.8.5+): delete the device identity and let OpenCami re-pair automatically:

rm ~/.opencami/identity/device.json
# then restart OpenCami — it will re-pair with full scopes

Pairing required / device pending approval

On first connect, OpenCami registers itself as a device on the gateway. Starting with v1.8.5, this happens automatically with full scopes (operator.admin, operator.approvals, operator.pairing) — no manual config required.

If you see a "device pending" error:

openclaw devices list    # find the pending device
openclaw devices approve <deviceId>

After approval, OpenCami reconnects and stores a deviceToken for future sessions (no shared token needed).

Can’t connect to gateway at all

Checks:

openclaw gateway status
echo "$CLAWDBOT_GATEWAY_URL"
echo "$CLAWDBOT_GATEWAY_TOKEN"

Also verify URL scheme (ws:// local, wss:// remote).


Docker

docker build -t opencami .
docker run -p 3000:3000 opencami

Features

💬 Chat & Communication

  • Real-time streaming — persistent WebSocket + SSE, token-by-token
  • 📎 File attachments — upload PDFs, text, code, CSV, JSON via attach button or drag & drop (/uploads/ + read tool workflow)
  • 📄 File cards — uploaded files render as clickable cards (filename, icon, size) and open in File Explorer
  • 🖼️ Image attachments — drag & drop with compression (images stay Base64 for vision)
  • 🔊 Voice playback (TTS) — ElevenLabs → OpenAI → Edge TTS fallback
  • 🎤 Voice input (STT) — ElevenLabs Scribe → OpenAI Whisper → Browser
  • 🔔 Browser notifications — background tab alerts when assistant replies

🧠 Smart Features

  • 🏷️ Smart titles — LLM-generated session titles
  • 💡 Smart follow-ups — contextual suggestions after each response
  • 🧠 Thinking level toggle — reasoning depth (off/low/medium/high) per message
  • 🔎 Search sources badge — see which search engines were used
  • 📊 Context window meter — visual token usage indicator

🔧 Workspace

  • 📂 File explorer — browse & edit 30+ file types with built-in editor
  • 🧠 Memory viewer — browse and edit MEMORY.md and daily memory files
  • 🤖 Agent manager — create, edit, delete agents from the sidebar
  • 🧩 Skills browser — discover and install skills from ClawHub
  • Cron jobs panel — manage scheduled automations
  • 🔧 Workspace settings — toggle each tool on/off in Settings

🎨 Customization

  • 🎭 Persona picker — 20 AI personalities
  • 🦎 Chameleon theme — light/dark/system with accent colors
  • 🔤 Text size — S / M / L / XL
  • 🔌 Multi-provider LLM — OpenAI, OpenRouter, Ollama, or custom

📁 Organization

  • 📁 Session folders — grouped by kind (chats, subagents, cron, other)
  • 📌 Pin sessions — pinned always on top
  • 🗑️ Bulk delete — select multiple sessions, delete at once
  • 🛡️ Protected sessions — prevent accidental deletion
  • 📥 Export — Markdown, JSON, or plain text

📱 Platform

  • 📱 PWA — installable, offline shell, auto-update
  • 🖥️ Tauri desktop app (Beta) — native wrapper for macOS/Windows/Linux
  • ⌨️ Keyboard shortcuts — full power-user navigation
  • 💬 Slash commands — inline help and actions
  • 🔍 Conversation search — current (⌘F) and global (⌘⇧F)

Development

git clone https://github.com/robbyczgw-cla/opencami.git
cd opencami
npm install
cp .env.example .env.local
npm run dev

Then open the URL printed by Vite in your terminal.

Dev port notes: this repo's npm run dev script uses port 3002. If you run Vite directly with the config default, it targets 3003 and auto-falls back to the next free port.

🖥️ Desktop App (Tauri)

Note: The desktop app is experimental and under active development. The primary focus of OpenCami is the web app. Native builds (desktop & mobile) are secondary.

OpenCami can also run as a native macOS/Windows/Linux desktop wrapper built with Tauri v2. The app loads your self-hosted OpenCami web instance.

Prerequisites

  • Node.js 18+
  • Rust toolchain (rustup)

Build

# Install dependencies (if not already done)
npm install

# Build web assets first
npm run build

# Build desktop app
npm run tauri:build

Custom Gateway URL

By default, the desktop app connects to http://localhost:3003.

To override at build time:

OPENCAMI_REMOTE_URL="https://your-server.example.com" npm run tauri:build

Output

Built installers/bundles are written to src-tauri/target/release/bundle/:

  • macOS: .app, .dmg
  • Windows: .exe, .msi
  • Linux: .deb, .AppImage

Desktop Features

  • Tray icon (hide to tray on close)
  • Native notifications
  • Auto-start on login
  • Custom titlebar
  • Multiple windows (⌘N)
  • Clipboard integration

Dev Mode

npm run tauri:dev

Requires a display/GUI environment.

Documentation

Credits

Built on top of WebClaw by @ibelick.

Contributors

Powered by OpenClaw.

Links

License

MIT