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

@tishlang/lattish

v4.0.0

Published

Lattish runtime — hooks + DOM for Tish JSX

Readme

Lattish

Lattish runtime for Tish JSX — hooks + DOM helpers for Tish apps.

Install

npm install lattish
# or
npm install @tishlang/lattish

Requires Tish 2.12+ for per-module ESM + Vite HMR (@tishlang/vite-plugin-tish).

Usage

import { useState, createRoot, h, Fragment } from 'lattish'

fn App() {
  let [count, setCount] = useState(0)
  return <div>
    <p>{"Count: " + String(count)}</p>
    <button onclick={() => setCount(count + 1)}>Increment</button>
  </div>
}

createRoot(document.getElementById("root")).render(App)

With tish 2.12+ and --format esm / compile-module, JSX modules get h / Fragment auto-imported from lattish when missing — you do not need to import them by hand.

Automatic JSX runtime (jsx / jsxs)

For compilers that emit the modern automatic-runtime shape (tishlang/tish#291):

import { jsx, jsxs, Fragment } from 'lattish/jsx-runtime'
// dev: import from 'lattish/jsx-dev-runtime'

These wrap the same h / Fragment implementation as the classic factory entry. Set tish's jsxImportSource to lattish and the compiler emits import { jsx, jsxs, Fragment } from "lattish/jsx-runtime" automatically.

Vite HMR (@tishlang/vite-plugin-tish)

Optional — not part of the main lattish entry. Import lattish/hmr-runtime only in Vite dev (or your dev bootstrap):

import {
  installLattishViteHmrDispatcher,
  exposeLattishHmrGlobals,
  registerLattishHmrRemount,
  saveLattishHmrMountArgs,
  getLattishHmrMountArgs,
} from 'lattish/hmr-runtime'

Vite accept snippet (JS only — .tish cannot reference import.meta):

import { viteHmrAcceptSnippet, VITE_PLUGIN_BARE_ACCEPT_RE } from 'lattish/hmr'

Mount modules register remount handlers and persist mount args so hook state survives module re-evaluation:

const MODULE_ID = "src/MyComponent.tish"

saveLattishHmrMountArgs(MODULE_ID, { host })
createRoot(host).render(App)

registerLattishHmrRemount(MODULE_ID, () => {
  let args = getLattishHmrMountArgs(MODULE_ID)
  if (args) mountAgain(args.host)
})

createRoot().render() on an already-mounted root patches in place and preserves hook state.

| Entry | When to import | |-------|----------------| | lattish | Always — core runtime only | | lattish/hmr-runtime | Vite dev bootstrap only | | lattish/hmr | Vite plugin / config only (JS) |

Exports

| Entry | Exports | |-------|---------| | lattish | h, Fragment, createRoot, hooks, refreshAllRoots | | lattish/hmr-runtime | Vite HMR remount registry (optional) | | lattish/jsx-runtime | jsx, jsxs, jsxDEV, Fragment | | lattish/jsx-dev-runtime | same as jsx-runtime (dev entry) | | lattish/hmr | viteHmrAcceptSnippet, VITE_PLUGIN_BARE_ACCEPT_RE (Vite plugin JS) |

Examples

  • Tishexamples/features/ (requires tish compiler)
  • JS/TSexamples/js-workflow/ (no tish; imports compiled lattish)

Links