Novedades de Bun 1.2 - Compatibilidad completa con Windows y mejoras en Node.js

2025.12.12

Lanzamiento de Bun 1.2

Bun, el runtime de JavaScript de alto rendimiento que está captando mucha atención, ha lanzado la versión 1.2. Con compatibilidad completa para Windows, mejoras significativas en la compatibilidad con Node.js y cliente S3 integrado, su utilidad práctica ha aumentado aún más.

Qué es Bun: Un runtime de JavaScript/TypeScript de alto rendimiento escrito en el lenguaje Zig. Proporciona runtime, bundler, gestor de paquetes y test runner todo en uno.

Principales novedades

1. Compatibilidad completa con Windows

La compatibilidad con Windows, que antes estaba en beta, ahora es compatible oficialmente. Están disponibles las mismas funciones que en macOS y Linux.

# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

# O a través de npm
npm install -g bun

2. Compatibilidad del 92% con Node.js

La cobertura de las APIs de Node.js ha mejorado significativamente. La mayoría de los paquetes npm principales ahora funcionan.

MóduloEstado de compatibilidad
node:fs / node:pathCompletamente compatible
node:http / node:httpsCompletamente compatible
node:cryptoCasi completamente compatible
node:net / node:tlsCompletamente compatible
node:child_processCompletamente compatible
node:worker_threadsCompletamente compatible

3. Cliente S3 integrado

El acceso a AWS S3 ahora es compatible de forma nativa. Es posible realizar operaciones S3 sin bibliotecas externas.

// Leer archivo desde S3
const file = Bun.s3.file("s3://my-bucket/data.json");
const data = await file.json();

// Subir archivo a S3
await Bun.s3.write("s3://my-bucket/output.txt", "Hello S3!");

// Las credenciales se obtienen automáticamente de las variables de entorno
// AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

4. Postgres integrado

El cliente de PostgreSQL también está disponible de forma nativa.

import { sql } from "bun";

// La conexión se gestiona automáticamente
const users = await sql`
  SELECT * FROM users
  WHERE created_at > ${new Date('2025-12-01')}
`;

// Transacciones
await sql.begin(async (sql) => {
  await sql`INSERT INTO logs (message) VALUES (${'Started'})`;
  await sql`UPDATE users SET status = 'active'`;
});

5. Lock file basado en texto

bun.lock ha cambiado de formato binario a formato de texto. Ahora es más fácil ver los diffs.

Comparación de rendimiento

BenchmarkNode.js 22Deno 2.0Bun 1.2
Tiempo de inicio~35ms~25ms~7ms
Servidor HTTP (req/s)~80,000~100,000~150,000
npm install (limpio)~15sN/A~3s
Lectura de archivos1.0x1.2x2.5x

Por qué es rápido: Bun utiliza el motor JavaScriptCore (el mismo que Safari) y está optimizado en el lenguaje Zig. Además, el gestor de paquetes aprovecha la caché global para minimizar las operaciones de I/O.

Mejoras en herramientas de desarrollo

Mejoras en bun test

// Archivo de test (app.test.ts)
import { describe, it, expect, mock } from "bun:test";

describe("Math operations", () => {
  it("should add numbers correctly", () => {
    expect(1 + 2).toBe(3);
  });

  it("should mock functions", () => {
    const fn = mock(() => 42);
    expect(fn()).toBe(42);
    expect(fn).toHaveBeenCalledTimes(1);
  });
});

// Ejecución
// bun test            # Todos los tests
// bun test --watch    # Modo vigilancia
// bun test --coverage # Con cobertura

Estado de compatibilidad con frameworks

FrameworkEstadoNotas
ElysiaTotalmente compatibleExclusivo de Bun, el más rápido
HonoTotalmente compatibleMulti-runtime
ExpressTotalmente compatibleFunciona por compatibilidad
FastifyTotalmente compatibleCompatible oficialmente desde v5
Next.jsExperimentalAlgunas funciones limitadas
NuxtCompatiblePreset de Nitro

Ejemplo con Elysia

import { Elysia } from 'elysia';

const app = new Elysia()
  .get('/', () => 'Hello Bun!')
  .get('/user/:id', ({ params: { id } }) => {
    return { id, name: 'User ' + id };
  })
  .post('/json', ({ body }) => body)
  .listen(3000);

console.log(`Running at ${app.server?.hostname}:${app.server?.port}`);

Consejos de migración

Migración desde Node.js

# 1. package.json funciona tal cual
bun install

# 2. Ejecución de scripts
bun run dev          # scripts de package.json
bun run src/index.ts # Ejecución directa

# 3. Variables de entorno
# Los archivos .env se cargan automáticamente

# 4. La verificación de tipos requiere un paso separado
bun x tsc --noEmit

Consideraciones

  • Algunos módulos nativos (node-gyp) pueden no funcionar
  • Next.js App Router no es completamente compatible
  • Evaluar caso por caso para adopción en producción

Resumen

Bun 1.2 es un lanzamiento con mejoras significativas en utilidad práctica. Puntos principales:

  • Compatibilidad completa con Windows: Desarrollo multiplataforma más fácil
  • Compatibilidad del 92% con Node.js: La mayoría de los paquetes npm funcionan
  • Funciones integradas: Reduce dependencias externas como S3 y Postgres
  • Velocidad abrumadora: Inicio, ejecución y gestión de paquetes, todo es rápido

Vale la pena considerar activamente Bun para nuevos proyectos o casos de uso donde el rendimiento es importante.

← Volver a la lista