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

kovo-ux

v0.1.0

Published

Compile React-style TSX into native Xiaomi Vela QuickApp .ux files — zero runtime overhead

Readme

⌚ Kovo

Write Xiaomi Vela smartwatch apps with React-style TSX, Hooks & modern tooling.

Kovo is a compile-time engine that transforms standard React functional components (useState, useRef, custom hooks) into native Xiaomi Vela QuickApp .ux files — with zero runtime overhead.


⚡ Quick Start

Scaffold a new project instantly:

npx create-kovo-ux
      ⌚  create-kovo-ux v0.1.0

  ◆  What is your project name?
  │  my-watch-app
  │
  ◆  Which template would you like to use?
  │  ● Basic — Single page, counter, minimal setup
  │  ○ Multi-Page — Dashboard with navigation, components & settings
  │  ○ Fetch — Multi-page + HTTP networking (GET, POST, PUT, DELETE)
  │
  ◆  Install dependencies?
  │  Yes
  │
  ■  Done! Your Kovo project is ready. ⌚

Then launch the live smartwatch emulator:

cd my-watch-app
bun run dev:emulator

✨ Features

  • ⚛️ React-style TSX — Write functional components with useState, useRef, and custom hooks
  • 🔄 Zero-runtime overhead — All hooks are inlined at compile time into native QuickApp VM objects
  • 🎨 OLED-optimized design — 466x466 dark mode UI with vibrant neon accents out of the box
  • 📡 Network integration@system.fetch support with GET/POST/PUT/DELETE
  • 🧪 168+ automated tests — Comprehensive compiler test suite
  • Zero-config emulator — Auto-detects, patches, and launches Vela Virtual Devices
  • 📱 QR deploy to real watches — Push apps to physical Xiaomi smartwatches via Bluetooth

📦 Templates

| Template | Description | | :--- | :--- | | Basic | Single page counter with useState and haptic feedback | | Multi-Page | Dashboard, settings, demo pages, StatCard component, router navigation | | Fetch | Everything in Multi-Page + HTTP networking page (GET, POST, PUT, DELETE) |


🛠️ Commands

bun run dev:emulator     # Launch live hot-reloading emulator
bun run build            # Transpile TSX → .ux files
bun run aiot:build       # Build signed .rpk binary
bun test                 # Run 168+ compiler tests

📖 Write Your First Page

import { useState } from 'kovo-ux';
import vibrator from '@system.vibrator';

export const style = `
  .page {
    width: 466px; height: 466px;
    background-color: #06080c;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .title { font-size: 22px; color: #38bdf8; font-weight: bold; }
  .btn { width: 200px; height: 48px; border-radius: 24px;
    background-color: #052e16; border-color: #16a34a;
    color: #4ade80; font-size: 15px; font-weight: bold; }
`;

export default function MyPage() {
  const [count, setCount] = useState(0);

  function increment() {
    setCount(count + 1);
    vibrator.vibrate({ mode: 'short' });
  }

  return (
    <div className="page">
      <text className="title">Count: {count}</text>
      <input className="btn" type="button" value="⚡ +1" onClick={increment} />
    </div>
  );
}

This compiles to a native .ux file with data: { count: 0 } and top-level methods — zero runtime overhead!


📚 Documentation

See the full documentation in docs/:


⌚ Supported Devices

| Device | Network | QuickApp | | :--- | :--- | :--- | | Xiaomi Watch S4 / S5 | ✅ | ✅ | | REDMI Watch 5 / 6 | ✅ | ✅ | | Xiaomi Watch S3 | ✅ | ✅ | | Xiaomi S1 Pro | ✅ | ✅ | | Redmi Watch 4 | ❌ | ✅ | | Xiaomi Band 8-10 | ❌ | ⚠️ |


📄 License

MIT