Editor de Word (.docx) en el navegador: Rust + WebAssembly + Canvas. Sin servidor.
See the codeEditor 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 install @dimarborda/docx-editor
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.
Enter para dividir y Backspace para unir párrafos, edición dentro de celdas de tabla, deshacer y rehacer.{{CAMPO}} aunque Word lo haya partido en varios fragmentos (<w:r>) y lo reemplaza respetando el formato.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..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ódulo | Responsabilidad |
|---|---|
src/lib.rs | API WebAssembly (DocxSession) |
src/docx_parser.rs | Lectura del ZIP y del OpenXML, historial de cambios, cachés |
src/styles.rs | Cascada de estilos, numeración y bordes de tabla |
src/layout_engine.rs | Corte de líneas, paginación, tablas e imágenes |
src/caret.rs | Hit-testing, posición del cursor y rectángulos de selección |
src/paragraph_edit.rs | Ediciones de texto, división y unión de párrafos sin pérdidas |
src/sample_generator.rs | Documento 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.
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.
Todavía no se soportan, o solo en parte:
gridSpan, vMerge).Si un documento tuyo se ve distinto que en Word, abre un issue con una captura (sin datos personales).
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.
cargo testnpm run build (sale en apps/demo/dist/)http://localhost:5173/embed.html.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.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
| Atajo | Acción |
|---|---|
| Clic / arrastrar | Colocar el cursor / seleccionar |
Shift + flechas | Ampliar la selección |
Inicio / Fin | Ir al inicio o al final de la línea |
⌘A / Ctrl+A | Seleccionar todo |
⌘Z / Ctrl+Z | Deshacer |
⌘⇧Z / Ctrl+Y | Rehacer |
⌘B ⌘I ⌘U | Negrita, cursiva, subrayado |
⌘F / Ctrl+F | Buscar y reemplazar |
⌘S / Ctrl+S | Descargar el .docx |
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.
Desarrollado por Dimar Borda
Editor de Word (.docx) en el navegador: Rust + WebAssembly + Canvas. Sin servidor.
See the codeEditor 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 install @dimarborda/docx-editor
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.
Enter para dividir y Backspace para unir párrafos, edición dentro de celdas de tabla, deshacer y rehacer.{{CAMPO}} aunque Word lo haya partido en varios fragmentos (<w:r>) y lo reemplaza respetando el formato.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..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ódulo | Responsabilidad |
|---|---|
src/lib.rs | API WebAssembly (DocxSession) |
src/docx_parser.rs | Lectura del ZIP y del OpenXML, historial de cambios, cachés |
src/styles.rs | Cascada de estilos, numeración y bordes de tabla |
src/layout_engine.rs | Corte de líneas, paginación, tablas e imágenes |
src/caret.rs | Hit-testing, posición del cursor y rectángulos de selección |
src/paragraph_edit.rs | Ediciones de texto, división y unión de párrafos sin pérdidas |
src/sample_generator.rs | Documento 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.
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.
Todavía no se soportan, o solo en parte:
gridSpan, vMerge).Si un documento tuyo se ve distinto que en Word, abre un issue con una captura (sin datos personales).
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.
cargo testnpm run build (sale en apps/demo/dist/)http://localhost:5173/embed.html.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.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
| Atajo | Acción |
|---|---|
| Clic / arrastrar | Colocar el cursor / seleccionar |
Shift + flechas | Ampliar la selección |
Inicio / Fin | Ir al inicio o al final de la línea |
⌘A / Ctrl+A | Seleccionar todo |
⌘Z / Ctrl+Z | Deshacer |
⌘⇧Z / Ctrl+Y | Rehacer |
⌘B ⌘I ⌘U | Negrita, cursiva, subrayado |
⌘F / Ctrl+F | Buscar y reemplazar |
⌘S / Ctrl+S | Descargar el .docx |
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.
Desarrollado por Dimar Borda