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

@chuckcchen/react-router-pages

v1.0.14

Published

EdgeOne adapter plugin for React Router

Readme

@edgeone/react-router-pages

EdgeOne adapter plugin for React Router - Automatically converts React Router build output to EdgeOne deployment format with zero configuration.

Features

  • Automatic Asset Migration - Copies build/client to .edgeone/assets
  • Server Bundling - Bundles server code into a single file (SSR mode)
  • Route Metadata Generation - Generates meta.json configuration
  • Multi-Mode Support - CSR, SSR, and Hybrid (SSR + Prerender)
  • Tree-Shaking - Removes unused code automatically
  • Zero External Dependencies - Bundled file requires only Node.js built-ins

Installation

npm install @edgeone/react-router-pages --save-dev

Quick Start

Add the plugin to vite.config.ts:

import { reactRouter } from "@react-router/dev/vite";
import { edgeoneAdapter } from "@edgeone/react-router-pages";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [reactRouter(), edgeoneAdapter()],
});

Build your project:

npm run build

Output structure:

.edgeone/
├── assets/              # Static assets
├── server-handler/      # Server code (SSR only)
│   └── index.mjs       # Single-file server
└── meta.json           # Route metadata

Configuration

interface EdgeOneAdapterOptions {
  port?: number; // Default: 9000
  outputDir?: string; // Default: .edgeone
  cleanOutput?: boolean; // Default: true
  verbose?: boolean; // Default: false
}

Example:

edgeoneAdapter({
  port: 8080,
  outputDir: "dist/edgeone",
  verbose: true,
});

Rendering Modes

CSR (Client-Side Rendering)

Configure in react-router.config.ts:

export default { ssr: false } satisfies Config;

Deploy to any static hosting:

npx serve .edgeone/assets

SSR (Server-Side Rendering)

Configure in react-router.config.ts:

export default { ssr: true } satisfies Config;

Run locally:

node .edgeone/server-handler/index.mjs
# Server at http://localhost:9000

Hybrid (SSR + Prerender)

export default {
  ssr: true,
  async prerender() {
    return ["/", "/about"];
  },
} satisfies Config;

Deployment

EdgeOne Platform

  1. Upload .edgeone directory
  2. Set static path: .edgeone/assets
  3. Set server entry: .edgeone/server-handler/index.mjs

Docker

FROM node:18-alpine
WORKDIR /app
COPY .edgeone .edgeone
EXPOSE 9000
CMD ["node", ".edgeone/server-handler/index.mjs"]

Static Hosting (CSR)

# Vercel
vercel --prod .edgeone/assets

# Netlify
netlify deploy --prod --dir=.edgeone/assets

Build Process

The adapter uses esbuild to bundle the server with the following optimizations:

  • Platform: Node.js 18+
  • Format: ESM
  • Tree-shaking: Enabled
  • External: Node.js built-in modules only
  • Bundle size: ~1.88 MB (includes React, React Router, and all dependencies)

Troubleshooting

Build fails: Ensure build/client exists. Run npm run build first.

Port in use:

PORT=8080 node .edgeone/server-handler/index.mjs

Missing routes: Enable verbose logging:

edgeoneAdapter({ verbose: true });

Environment Variables

  • PORT - Server port (default: 9000)

Requirements

  • Node.js >= 18.0.0
  • Vite >= 5.0.0
  • React Router >= 7.0.0

License

MIT