dimarborda/rust-web-docx

Editor de Word (.docx) en el navegador: Rust + WebAssembly + Canvas. Sin servidor.

Rust

1

13 commits

updated Oct 7, 2026

See the code

See what people are saying

SourceMessageScoreDate

Editor in Rust + WASM that lays out pages like Word and renders to canvas (r/rust)

It is a Word editor that runs entirely in the browser: it uses no server, and the document never leaves your machine. Rust handles all the heavy lifting, while JS manages only data input and canvas rendering. How it is built: * `quick-xml` streaming parser + `zip` for the OpenXML package * Style…

0

Oct 7, 2026

README

Rust DOCX

Editor de documentos Word (.docx) que corre 100% en el navegador, escrito en Rust y compilado a WebAssembly.

Abre un .docx, edítalo directamente sobre la página, rellena variables de plantilla {{...}} y descárgalo de nuevo. Ningún archivo sale de tu equipo: no hay servidor.

npm Licencia MIT

▶ Probar la demo · 📦 npm install @dimarborda/docx-editor

Edición directa de un contrato y reemplazo de variables de plantilla en Rust DOCX

Estado: laboratorio. Es un prototipo para edición de plantillas con alta fidelidad a Word, no un reemplazo completo de Word. Mira las limitaciones conocidas.


Qué hace

  • Edición directa sobre la página. Cursor propio dibujado en canvas, selección con ratón y teclado entre párrafos, Enter para dividir y Backspace para unir párrafos, edición dentro de celdas de tabla, deshacer y rehacer.
  • Ediciones sin pérdidas. Solo se reescriben los fragmentos XML que cambiaste; estilos, temas, relaciones, imágenes y secciones del archivo original quedan intactos.
  • Variables de plantilla. Detecta {{CAMPO}} aunque Word lo haya partido en varios fragmentos (<w:r>) y lo reemplaza respetando el formato.
  • Maquetación parecida a Word. Cascada de estilos docDefaults → styles.xml → numbering.xml → formato directo, medición real de fuentes, paginación, sangrías, interlineado, listas numeradas, tablas con bordes resueltos por lado e imágenes ancladas.
  • Valores por defecto de Word. Lo que el documento no especifica se dibuja como lo haría Word (Times New Roman 10 pt, sin bordes inventados), en lugar de "mejorarlo".
  • Buscar y reemplazar con mayúsculas/minúsculas y expresiones regulares.
  • Privado por diseño. Lectura del ZIP, análisis XML, maquetación, edición y reempaquetado ocurren en la memoria del navegador.

Cómo funciona

.docx ──► Rust/WASM: zip + quick-xml ──► modelo de documento ──► motor de maquetación ──► comandos de dibujo ──► Canvas 2D
              ▲                                                                                                  │
              └───────────── ediciones sin pérdidas del XML ◄── cursor, selección y teclado (JS) ◄────────────────┘
MóduloResponsabilidad
src/lib.rsAPI WebAssembly (DocxSession)
src/docx_parser.rsLectura del ZIP y del OpenXML, historial de cambios, cachés
src/styles.rsCascada de estilos, numeración y bordes de tabla
src/layout_engine.rsCorte de líneas, paginación, tablas e imágenes
src/caret.rsHit-testing, posición del cursor y rectángulos de selección
src/paragraph_edit.rsEdiciones de texto, división y unión de párrafos sin pérdidas
src/sample_generator.rsDocumento de demostración generado en memoria
packages/docx-editor/Paquete npm reutilizable: DocxEditor, <docx-editor> y barra de herramientas opcional
apps/demo/La demo publicada, construida sobre el paquete

Solo se vuelven a maquetar y dibujar las páginas que cambian, y las medidas de texto se guardan en caché, así que escribir sigue siendo fluido en documentos largos.

Usarlo en tus proyectos

El editor está publicado en npm como @dimarborda/docx-editor: un web component que funciona en cualquier frontend y dentro de apps Tauri.

npm install @dimarborda/docx-editor
<docx-toolbar for="doc"></docx-toolbar>
<docx-editor id="doc" src="/plantilla.docx" style="height: 80vh"></docx-editor>
<script type="module">
  import '@dimarborda/docx-editor';
  import '@dimarborda/docx-editor/style.css';
</script>

La API completa, los ejemplos con React y Tauri y las opciones de fuentes están en el README del paquete. Un ejemplo mínimo de integración está en apps/demo/embed.html.

Limitaciones conocidas

Todavía no se soportan, o solo en parte:

  • Texto de encabezados y pies de página (las imágenes sí se muestran).
  • Celdas combinadas (gridSpan, vMerge).
  • Cuadros de texto, formas y ecuaciones.
  • Comentarios, control de cambios y notas al pie (se conservan en el archivo, pero no se dibujan).
  • Varias columnas por sección.

Si un documento tuyo se ve distinto que en Word, abre un issue con una captura (sin datos personales).

Desarrollo local

Requisitos: Rust con el target wasm32-unknown-unknown, wasm-pack y Node.js 20 o superior.

git clone https://github.com/dimarborda/rust-web-docx.git
cd rust-web-docx
npm install
npm run build:wasm
npm run dev

Abre http://localhost:5173. Si cambias código en src/, vuelve a ejecutar npm run build:wasm.

  • Pruebas: cargo test
  • Compilación de producción: npm run build (sale en apps/demo/dist/)
  • Ejemplo de integración: http://localhost:5173/embed.html
  • Documentos propios: copia tus .docx en examples/ y aparecerán en la pantalla de inicio. Esa carpeta está ignorada por git, para que tus documentos nunca terminen en el repositorio.

Despliegue

El sitio es estático y se publica en Cloudflare Workers. Cada push a master ejecuta las pruebas, compila y despliega con GitHub Actions. Para desplegar a mano:

npm run deploy

Atajos de teclado

AtajoAcción
Clic / arrastrarColocar el cursor / seleccionar
Shift + flechasAmpliar la selección
Inicio / FinIr al inicio o al final de la línea
⌘A / Ctrl+ASeleccionar todo
⌘Z / Ctrl+ZDeshacer
⌘⇧Z / Ctrl+YRehacer
⌘B ⌘I ⌘UNegrita, cursiva, subrayado
⌘F / Ctrl+FBuscar y reemplazar
⌘S / Ctrl+SDescargar el .docx

English

Rust DOCX is a Word (.docx) editor that runs entirely in the browser: a Rust core compiled to WebAssembly parses the OpenXML, lays out pages the way Word does (style cascade, real font metrics, pagination, tables, anchored images) and renders them to a 2D canvas with its own caret and selection. Edits are lossless: only the XML you touched is rewritten. Template placeholders like {{FIELD}} are replaced even when Word splits them across runs. No server is involved, so documents never leave your machine.

Try the live demo. It is a lab prototype; see the known limitations above.


Autor

Código QR de Dimar Borda

Desarrollado por Dimar Borda

Licencia

MIT

canvas
document-editor
docx
openxml
rust
wasm
webassembly
word

dimarborda/rust-web-docx

Editor de Word (.docx) en el navegador: Rust + WebAssembly + Canvas. Sin servidor.

Rust

1

13 commits

updated Oct 7, 2026

See the code

See what people are saying

SourceMessageScoreDate

Editor in Rust + WASM that lays out pages like Word and renders to canvas (r/rust)

It is a Word editor that runs entirely in the browser: it uses no server, and the document never leaves your machine. Rust handles all the heavy lifting, while JS manages only data input and canvas rendering. How it is built: * `quick-xml` streaming parser + `zip` for the OpenXML package * Style…

0

Oct 7, 2026

README

Rust DOCX

Editor de documentos Word (.docx) que corre 100% en el navegador, escrito en Rust y compilado a WebAssembly.

Abre un .docx, edítalo directamente sobre la página, rellena variables de plantilla {{...}} y descárgalo de nuevo. Ningún archivo sale de tu equipo: no hay servidor.

npm Licencia MIT

▶ Probar la demo · 📦 npm install @dimarborda/docx-editor

Edición directa de un contrato y reemplazo de variables de plantilla en Rust DOCX

Estado: laboratorio. Es un prototipo para edición de plantillas con alta fidelidad a Word, no un reemplazo completo de Word. Mira las limitaciones conocidas.


Qué hace

  • Edición directa sobre la página. Cursor propio dibujado en canvas, selección con ratón y teclado entre párrafos, Enter para dividir y Backspace para unir párrafos, edición dentro de celdas de tabla, deshacer y rehacer.
  • Ediciones sin pérdidas. Solo se reescriben los fragmentos XML que cambiaste; estilos, temas, relaciones, imágenes y secciones del archivo original quedan intactos.
  • Variables de plantilla. Detecta {{CAMPO}} aunque Word lo haya partido en varios fragmentos (<w:r>) y lo reemplaza respetando el formato.
  • Maquetación parecida a Word. Cascada de estilos docDefaults → styles.xml → numbering.xml → formato directo, medición real de fuentes, paginación, sangrías, interlineado, listas numeradas, tablas con bordes resueltos por lado e imágenes ancladas.
  • Valores por defecto de Word. Lo que el documento no especifica se dibuja como lo haría Word (Times New Roman 10 pt, sin bordes inventados), en lugar de "mejorarlo".
  • Buscar y reemplazar con mayúsculas/minúsculas y expresiones regulares.
  • Privado por diseño. Lectura del ZIP, análisis XML, maquetación, edición y reempaquetado ocurren en la memoria del navegador.

Cómo funciona

.docx ──► Rust/WASM: zip + quick-xml ──► modelo de documento ──► motor de maquetación ──► comandos de dibujo ──► Canvas 2D
              ▲                                                                                                  │
              └───────────── ediciones sin pérdidas del XML ◄── cursor, selección y teclado (JS) ◄────────────────┘
MóduloResponsabilidad
src/lib.rsAPI WebAssembly (DocxSession)
src/docx_parser.rsLectura del ZIP y del OpenXML, historial de cambios, cachés
src/styles.rsCascada de estilos, numeración y bordes de tabla
src/layout_engine.rsCorte de líneas, paginación, tablas e imágenes
src/caret.rsHit-testing, posición del cursor y rectángulos de selección
src/paragraph_edit.rsEdiciones de texto, división y unión de párrafos sin pérdidas
src/sample_generator.rsDocumento de demostración generado en memoria
packages/docx-editor/Paquete npm reutilizable: DocxEditor, <docx-editor> y barra de herramientas opcional
apps/demo/La demo publicada, construida sobre el paquete

Solo se vuelven a maquetar y dibujar las páginas que cambian, y las medidas de texto se guardan en caché, así que escribir sigue siendo fluido en documentos largos.

Usarlo en tus proyectos

El editor está publicado en npm como @dimarborda/docx-editor: un web component que funciona en cualquier frontend y dentro de apps Tauri.

npm install @dimarborda/docx-editor
<docx-toolbar for="doc"></docx-toolbar>
<docx-editor id="doc" src="/plantilla.docx" style="height: 80vh"></docx-editor>
<script type="module">
  import '@dimarborda/docx-editor';
  import '@dimarborda/docx-editor/style.css';
</script>

La API completa, los ejemplos con React y Tauri y las opciones de fuentes están en el README del paquete. Un ejemplo mínimo de integración está en apps/demo/embed.html.

Limitaciones conocidas

Todavía no se soportan, o solo en parte:

  • Texto de encabezados y pies de página (las imágenes sí se muestran).
  • Celdas combinadas (gridSpan, vMerge).
  • Cuadros de texto, formas y ecuaciones.
  • Comentarios, control de cambios y notas al pie (se conservan en el archivo, pero no se dibujan).
  • Varias columnas por sección.

Si un documento tuyo se ve distinto que en Word, abre un issue con una captura (sin datos personales).

Desarrollo local

Requisitos: Rust con el target wasm32-unknown-unknown, wasm-pack y Node.js 20 o superior.

git clone https://github.com/dimarborda/rust-web-docx.git
cd rust-web-docx
npm install
npm run build:wasm
npm run dev

Abre http://localhost:5173. Si cambias código en src/, vuelve a ejecutar npm run build:wasm.

  • Pruebas: cargo test
  • Compilación de producción: npm run build (sale en apps/demo/dist/)
  • Ejemplo de integración: http://localhost:5173/embed.html
  • Documentos propios: copia tus .docx en examples/ y aparecerán en la pantalla de inicio. Esa carpeta está ignorada por git, para que tus documentos nunca terminen en el repositorio.

Despliegue

El sitio es estático y se publica en Cloudflare Workers. Cada push a master ejecuta las pruebas, compila y despliega con GitHub Actions. Para desplegar a mano:

npm run deploy

Atajos de teclado

AtajoAcción
Clic / arrastrarColocar el cursor / seleccionar
Shift + flechasAmpliar la selección
Inicio / FinIr al inicio o al final de la línea
⌘A / Ctrl+ASeleccionar todo
⌘Z / Ctrl+ZDeshacer
⌘⇧Z / Ctrl+YRehacer
⌘B ⌘I ⌘UNegrita, cursiva, subrayado
⌘F / Ctrl+FBuscar y reemplazar
⌘S / Ctrl+SDescargar el .docx

English

Rust DOCX is a Word (.docx) editor that runs entirely in the browser: a Rust core compiled to WebAssembly parses the OpenXML, lays out pages the way Word does (style cascade, real font metrics, pagination, tables, anchored images) and renders them to a 2D canvas with its own caret and selection. Edits are lossless: only the XML you touched is rewritten. Template placeholders like {{FIELD}} are replaced even when Word splits them across runs. No server is involved, so documents never leave your machine.

Try the live demo. It is a lab prototype; see the known limitations above.


Autor

Código QR de Dimar Borda

Desarrollado por Dimar Borda

Licencia

MIT

canvas
document-editor
docx
openxml
rust
wasm
webassembly
word