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

xrift-zipline

v0.3.1

Published

Crosshair-aim zip-to-target navigation for react-three-fiber / WebXR worlds — look at a target, tap/trigger, glide there. Solves free navigation in zero-gravity spaces. 見た対象へ滑走するジップライン移動

Readme

xrift-zipline

Ray-aim zip-to-target navigation for react-three-fiber / WebXR worlds — point at a target (controller ray in VR, crosshair on flat), tap or pull the trigger, and glide there.

Built for zero-gravity spaces where you can't reach things by walking: point at any target at any height and zip to it. Movement is delegated to XRift's useTeleport, so it rides the host's player controller.

Install

npm i xrift-zipline

Peer deps: react, three, @react-three/fiber, @xrift/world-components.

Usage

import { Zipline } from 'xrift-zipline'
import { Vector3 } from 'three'

// world-space positions you can zip to
const targets = stars.map((s) => new Vector3(s.x, s.y, s.z))

function World() {
  return (
    <>
      {/* ...your scene... */}
      <Zipline
        targets={targets}
        onArrive={(i) => console.log('arrived at', targets[i])}
      />
    </>
  )
}

The component renders a small billboarded reticle on the target nearest your aim ray and glides you to standoff metres in front of it.

  • Flat (desktop/mobile): aim = camera forward (crosshair); fire = tap/click (distinguished from a look-drag).
  • VR: aim = the controller pointer ray (targetRaySpace, following whichever hand last pulled the trigger); fire = trigger (selectstart). A beam line is drawn from the controller to the aimed target. Falls back to camera aim if no controller pose is available.

Driving the trigger yourself (VR controller, custom button)

Set tapToZip={false} and call the imperative handle from your own trigger (e.g. a WebXR select event or a controller-ray hit):

const zip = useRef<ZiplineHandle>(null)
// on trigger:
zip.current?.zipToAim()

<Zipline ref={zip} targets={targets} tapToZip={false} />

Props

| prop | default | meaning | |---|---|---| | targets | — | world-space Vector3[] you can zip to | | onPick(i) | — | fires when a glide starts (target chosen) | | onArrive(i) | — | fires when a glide completes | | standoff | 3.2 | stop this many metres before the target | | duration | 1.1 | glide time in seconds (smoothstep) | | aimConeDeg | 13 | half-angle of the aim cone (far-target fallback) | | targetRadius | 0.9 | physical radius (m); ray hits within it pick the nearest target (occlusion) before falling back to the angle cone | | tapToZip | true | use the built-in tap/click/VR-trigger firing | | aimHand | 'right' | initial VR aim hand; follows whichever hand last pulled the trigger | | eyeHeight | 1.44 | camera height above the teleported feet position; arrival is lowered by this so the target meets your eye line | | reticleColor | '#43e0ff' | reticle ring / beam colour | | reticle | true | render the built-in reticle | | rayLine | true | render the VR beam line (controller → aimed target; 24 m forward when nothing is aimed; never drawn on flat) | | enabled | true | master on/off |

ZiplineHandle (via ref): getAimIndex(), zipToAim().

Notes

  • Movement uses useTeleport from @xrift/world-components. In environments without a host teleport implementation (e.g. the default DevEnvironment), teleport is a no-op — verify on the real host.
  • In zero-gravity worlds, remember the host may respawn a player below an absolute Y threshold; keep your reachable targets above it.

MIT © toming