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

lumina-lang

v0.5.8

Published

A modern functional language with async/await, type inference, and package management

Readme

Lumina

CI npm License

Most languages make you choose: safety or the web. Lumina doesn't.

Lumina is a statically typed, web-native language with HM type inference, algebraic types, and trait-based polymorphism, compiled to JavaScript and WebAssembly. It ships first-class js, wasm-web, and wasm-standalone target profiles so you can keep browser and platform glue on JS while pushing shared systems code to WASM.

The docs are the main learning surface. The playground is the lab: a single-source editor with curated examples, JS/WASM output, runtime execution, UI Preview, inferred Types, and polished diagnostics.

At a Glance

trait Summary {
  fn label(self: Self) -> string
}

enum LoadState {
  Idle,
  Ready(Vec<int>),
  Failed(string)
}

impl Summary for LoadState {
  fn label(self: Self) -> string {
    return match self {
      Idle => "Loading...",
      Ready(_) => "Ready",
      Failed(message) => message
    };
  }
}

Install

npm install -g lumina-lang

Quick Start

Create hello.lm:

fn main() -> void {
  print("Hello, Lumina!")
}

Run the basic workflow:

lumina check hello.lm
lumina compile hello.lm --target js --module cjs --out hello.cjs
node hello.cjs

Start the REPL:

lumina repl

Live Web Apps

Product Structure

  • demo/ serves the Lumina-native marketing/site shell
  • docs-content/ is the markdown source tree for the docs portal
  • docs-site/ is the on-site documentation app backed by generated markdown data
  • playground/ is the focused single-source playground app
  • docs/ is the generated GitHub Pages output and should be rebuilt, not edited by hand
  • src/ contains the compiler, runtime, LSP, and stdlib implementation

Why Lumina?

  • Lumina aims at the space between TypeScript ergonomics and Rust-style modeling.
  • It keeps one language across browser UI, JS interop, and WASM workloads.
  • It is a better fit than plain TypeScript when you want enums, pattern matching, traits, and stronger guarantees to survive all the way to the browser.

Read: Why Lumina?

Choosing a Target

  • Use js when you want the fastest edit-run-debug loop, deep browser/Node interop, or an app shell that talks directly to browser and Node APIs.
  • Use wasm-web when you want shared-core parity with JS, tighter runtime behavior, or worker-isolated browser execution for compute-heavy paths.
  • Use wasm-standalone when you want the strict portable profile for import-light kernels, embedders, or WASI-style environments.

Read: When to use JS vs WASM

What You Get

  • lumina CLI for check, compile, run, grammar, bundle, and REPL workflows
  • lumina repl with multiline input, history, and persistent declarations
  • js, wasm-web, and wasm-standalone targets
  • Direct .wasm emission with optional --emit-wat debug output
  • Reactive UI runtime, browser preview examples, and DOM-aware guidance in the playground
  • Playground Types tab for HM declaration and expression inference
  • JS and WASM tabs with highlighted generated output, WAT, binary metrics, copy, and download actions
  • Diagnostics tab with click-to-jump rows and educational explain content
  • Embed-ready playground links for docs, tutorials, and blog posts
  • lumina-lsp plus a VS Code extension

Docs

Development

npm install
npm run build
npm run lint:check
npm test

Requires Node.js >=22.17.0.

Full local verification mirrors CI:

npm run typecheck
npm run lint:check
npm run build
npm run build:verify
npm run web:build
npm run test:browser:smoke
npm test

Web Development

Run the three web apps together:

npm run web:dev

Ports:

  • 127.0.0.1:5173/ - main site
  • 127.0.0.1:5173/docs/ - docs app through the main dev entrypoint
  • 127.0.0.1:5173/playground/ - playground app through the main dev entrypoint
  • 127.0.0.1:5174/docs/ - docs app directly
  • 127.0.0.1:5175/playground/ - playground app directly

Build the full publish tree:

npm run web:build

Important notes:

  • Edit markdown docs in docs-content/, not docs/
  • Edit the docs shell in docs-site/
  • Edit the playground shell in playground/
  • docs/ is the generated GitHub Pages output

Project Files

License

Licensed under either of:

  • MIT (LICENSE)
  • Apache-2.0 (LICENSE-APACHE)

at your option.