Runlight cuenta quién visita tu sitio y de dónde viene, desde dentro de tu propia aplicación, con cada cifra guardada en tu propia base de datos.

Runlight tiene licencia MIT y se configura con un paquete y una ruta, con un script de menos de 2 KB comprimido con gzip. No usa cookies y no guarda nada personal.

npm install @runlight/sdk better-sqlite3

Pégalo en cualquier agente de código para configurar Runlight. El mismo prompt está en /prompt.txt.

Panel

Todo cabe en una página.

El panel se monta dentro de tu aplicación en /runlight. Su primera línea dice cuántas personas vinieron y cómo se compara con antes. Seis cifras están encima de un gráfico, y debajo están las páginas, fuentes, lugares, dispositivos, campañas y agentes de IA, donde un clic en cualquiera de ellos filtra todo lo demás.

Un panel de Runlight que muestra que 6.696 personas visitaron el sitio en los últimos 30 días, un 36 % más que en los 30 días anteriores. Las tarjetas de visitantes, visitas, páginas vistas, páginas por visita, tasa de rebote y duración de la visita están encima de un gráfico de visitantes por día. El mismo panel en modo claro.

Este es el panel tal como lo sirve el paquete, con un mes de un blog de demostración.

Instalación

La instalación son tres archivos en la aplicación que ya tienes.

Un archivo dice dónde viven las cifras, y una etiqueta de script en tu layout cuenta cada página. Entre ambos hay una ruta que sirve todo lo que está bajo /runlight, desde el script que recoge las visitas hasta el panel que las muestra. Como el script envía los datos a tu propio dominio, los bloqueadores de anuncios no tienen nada que bloquear.

lib/runlight.ts

import { runlight } from "@runlight/sdk";
import { sqlite } from "@runlight/sdk/sqlite";   // or postgres

export const rl = runlight({
  store: sqlite({ path: "./data/runlight.db" }),
  site: { hostnames: ["example.com"], timezone: "Europe/London" },
});

app/runlight/[[...path]]/route.ts

import { rl } from "@/lib/runlight";

export const { GET, POST, PUT, PATCH, DELETE, OPTIONS } = rl.routes();

app/layout.tsx

<script defer src="/runlight/s.js"></script>

Ese ejemplo es de Next.js. Nuxt, SvelteKit, Astro, Remix, Express, NestJS, Fastify, Koa, Hono, Bun, Deno y Cloudflare Workers necesitan unas pocas líneas cada uno, y la documentación tiene los pasos para cada framework. Runlight también está escrito para PHP, Python, Ruby, Go, Java, .NET, Elixir y Rust, así que una aplicación Laravel, Django, Rails, Phoenix, Spring Boot o ASP.NET Core obtiene el mismo panel con un paquete en su propio lenguaje. Define RUNLIGHT_TOKEN y abre /runlight para iniciar sesión.

Privacidad

Cuenta personas sin saber quiénes son.

Cada día, a medianoche en la zona horaria de tu sitio, Runlight crea una nueva sal aleatoria. Un visitante es un hash de esa sal, tu sitio, su dirección IP y el user agent de su navegador, recortado a 64 bits. La dirección y el user agent nunca se guardan, y una sal se borra como mucho a los cuatro días, así que a partir de entonces nadie, ni siquiera tú, puede saber si dos visitas vinieron de la misma persona.

Runlight no usa cookies y no guarda nada en los navegadores de tus visitantes, así que no hay nada que poner en un banner. Lo único que el script escribe en el almacenamiento local es una marca de exclusión que puedes poner en tu propio navegador para que no se cuenten tus visitas.

visitante
a6fbd78a579b03bf
llegó
2026-10-06 18:29 UTC, en /blog/building-runlight
se quedó
3 páginas vistas, 4 min 27 s de atención, salió desde /
vino de
Hacker News (Redes sociales), news.ycombinator.com
lugar
New York, US-NY, US
dispositivo
escritorio, Windows 10, Edge 129, 1920x1080, en-US

Esto es todo lo que Runlight guarda de una visita de la demo. Nunca guarda la dirección IP ni el user agent, y ningún identificador que guarda dura más de un día. La documentación de privacidad explica cómo funciona.

Fuentes

Sabe cuándo una visita vino de ChatGPT.

Runlight convierte los referentes en fuentes que reconoces y agrupa esas fuentes en canales como búsqueda, redes sociales, correo, campañas e IA. El canal IA reúne a las personas que llegaron haciendo clic desde ChatGPT, Claude, Perplexity, Gemini y los demás. Los clics que pasan por los rastreadores de boletines o por el webmail cuentan como correo.

Los agentes de IA que acceden a tus páginas para responder a una pregunta nunca ejecutan JavaScript, así que ningún tracker los ve. Runlight los cuenta con una línea de middleware, rl.observe(request).

El recuadro Fuentes muestra los canales como una barra de colores con Búsqueda orgánica, Redes sociales, Directo, IA, Correo, Referencias y Campaña.
El recuadro Agentes de IA muestra qué agentes accedieron a páginas, separados entre agentes que leen para una persona y rastreadores.

En directo

La vista en directo muestra lo que está pasando ahora mismo.

Haz clic en “ahora mismo” para ver la última media hora minuto a minuto, las páginas en las que está la gente, de dónde vino y una lista continua de lo que hizo. Se actualiza cada diez segundos.

La vista en directo muestra 10 personas en el sitio, las páginas vistas por minuto, las páginas, fuentes y países activos ahora y una lista con entradas como Alguien en Portland, Estados Unidos vio /about desde ChatGPT.

Objetivos

Runlight cuenta las conversiones y lo que valieron.

Un objetivo puede ser un evento que envías o una página a la que llega alguien (/thanks* funciona). También puede ser un clic en algo, que no necesita código. Después de pulsar “Elegir en mi sitio” y hacer clic en el botón de tu propia página, Runlight lo cuenta a partir de ese momento.

Dale a un objetivo un valor fijo o lee el importe del evento, y el recuadro muestra los ingresos de cada objetivo, desglosados por fuente y página.

Los objetivos se calculan cuando los consultas, así que un objetivo de evento o de página que añades hoy cuenta también el mes pasado.

El recuadro Conversiones lista Read the Runlight post, Newsletter signup, Purchase y Email me, cada uno con una tasa y un recuento, con 6.309 $ de ingresos en el encabezado.

Informes

El correo semanal se lee como el panel.

Elige quién recibe un resumen semanal o mensual, cada uno en su propio idioma. Sale desde tu propia dirección a través del servicio de correo que ya usas, y cada correo permite darse de baja con un clic. Las claves se guardan cifradas y nunca se vuelven a mostrar.

Amazon SESResendPostmarkSendGridMailgunBrevoMailjetMailerSendSparkPostSMTPWebhook
Un correo de informe semanal que dice que 1.438 personas visitaron el sitio la semana pasada, seguido de seis métricas, las páginas, fuentes y países principales, y las conversiones.

Este es el correo semanal del sitio de demostración, que se vuelve claro u oscuro según la aplicación de correo de quien lo lee.

Además

Runlight también cubre el resto de lo que esperarías.

Compartir
Un enlace privado de solo lectura abre el panel de un sitio, y deja de funcionar cuando lo borras.
Comparar
Puedes comparar un rango con el periodo anterior o con los mismos días de un año antes, y puedes elegir tú las fechas de comparación.
Filtros
Puedes combinar filtros por página, fuente, campaña, país, ciudad, dispositivo, navegador y más.
Idiomas
El panel y los correos están en inglés, francés, español, alemán y portugués.
Sitios
Una instalación puede contar varios sitios, que distingue por nombre de host.
Almacenes
En un servidor Runlight usa SQLite, Postgres, MySQL, MariaDB o el SQLite propio de Bun, y en el edge usa Turso o Cloudflare D1.
API
Todo lo que hay en el panel está disponible como JSON en /runlight/api.
Pregunta a tu IA
Claude, Cursor y otras aplicaciones que hablan MCP pueden responder preguntas sobre tus estadísticas con un token de solo lectura. Mira cómo conectar una.

Por qué

Tu analítica puede vivir en la aplicación que sirve tus páginas.

Runlight cuenta desde la aplicación que ya tienes en marcha y guarda las cifras en la base de datos de la que ya haces copias de seguridad. Sabes qué páginas lee la gente y de dónde viene mientras cada visita se queda en tus propios servidores, y el coste no cambia por mucho que crezca tu tráfico.

Nunca guarda nada que pueda decir quién era un visitante, así que no tienes que añadir un banner de cookies ni confiar tus visitantes a un tercero. Los datos son tuyos desde la primera visita, y se quedan en una base de datos que puedes consultar o borrar cuando quieras.

Cuenta tu primera visita en unos cinco minutos.