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

@jamx-framework/adapter-tauri

v2.0.0

Published

JAMX Framework — Tauri desktop adapter

Readme

@jamx-framework/adapter-tauri

Descripción

Adaptador de JAMX Framework para aplicaciones de escritorio basadas en Tauri. Permite crear aplicaciones de escritorio con una API consistente que combina la potencia de Rust y la simplicidad de TypeScript, ofreciendo acceso a funcionalidades del sistema operativo, gestión de ventanas, notificaciones, almacenamiento y más a través de una interfaz moderna y tipada.

Cómo funciona

El adaptador proporciona servicios y managers que encapsulan las APIs nativas de Tauri, simulando su comportamiento en entornos de prueba y proporcionando tipado completo. Todos los servicios están diseñados para ser utilizados mediante inyección de dependencias o mediante instancias directas, y se integran con la arquitectura de JAMX mediante tipos e interfaces compartidas.

Componentes principales

  • src/dialog.ts: Servicio de diálogos nativos (open, save, confirm, message)
  • src/fs.ts: Sistema de archivos con operaciones de lectura, escritura y manipulación de directorios
  • src/notifications.ts: Gestor de notificaciones de escritorio con permisos y envío
  • src/store.ts: Almacenamiento persistente compatible con tauri-plugin-store
  • src/system.ts: Información del sistema operativo y recursos del hardware
  • src/window.ts: Gestor de ventanas con creación, configuración y control
  • src/tray.ts: Sistema de bandeja de notificación con menús y eventos
  • src/index.ts: Punto de exportación que reúne todos los servicios
  • src/types.ts: Definiciones de tipos compartidos (WindowConfig, SystemInfo, etc.)

Uso básico

import {
  WindowManager,
  TauriFs,
  DialogService,
  DesktopNotifications,
  TauriStore,
  SystemService,
} from '@jamx-framework/adapter-tauri';

// Inicializar servicios
const windowManager = new WindowManager();
const fs = new TauriFs();
const dialog = new DialogService();
const notifications = new DesktopNotifications();
const store = new TauriStore('app-data');
const system = new SystemService();

// Crear ventana
const windowState = await windowManager.create({
  label: 'main',
  title: 'Mi Aplicación JAMX',
  width: 1024,
  height: 720,
});

// Mostrar diálogo de selección de archivo
const result = await dialog.open({
  title: 'Selecciona un archivo',
  filters: [DialogService.filter('Archivos de texto', '.txt', '.md')],
});
console.log('Archivo seleccionado:', result);

// Leer y escribir archivo
await fs.writeTextFile('/tmp/prueba.txt', 'Hola desde JAMX');
const content = await fs.readTextFile('/tmp/prueba.txt');
console.log('Contenido:', content);

// Enviar notificación
await notifications.requestPermission();
await notifications.send({
  title: '¡Bienvenido!',
  body: 'Tu aplicación JAMX está lista para usar.',
});

// Acceder a información del sistema
console.log('Sistema operativo:', system.os);
console.log('Memoria total (GB):', (system.totalMemory / (1024 ** 3)).toFixed(2));

// Usar almacenamiento persistente
await store.set('user-settings', { theme: 'dark', language: 'es' });
const settings = await store.get<{ theme: string; language: string }>('user-settings');
console.log('Configuración:', settings);

Ejemplos

Gestión avanzada de ventanas

import { WindowManager } from '@jamx-framework/adapter-tauri';

const manager = new WindowManager();

// Crear ventana secundaria
const splashWindow = await manager.create({
  label: 'splash',
  title: 'Pantalla de Bienvenida',
  width: 400,
  height: 300,
  fullscreen: false,
});

// Configurar propiedades
await manager.resize('splash', 500, 400);
await manager.setTitle('splash', 'Bienvenido a JAMX');
await manager.focus('splash');

// Escucha de eventos (simulado para tests)
const windows = manager.getAll();
console.log('Ventanas abiertas:', windows.length);

Uso con inyección de dependencias

import { Container } from '@jamx-framework/core';
import {
  WindowManager,
  SystemService,
  DesktopNotifications,
} from '@jamx-framework/adapter-tauri';

// Registrar servicios
Container.registerSingleton('windowManager', () => new WindowManager());
Container.registerSingleton('system', () => new SystemService());
Container.registerSingleton('notifications', () => new DesktopNotifications());

// Resolver e usar
const windowManager = Container.resolve('windowManager');
const system = Container.resolve('system');

const window = await windowManager.create({
  label: 'app',
  title: 'Aplicación JAMX',
  width: 800,
  height: 600,
});

console.log('Sistema operativo:', system.os);
console.log('Arquitectura:', system.arch);

Simulación en tests

import { DialogService } from '@jamx-framework/adapter-tauri';

const dialog = new DialogService();
dialog.setNextOpenResult('/tmp/test.txt'); // Simular resultado de open dialog
dialog.setNextConfirmResult(false); // Simular cancelación en confirm

const result = await dialog.open();
console.log('Resultado simulado:', result);

Flujo interno

  1. Servicios: Cada funcionalidad (ventanas, archivos, notificaciones, etc.) está encapsulada en su propio servicio
  2. Tipado: Todos los métodos y propiedades están tipados con interfaces definidas en types.ts
  3. Simulación: En entornos de prueba, los servicios usan implementaciones mock para evitar dependencias nativas
  4. Integración: Los servicios pueden ser registrados en el contenedor de dependencias de JAMX para inyección automática
  5. Eventos: Sistemas como NetworkMonitor (si está presente) emiten eventos de cambio de estado que pueden ser suscritos
  6. Persistencia: TauriStore y otros servicios mantienen estado interno pero están diseñados para ser stateless cuando es posible

Este adaptador permite a los desarrolladores de JAMX construir aplicaciones de escritorio completas con acceso a funcionalidades del sistema de forma consistente entre Windows, macOS y Linux, manteniendo una arquitectura modular, testeable y con tipado completo.