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

alap

v3.0.0

Published

Dynamic menus for links — one click, multiple destinations

Readme

Alap

Version 3, Daniel Smith - April 2026

Turn any link into a curated menu of destinations.

A traditional link is a demand — one URL, chosen by the author. An Alap link is an invitation — a set of options, chosen by the reader.

Instead of cluttering your writing with many separate links:

"You can visit the Brooklyn Bridge, the Manhattan Bridge, the High Line, or this park, or this other place."

You can write naturally:

"There are several great landmarks within walking distance."

When the reader clicks "landmarks," they get a menu. Your sentence stays clean. The reader chooses what matters to them.

Get Started

| You are... | Start here | |------------|-----------| | A developer building with Alap | START-Dev.md — install, framework setup, configuration, storage | | A writer, editor, or designer using Alap | START-Creators.md — concepts, expression language, editors, cookbooks |

The Expression Language

Tags, macros, and operators compose into a query language for your link library:

.nyc                        all items tagged "nyc"
.nyc + .bridge              AND — items with both tags
.nyc | .sf                  OR — items with either tag
.nyc - .tourist             WITHOUT — subtract matches
(.nyc + .bridge) | .sf      parentheses for grouping
@favorites                  expand a saved macro
golden, brooklyn            specific items by ID

Protocols gather data dynamically. Refiners filter and order the results:

:time:30d:                  items added in the last 30 days
:loc:40.7,-74.0:5mi:        items within 5 miles of a point
:atproto:feed:with-alap:    live posts from a Bluesky feed
.coffee + :time:7d:         combine with tags and operators
*sort:label* *limit:5*      sort, limit, shuffle, paginate

One config, many menus. Update a URL once, every menu reflects it. Add a tag to an item, it appears in every expression that matches.

What's Included

  • Full accessibility — ARIA roles, keyboard nav, focus management, screen reader support
  • Event hooks — hover previews, context menus, custom actions on menu items
  • Image menus — photos instead of text labels
  • Viewport adjustment — menus flip to stay on-screen
  • Regex search/pattern/ syntax for content-aware filtering
  • Security hardened — URL sanitization, ReDoS protection, config validation
  • Storage layer — IndexedDB, REST API client, offline-resilient hybrid
  • 10 server examples — Node, Bun, Python, Go, Rust, PHP, Java backends
  • 8 visual editors — React, Vue, Svelte, Solid, Astro, Alpine builds
  • Markdown, MDX & CMS support — remark, rehype, and MDX plugins for any content pipeline
  • Next.js, Nuxt, Astro, Eleventy, Hugo, Qwik City & VitePress integrations — zero-config framework packages
  • WordPress plugin[alap] shortcode, SQLite containers, instant demo
  • CDN / IIFE build<script> tag usage for static sites and zero-build setups
  • AT Protocol / Bluesky:atproto: protocol for live feeds, profiles, and search
  • htmx — zero-framework HTML-over-the-wire; web components auto-initialize after swaps

Development

This is a pnpm workspace with Turborepo for build orchestration.

pnpm install          # install all workspace packages

# Root library only
pnpm build            # ESM + CJS + IIFE + type declarations
pnpm test             # 992 tests across core, UI adapters, storage, plugins

# Entire workspace (via Turborepo)
pnpm build:all        # build root library, then all editors/integrations/plugins/examples in parallel
pnpm test:all         # run tests across all workspace packages
pnpm typecheck:all    # type-check everything

# Filtered builds
pnpm turbo run build --filter=alap-editor-react...   # one editor + its dependencies
pnpm turbo run build --filter=./integrations/*        # all integrations
pnpm turbo run test --filter=./plugins/*              # tests for plugins only

# Docker (Node server examples — pre-builds library tarball automatically)
pnpm docker:express   # Express + SQLite
pnpm docker:bun       # Bun + SQLite
pnpm docker:hono      # Hono + SQLite

# Docker (other languages — self-contained, build from repo root or servers/)
podman build -t alap-axum -f examples/servers/axum-sqlite/Dockerfile .
podman build -t alap-gin -f examples/servers/gin-sqlite/Dockerfile .
podman build -t alap-flask -f flask-sqlite/Dockerfile examples/servers/
podman build -t alap-django -f django-sqlite/Dockerfile examples/servers/
podman build -t alap-laravel examples/servers/laravel-sqlite/
podman build -t alap-java-spring -f examples/servers/java-spring/Dockerfile .
podman build -t alap-fastapi -f fastapi-postgres/Dockerfile examples/servers/
cd examples/servers/fastapi-postgres && podman compose up -d  # starts FastAPI + Postgres together

# List built server images
podman images | grep alap-

# Run a server (example: Axum on port 3000)
podman run -d -p 3000:3000 --name alap-axum alap-axum

# Stop a running server
podman stop alap-axum

# Remove a stopped container
podman rm alap-axum

Turborepo caches build outputs — a second run with no changes completes in under a second.

pnpm install will show warnings about pnpm.overrides in editors, plugins, and server packages. These are expected — each sub-package carries its own dependency overrides for standalone use outside the workspace. The root package.json overrides take precedence in workspace mode; the per-package copies are harmless.

Next Steps

| Where to go | What you'll find | |-------------|-----------------| | Cookbook | Language ports, editors, markdown, rich-text, accessibility, placement | | Examples | 29 demo sites + 10 server backends | | Framework Guides | 9 adapters + integrations for Eleventy, Next.js, Nuxt, Hugo, WordPress, htmx, and more | | API Reference | Every type, function, component, attribute, CSS hook, and event | | Full Documentation | Adapters, search, storage, testing, security | | FAQ | Common questions and answers | | alap.info | Project website |

License

Apache-2.0