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

indexnow-extension

v1.0.0

Published

IndexNow extension for Gemini CLI

Readme

IndexNow Extension

English | Português (BR)

Extension to automate the IndexNow protocol (instant notification to Bing, Yandex, etc.) in AI tools like Gemini CLI and OpenCode.

Key Features

  • Smart configuration: detects local IndexNow keys, generates new keys, creates .txt validation file
  • Health check: tests if URLs are accessible (status 200) before sending
  • Differential sending: compares sitemap with history and sends only new/modified URLs
  • Sitemap discovery: automatically searches in robots.txt and standard paths
  • Send history: tracks already sent URLs to avoid unnecessary resends
  • Status dashboard: shows configuration summary, sent URLs, and pending ones

Installation

For OpenCode (Plugin)

Option 1: npx (easiest)

Run the installer directly:

npx indexnow-opencode-plugin

Or from npm:

npm install indexnow-opencode-plugin
npx indexnow-install

Option 2: Local files

  1. Clone the repository and run the install script:

    git clone https://github.com/your-user/indexnow-extension.git
    cd your-project
    ../indexnow-extension/install.sh

    Or manually copy:

    cp -r indexnow-extension/.opencode .
  2. Dependencies will be installed automatically by OpenCode.

  3. Configure opencode.json in your project root (the install script creates it):

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["./.opencode/plugins/indexnow-plugin.ts"]
    }

For Gemini CLI (MCP Extension)

  1. Copy the extension files to the Gemini CLI extensions directory.

  2. Install dependencies:

    npm install
  3. Compile the server:

    npm run build
  4. Configure Gemini CLI to use the extension.

How to Use

In OpenCode

After installing the plugin, OpenCode will automatically load the IndexNow tools and slash commands.

Using slash commands:

  • /indexnow - Main command (asks what you want to do)
  • /indexnow init - Configure IndexNow
  • /indexnow submit <url> - Send a specific URL
  • /indexnow sitemap [url] - Send URLs from a sitemap
  • /indexnow status - Show status

Or talk directly to the AI:

  • Configure IndexNow:

    Configure IndexNow for my domain example.com
  • Send specific URL:

    Send https://example.com/new-post to IndexNow
  • Send all URLs from a sitemap:

    Notify IndexNow about all URLs in https://example.com/sitemap.xml
  • Check status:

    Show IndexNow status
  • Differential send (recommended):

    Do differential send of sitemap https://example.com/sitemap.xml

In Gemini CLI

Use the /indexnow command with subcommands:

  • /indexnow init - Configure the extension
  • /indexnow submit <url> - Send a URL
  • /indexnow sitemap [url] - Send URLs from a sitemap
  • /indexnow status - Show status
  • /indexnow help - Show help

Available Tools

The plugin exposes the following tools for the AI:

Configuration

| Tool | Description | |------|-------------| | indexnow_get_config | Retrieves the current IndexNow configuration in the project | | indexnow_save_config | Saves IndexNow configuration (.indexnow.json) | | indexnow_verify_key | Performs local key verification (.txt) and remote (HTTPS) | | indexnow_generate_key | Generates a new random 32-character hexadecimal key | | indexnow_create_key_file | Creates the key file {key}.txt in the project root |

Analysis and Sending

| Tool | Description | |------|-------------| | indexnow_health_check | Checks if URLs are accessible (status 200-299) | | indexnow_parse_sitemap | Parses an XML sitemap and extracts URLs | | indexnow_discover_sitemap | Attempts to discover the sitemap URL for a host | | indexnow_submit | Sends URLs to search engines via IndexNow | | indexnow_submit_differential | Analyzes URLs, compares with history, and offers differential sending options |

History

| Tool | Description | |------|-------------| | indexnow_get_history | Queries which URLs have been notified and the last send timestamp |

Configuration Files

  • .indexnow.json: Project settings (Host, API Key, Sitemap URL)
  • .indexnow_history.json: History of sent URLs (URL → Timestamp)
  • <key>.txt: Key validation file (must be hosted on the server)

How Differential Sending Works

  1. AI receives a list of URLs (e.g., from a sitemap)
  2. Consults local history (.indexnow_history.json)
  3. Compares and identifies new URLs vs already sent
  4. Presents options to the user:
    • Send only new URLs (recommended)
    • Send all (including already sent)
    • Send only already sent (resend)
    • Cancel
  5. After user choice, sends the selected list
  6. Updates history with sent URLs

Security

  • Never include keys or tokens in code
  • JSON configuration and history files should be ignored by Git
  • Remote key validation via HTTPS to ensure server is configured

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/new-feature)
  3. Commit your changes (git commit -m 'Add new feature')
  4. Push to the branch (git push origin feature/new-feature)
  5. Open a Pull Request

License

MIT