IronCalc: Motor de hoja de cálculo moderno en Rust

Publicado por


Motor de hoja de cálculo en Rust

IronCalc: Motor de hoja de cálculo moderno en Rust

Engine de spreadsheet open source con soporte WASM, lectura/escritura XLSX y despliegue vía Docker

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar IronCalc: Motor de hoja de cálculo moderno en Rust en el canal GENBYTE:

¿Qué es IronCalc: Motor de hoja de cálculo moderno en Rust?

IronCalc es un motor de hoja de cálculo moderno, en desarrollo activo, programado en Rust. Proporciona el núcleo del ecosistema IronCalc e incluye lector y escritor de archivos XLSX. Está diseñado para ser utilizado desde múltiples lenguajes como Python, JavaScript (WebAssembly), Node.js y potencialmente R, Julia o Go. El proyecto ofrece diferentes interfaces: terminal, aplicación de escritorio e integración en aplicaciones web propias. Se distribuye bajo licencias duales MIT y Apache-2.0.

Motor de spreadsheet escrito en Rust con bindings WebAssembly, lectura/escritura XLSX nativa y arquitectura preparada para múltiples frontends (web, escritorio, terminal).

Características principales

Motor de cálculo en Rust

Núcleo de spreadsheet implementado en Rust con evaluación de fórmulas, gestión de hojas y modelo de datos propio.

Lectura y escritura XLSX

Soporte nativo para importar y exportar archivos Excel (.xlsx) mediante el crate xlsx integrado.

Bindings WebAssembly

Paquetes npm @ironcalc/wasm y @ironcalc/wasm-xlsx para usar el motor directamente en navegador o Node.js.

Multi-lenguaje

API accesible desde Python, JavaScript, Node.js y con planes para R, Julia y Go.

Múltiples interfaces

Arquitectura preparada para skins en terminal, aplicación de escritorio (Tauri/Electron) y aplicaciones web React.

Despliegue con Docker

Imágenes multi-arquitectura publicadas en ghcr.io con docker-compose listo para producción (frontend + API).

Licencia dual permisiva

Disponible bajo MIT o Apache-2.0 a elección del usuario, compatible con integración en SaaS propietario.

Datos de localización CLDR

Incluye datos de locale derivados de Unicode CLDR bajo licencia Unicode v3 para soporte internacional.

Requisitos del sistema

  • Docker y Docker Compose para despliegue en contenedores
  • Rust toolchain (stable) para compilación nativa
  • Node.js 24 y pnpm 9.15+ para construir frontend y bindings WASM
  • make y bash para scripts de construcción y pruebas
  • Arquitectura compatible con linux/amd64 y linux/arm64 (imágenes multiarch)

Instalación con Docker Compose

Clonar el repositorio

Obtener el código fuente desde GitHub.

git clone https://github.com/ironcalc/IronCalc.git
cd IronCalc

Levantar la pila completa con Docker Compose

Construye las imágenes (server y caddy) y expone la aplicación en el puerto 2080.

docker compose up –build

Compilación nativa (opcional)

Compilar el motor y herramientas en modo release sin contenedores.

cargo build –release

Ejecutar pruebas y linters

Ejecuta suite completa: unit tests, integration tests, lint y formato.

make tests

Acceder al proyecto

Aplicación web (frontend + API)

Acceder a http://localhost:2080 tras levantar docker compose. Caddy sirve el frontend estático y hace reverse proxy a /api hacia el servidor Rust en puerto 8000 interno.

API del servidor (directa)

El servidor Rocket escucha en 0.0.0.0:8000 dentro del contenedor; accesible vía localhost:2080/api gracias al proxy de Caddy.

Vista previa online

Versión de prueba ejecutándose completamente en el navegador: https://app.ironcalc.com

Casos de uso

  • Integración de motor de spreadsheet en aplicaciones SaaS propias sin depender de licencias propietarias
  • Procesamiento automatizado de archivos XLSX en pipelines de datos (lectura, cálculo, escritura)
  • Desarrollo de herramientas de análisis de datos con frontend web personalizado sobre motor Rust
  • Aplicaciones de escritorio nativas con capacidades de hoja de cálculo (vía Tauri/Electron + WASM)
  • Scripting y automatización en Python/Node.js usando bindings oficiales
  • Entornos educativos o de investigación que requieren motor de fórmulas auditable y extensible

Configuración avanzada

Generar documentación local

Compila y sirve la documentación de la crate ironcalc en http://0.0.0.0:8000/ironcalc/.

make docs
cd target/doc
python -m http.server

Ejecutar cobertura de código

Genera reporte HTML de cobertura y lo sirve localmente.

make coverage
cd target/coverage/html
python -m http.server

Convertir XLSX a formato interno .ic

Utiliza el binario xlsx_2_icalc (compilado en xlsx/target/debug/) para transformar plantillas y documentos de prueba al formato nativo.

./target/debug/xlsx_2_icalc archivo.xlsx salida.ic

Uso como dependencia Rust

Añadir al Cargo.toml y usar el modelo programáticamente (ejemplo simplificado).

[dependencies]
ironcalc = { git = "https://github.com/ironcalc/IronCalc", version = "0.8"}

// En main.rs
use ironcalc::{base::{expressions::utils::number_to_column, Model}, export::save_to_xlsx};
let mut model = Model::new_empty("file.xlsx", "en", "UTC", "en")?;
model.set_user_input(0, 1, 1, "42");
model.evaluate();
save_to_xlsx(&model, "out.xlsx")?;

Gestión y mantenimiento

Actualizar imágenes Docker

Descargar últimas versiones de ghcr.io/ironcalc/ironcalc-server y ghcr.io/ironcalc/ironcalc-caddy.

docker compose pull
docker compose up -d

Reconstruir desde fuente

Forzar reconstrucción completa de las imágenes tras cambios en el código.

docker compose build –no-cache
docker compose up -d

Ver logs del servidor y proxy

Inspeccionar salida de ambos contenedores (server y caddy).

docker compose logs -f server
# o
docker compose logs -f caddy

Limpiar recursos Docker

Eliminar contenedores, redes y volúmenes asociados al proyecto.

docker compose down -v

Stack técnico

  • Rust (motor principal, servidor Rocket, CLI)
  • WebAssembly (wasm32-unknown-unknown via wasm-pack)
  • JavaScript/TypeScript (frontend React, bindings npm)
  • Node.js 24 + pnpm 9.15 (build frontend y WASM)
  • Caddy 2 (reverse proxy, servir estáticos, TLS automático)
  • Docker multi-stage (builder Rust/Node + runtime Debian/Caddy)
  • SQLite (base de datos embebida del servidor, archivo ironcalc.sqlite)
  • Unicode CLDR (datos de localización)

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *