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

@ridemypark/cli

v1.2.2

Published

Command-line access to the RideMyPark catalogue: search skateparks, street spots, pumptracks, shops and events, read one listing in full, geocode a place. Read-only, no account needed.

Readme

@ridemypark/cli

The RideMyPark catalogue from your terminal: skateparks, street spots, pumptracks, shops and events. Read-only, no account, no API key.

npx @ridemypark/cli search --near Bordeaux --spot-type skatepark --limit 3
3 of 80 results (page 1/27)

Quai des Chartrons skatepark [skatepark]
  83 Quai Des Chartrons, 33300 Bordeaux, France
  https://ridemypark.com/spots/quai-des-chartrons-skatepark
Hangar Darwin skatepark [skatepark]
  Allée Cavalière, 33100 Bordeaux, France
  https://ridemypark.com/spots/hangar-darwin-skatepark
Zoom skatepark [skatepark]
  5 Cours Du Médoc, 33300 Bordeaux, France
  https://ridemypark.com/spots/zoom-skatepark

Install

npm install -g @ridemypark/cli   # or: npx @ridemypark/cli <command>
npm install -g ridemypark        # the short name works too

Node 20 or later. No runtime dependencies.

The package is @ridemypark/cli; the command it installs is ridemypark. They differ on purpose — the scope says who publishes it, the binary is what you type. ridemypark is published as well, as a thin alias onto this package, so the short name you type is also a name you can install. Both give you the same tool.

Commands

| Command | What it does | | --- | --- | | ridemypark search [query] | Search the catalogue | | ridemypark spot <slug\|id> | One listing in full: address, modules, materials, rating, reviews | | ridemypark geocode <place> | Resolve a place name to coordinates | | ridemypark mcp | How to connect an AI assistant to the catalogue | | ridemypark openapi | Print the API specification the server is serving |

Search options

| Option | Meaning | | --- | --- | | --near <place> | Search around a place — geocoded for you | | --lat <n> --lng <n> | Search around a point | | --radius <km> | Search radius (default: 50) | | --type <universe> | spot, event or shop (default: spot) | | --spot-type <slug> | skatepark, street, pumptrack, bowl, diy… | | --category <slug> | indoor, outdoor, closed | | --sport <slug> | skate, bmx, inline, scooter | | --element <slug> | rail, quarters, bowl… (repeatable) | | --country <name> | Restrict to one country | | --min-rating <n> | Minimum rating, out of 5 | | --open-now | Open right now (listings that publish opening hours) | | --limit <n> | Results per page (default: 10, max: 500) | | --page <n> | Page, starting at 1 |

Ratings are sparse: roughly 200 of the 31 000 listings carry one today. --min-rating excludes everything unrated, so it narrows results hard.

--json works on every command and prints the raw API response, for a script or an agent that will parse it. Without it the output is plain text — no colours, no control characters, because this output regularly ends up in a pipe, a log file or a model's context.

Run ridemypark help for the full list.

One listing in full

ridemypark spot zoom-skatepark
Zoom skatepark
https://ridemypark.com/spots/zoom-skatepark

5 Cours Du Médoc, 33300 Bordeaux, France
44.85629, -0.56429
Type: Skatepark
Categories: Outdoor
Modules: Kicker, Flatbars, Quarters, Stairs, Ledges, Banks, Hubbas, Manual pads
Materials: Wood

As a library

import { search, getListing } from '@ridemypark/cli'

const { data } = await search({ query: 'bowl', sports: ['bmx'], limit: 5 })
const listing = await getListing('cosanostra-skatepark')

Same client the CLI uses, same types.

For AI agents

ridemypark mcp prints everything needed to connect an assistant to the catalogue over MCP — endpoint, transport, and a ready-to-paste command:

claude mcp add --transport http RMP --scope user https://mcp.ridemypark.com/mcp

The MCP server answers questions in natural language, where this CLI answers flags. Both read the same catalogue through the same API.

What it talks to

The public read-only REST API, described by https://ridemypark.com/openapi.json. Every command maps to one documented operation:

| Command | Operation | | --- | --- | | search | searchListingsGET /wp-json/rmp/v2/search | | spot | getListingGET /wp-json/rmp/v1/listing | | geocode | geocodeAddressGET /wp-json/rmp/v2/geocode |

Two environment variables override the hosts, for a staging or a local backend: RIDEMYPARK_API_URL (default https://api.ridemypark.com) and RIDEMYPARK_WEB_URL (default https://ridemypark.com).

What it will never do

Write. There is no create, no edit, no review posting, and no token is read from the environment or accepted as an option — a CLI that took a secret would invite someone to paste one. Everything that needs an account lives behind the OAuth consent of the MCP server.

Contributing

This package lives in the RideMyPark monorepo, under apps/cli.

bun install
bun run check          # typecheck + tests + build
bun src/cli.ts search bercy --limit 3

Tests never open a socket: fetch is injected everywhere.

Releases are automatic. Any change that ships in the tarball must raise version in package.json and CLI_VERSION in src/constants.ts; a guard in continuous integration turns red otherwise, because a published client that changed without a new version is a client nobody can pin. Once the change lands on main, the release workflow publishes that exact version through npm Trusted Publishing (OIDC) — no npm token is stored anywhere.

Licence

MIT.