Notas técnicas
Cómo funciona reader.me
Ningún PDF que abras sale de tu máquina. Esta página explica cómo es posible arquitectónicamente, qué hace cada pieza, y cómo puedes verificar la promesa tú mismo en 30 segundos.
La versión corta
Los navegadores modernos llevan un runtime casi completo: motor JavaScript JIT, WebAssembly, canvas 2D, criptografía, APIs de ficheros y almacenamiento persistente. Suficiente para hacer todo lo que hace un editor PDF de escritorio — sin enviar el fichero a ningún sitio.
reader.me son unos 4 MB de JavaScript y WebAssembly que pegan cuatro librerías open-source en las 20 tools que ves. El PDF que sueltas en el navegador se lee desde el handle File local a un Uint8Array, se manipula en memoria, y el resultado se ofrece como descarga via URL.createObjectURL. En ningún momento hay una petición de red con tu documento.
Qué pasa cuando sueltas un PDF
- El navegador pasa el fichero directo a JavaScript. La API drag-and-drop nos da un objeto
Fileapuntando a los bytes ya en disco — no hay upload para llegar a nuestro código. - Leemos los bytes a un typed array.
await file.arrayBuffer()nos da los bytes crudos. Todo a partir de aquí opera sobre eseUint8Array. - La librería adecuada hace el trabajo. Cada tool conecta este array a uno de cuatro motores: pdf-lib (manipulación estructural pura JS), PDF.js (renderizado), Tesseract.js (OCR via WebAssembly), y Comlink Workers para ficheros mayores de 20 MB.
- El resultado se convierte en descarga. El
Uint8Arrayde salida se envuelve en unBlob, se crea una URL de objeto temporal, y un<a>invisible con atributodownloadse clickea programáticamente. El navegador guarda el fichero en tu carpeta de descargas.
Por qué es privacidad estructural, no solo por política
La mayoría de afirmaciones "sin upload" de los servicios PDF en la nube significan algo más débil: el servidor descarta tu fichero tras unas horas. El fichero sí llegó a sus servidores — solo prometen borrarlo.
En reader.me no hay un "después" que descartar, porque no hay upload de partida. La promesa de privacidad no es una política que aplicamos; es una propiedad del sistema. No puedes violarla por accidente sin reescribir la aplicación.
Esa es la diferencia entre privacidad por política ("no lo guardaremos") y privacidad estructural ("nunca llega aquí").
¿Y la analítica?
Cargamos Google Analytics (diferido, post-LCP) para contar tráfico y Cloudflare Web Analytics para performance. Ninguno ve tus PDFs — solo disparan beacons de pageview con la ruta de URL (ej. /merge-pdf), el locale y el user agent estándar. Sin nombres de fichero, sin contenido, sin identificador per-user en nuestro datalayer.
Los robots están explícitamente permitidos (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, etc.) — no hay datos de documentos para scrapear, solo la misma copia pública que estás leyendo.
Verifícalo tú mismo en 30 segundos
- Abre las DevTools del navegador (
F12en Windows,⌥⌘Ien macOS) y ve a la pestaña Network. - Borra la lista de peticiones. Marca "preserve log" para que sobrevivan a un recargo.
- Suelta un PDF en, por ejemplo, la tool Comprimir. Pulsa "Comprimir PDF".
- Mira el panel Network. Verás peticiones de assets (
pdf.worker.min.mjs, cacheado tras la primera carga) y el beacon de GA, pero ninguna petición llevando tu fichero — sin POST, sin XHR, nada. La descarga llega como URLblob:, que es una pseudo-URL local del navegador.
Una vez lo ves, es igual para todas las tools. La arquitectura no tiene una ruta server-side para los datos del documento ni aunque quisiéramos.
Trade-offs que aceptamos
Hacer todo en el navegador no es gratis. Lista honesta de limitaciones:
- Tope de tamaño. 50 MB por fichero en web. El navegador puede con más pero la memoria móvil es justa; el build desktop Tauri (Fase 4) levantará el límite.
- Sin firmas cualificadas. SES (Firma Electrónica Simple) se puede hacer client-side; QES con certificados FNMT/DNIe requiere APIs de smart-card del SO, también Fase 4.
- Los datos de idioma OCR son grandes. La primera ejecución OCR en un idioma nuevo descarga ~12 MB del CDN público de Tesseract. Cacheado para siempre después.
- PDF/A pierde el texto seleccionable. Rasterizamos cada página para garantizar compliance independientemente de las fuentes del input.
Relacionado
- Modelo de seguridad → — modelo de amenazas, encriptación, política CVE.
- Privacidad → — la versión política, en lenguaje claro.
- vs iLovePDF / Smallpdf → — comparación arquitectónica side-by-side.
reader.me es una idea de David Carrero , construido en Color Vivo Internet S.L.