v0.3.0 · MIT
Conecta el estado entre pestañas al instante. Sin servidor, sin WebSockets, sin configuración extra.
pnpm add tabus-js925 B
Min + gzip
0
Dependencias
0
Servidores
Carrito compartido
Zapatillas Tabus
Pestaña A → B
Evento en ~0ms
Carrito compartido
Zapatillas Tabus
Carrito compartido
Zapatillas Tabus
Sin runtime pesado ni conceptos nuevos. Una clase, dos métodos, y el navegador hace el resto.
Sincroniza el estado entre pestañas con la API nativa del navegador. Sin WebSockets, sin polling, sin servidor intermedio.
¿Entorno sin BroadcastChannel? Cae a un bus en memoria automáticamente, misma API.
Define tu mapa de eventos con genéricos. emit y on con autocompletado y checks reales.
Limita eventos de alta frecuencia con una opción, ideal para scroll o resize compartidos.
Nada que auditar, nada que actualizar. No arrastra un árbol a tu bundle.
925 B min+gzip, CJS + ESM y tipos incluidos. Se instala y se olvida.
import { Tabus } from 'tabus-js'
type Events = {
'cart:add': { id: string }
'cart:reset': void
}
const bus = new Tabus<Events>('shop')
// escucha en las otras pestañas
bus.on('cart:add', ({ id }) => {
addToCart(id)
})
// emite desde esta
bus.emit('cart:add', { id: 'sku_42' })▍// la API completa
Creas un canal tipado, escuchas en las demás pestañas, emites desde la tuya. No hay paso cuatro.
// funciona donde ya trabajas
Es una clase de JS sobre una API estándar. Envuélvela en un hook, un composable, o úsala directamente.
import { useEffect } from 'react'
import { Tabus } from 'tabus-js'
export const useTabSync = (onAdd: (id: string) => void) => {
useEffect(() => {
const bus = new Tabus<{ 'cart:add': { id: string } }>('shop')
bus.on('cart:add', ({ id }) => onAdd(id))
return () => bus.destroy()
}, [])
}Sincroniza tus pestañas en el tiempo que tardas en leer los docs.