DEV Community

Cover image for TotalFusion: Python, Rust, Go y WebAssembly desde tu aplicación JavaScript
Spanish Total.js
Spanish Total.js

Posted on

TotalFusion: Python, Rust, Go y WebAssembly desde tu aplicación JavaScript

Tu aplicación está en JavaScript. Encuentras una biblioteca de Python que resuelve justo lo que necesitas. O tienes un cálculo que encaja muy bien en Rust. O una herramienta escrita en Go que quieres integrar.

Entonces llega la parte menos divertida: conectar procesos, intercambiar datos, gestionar errores y decidir qué hacer cuando algo tarda demasiado.

TotalFusion nace para facilitar esa conexión. Permite llamar a funciones escritas en Python, Rust, Go y WebAssembly desde Total.js y Node.js mediante una API asíncrona.

El proyecto es abierto, tiene licencia MIT y ya está disponible en npm:

npm install totalfusion
Enter fullscreen mode Exit fullscreen mode

Empecemos con algo pequeño

Creamos una función de Python:

# python/hello.py
def greet(data):
    return {
        'message': 'Hola, ' + data['name']
    }
Enter fullscreen mode Exit fullscreen mode

Y la llamamos desde JavaScript:

const fusion = require('totalfusion');

fusion.configure({
    python: {
        path: './python'
    }
});

async function main() {
    try {
        const result = await fusion.python('hello.greet', {
            name: 'DEV Community'
        });

        console.log(result.message);
    } finally {
        await fusion.shutdown();
    }
}

main().catch(console.error);
Enter fullscreen mode Exit fullscreen mode

La llamada devuelve una promesa. Python ejecuta la función y JavaScript recibe el resultado.

Los procesos de Python permanecen activos entre llamadas. Eso permite conservar en memoria un modelo o una biblioteca costosa de inicializar y reutilizarlos en las siguientes peticiones.

Puedes empezar por el ejemplo para Node.js.

En Total.js, la función también puede ser una Action

Aquí es donde la integración empieza a resultar especialmente interesante.

Añadimos un contrato a la función:

# python/hello.py
from totalfusion import action

@action(
    summary='Saluda a una persona',
    input='*name:String',
    output='message:String'
)
def greet(data):
    return {
        'message': 'Hola, ' + data['name']
    }
Enter fullscreen mode Exit fullscreen mode

Y registramos el directorio desde nuestra aplicación Total.js 5:

// definitions/fusion.js
const fusion = REQUIRE('totalfusion');

exports.install = async function() {
    await fusion.register({
        python: {
            path: PATH.root('python')
        },
        watch: DEBUG
    });
};
Enter fullscreen mode Exit fullscreen mode

Ya podemos invocarla como una Action:

const result = await ACTION('hello/greet', {
    name: 'DEV Community'
}).promise();
Enter fullscreen mode Exit fullscreen mode

El contrato declara name como obligatorio. Total.js valida la entrada antes de ejecutar Python. La función se integra en el sistema de Actions del framework, donde también puede utilizar permisos y conectarse a rutas API.

Con watch: DEBUG, los cambios en el código se recogen para las siguientes llamadas durante el desarrollo.

La documentación de Total.js 5 explica esta integración.

Cada lenguaje aporta sus herramientas

A partir de ahí, aparecen posibilidades bastante prácticas:

  • Python: integrar bibliotecas de análisis de datos, cálculo científico o machine learning.
  • Rust: ejecutar funciones intensivas en CPU en un worker compilado.
  • Go: incorporar código de red e infraestructura.
  • WebAssembly: ejecutar módulos en un entorno aislado, sin acceso a archivos, red ni variables de entorno.

El motor de TotalFusion funciona en Node.js sin depender de Total.js. La integración con el framework añade Actions, rutas API y componentes para Flow.

La parte que también importa: cuando algo falla

Una integración entre lenguajes necesita resolver más cosas que la primera llamada.

TotalFusion incluye pools de workers, colas limitadas, timeouts, cancelación y reinicio de procesos que fallan. También ofrece streaming con control de flujo y transferencia binaria para buffers y arrays tipados.

Esto permite trabajar con imágenes, audio o datos numéricos sin convertir los binarios a base64.

Para revisar la configuración de Python antes de empezar:

npx totalfusion doctor --path ./python
Enter fullscreen mode Exit fullscreen mode

El diagnóstico indica qué falta y cómo corregirlo. Las dependencias de cada lenguaje y la compilación de los workers siguen estando bajo tu control.

Un proyecto temprano, con mucho que explorar

TotalFusion está en la versión 0.1.1. El repositorio incluye documentación, tutoriales y ejemplos con Total.js, NumPy, Rust, streaming y Flow.

La idea que queremos explorar es sencilla: mantener la aplicación en JavaScript y poder incorporar el ecosistema de otros lenguajes cuando resulte útil.

Si te apetece probarlo, revisar el código o proponer un caso de uso:

👉 TotalFusion en GitHub

¿Qué integrarías primero en tu backend: una biblioteca de Python, una función en Rust o un módulo WebAssembly?

Top comments (0)