Harto de visores de Markdown inflados o de pago, hice el mío: nativo, 9 MB, gratis y open source, con IA, en una tarde
Los visores de Markdown que encontraba para Mac eran inflados, de pago o por suscripción, y mediocres. Construí MdViewer: un visor nativo de solo lectura para macOS, de 9,1 MB, gratis y open source. Lo hice en una tarde, en pareja con Claude Code.
Leo Markdown todo el día. READMEs, specs, notas, documentación de proyectos. Y cada vez que quería simplemente abrir un .md en el Mac y leerlo bien renderizado, acababa en el mismo sitio: apps infladas, con paywall o suscripción para algo tan trivial como mostrar un archivo de texto con formato, y encima mediocres. En mi opinión, una porquería.
No pedía un editor. No pedía sincronización en la nube ni una IA que me resuma el README. Pedía un visor. Que abra rápido, que se vea bien y que no me cobre todos los meses.
Así que me hice el mío: MdViewer. Nativo, 9,1 MB instalado, gratis y open source. Y lo construí en una tarde, en pareja con IA.

Qué hace
Es un visor de Markdown de solo lectura para macOS 15 o superior, universal (Apple silicon e Intel). Lo que trae:
- Renderizado estilo GitHub: tablas, listas de tareas, tachado y resaltado de sintaxis.
- Outline en la barra lateral con scroll-spy, para saltar entre secciones de documentos largos.
- Recarga en vivo cuando el archivo cambia, incluso con editores como vim o VS Code que guardan de forma atómica. Y mantiene la posición del scroll.
- Buscar con ⌘F.
- Matemáticas con KaTeX y diagramas Mermaid.
- 4 temas (GitHub, Sepia, Academic y High Contrast), en claro y oscuro.
- Zoom, exportación a PDF e impresión.
- Extensión de Quick Look: apretás Espacio en el Finder y ves la vista previa renderizada, con fórmulas y diagramas incluidos.
- Funciona 100% offline. Todo va empaquetado dentro de la app.

Cómo lo construí con IA
Todo salió en una sola tarde, trabajando con Claude Code. Pero no fue "escribí un prompt y salió una app". El flujo fue bastante más ordenado que eso.
Primero, la IA investigó opciones y me propuso un plan en cuatro fases:
- MVP: abrir un archivo y renderizarlo bien.
- Comodidad de lectura: outline, recarga en vivo y búsqueda.
- Contenido rico: PDF, matemáticas, diagramas y temas.
- Integración con macOS: Quick Look y release.
Yo tomaba las decisiones; la IA implementaba cada fase. Por ejemplo, para el renderizado me planteó tres enfoques distintos, con sus pros y contras, y elegí yo. Ese reparto funciona: la IA es muy buena explorando el espacio de soluciones, pero la dirección del producto tiene que tener dueño.
Lo que más me sorprendió fue la verificación. Al cerrar cada fase, la IA compilaba, corría los tests y sacaba capturas de pantalla de la app en ejecución para comprobar que lo que decía que funcionaba, funcionaba de verdad. Hasta el icono de la app lo generó programáticamente, con un script de CoreGraphics.
Dónde tuve que meterme yo: algunas interacciones de la interfaz había que probarlas a mano, porque no todo se valida con una captura. Y hay cosas que no dependen del código: la app no está notarizada, porque eso requiere una cuenta de Apple Developer de pago.
Mi conclusión es la misma de siempre: la IA acelera muchísimo, pero decidir qué construir y responder por el resultado sigue siendo trabajo mío.
La parte técnica, corta
- Swift 6.4 con concurrencia estricta, SwiftUI (
DocumentGroupyNavigationSplitView) y swift-markdown con un visitor propio que genera el HTML. - Arquitectura hexagonal (Domain, Application, Ports, Adapters y UI), con vistas container/presentational. Un framework compartido,
MdViewerCore, lo usan tanto la app como la extensión de Quick Look. - 57 tests con Swift Testing y el proyecto generado con XcodeGen.
La decisión que más me importaba: WebKit solo renderiza el documento. WKWebView pinta el contenido del Markdown, y todo lo demás (ventanas, barra lateral, menús, temas) es SwiftUI nativo. Así la app se siente de Mac, y no una web metida en una ventana.
Y un gotcha que conviene conocer si alguna vez hacés una extensión de Quick Look: dentro de su sandbox, WKWebView renderiza en blanco si la extensión no tiene el entitlement com.apple.security.network.client. Aunque todo el contenido sea local, WebKit lo necesita igual. Sin él, la vista previa sale vacía.
Cómo instalarlo
No está en la Mac App Store: se distribuye por GitHub Releases.
- Descargá el
.zipde la release v0.1.0. - Mové
MdViewer.appa/Applications. - Como no está notarizada, quitale la cuarentena desde la terminal:
xattr -dr com.apple.quarantine /Applications/MdViewer.app
Y listo. Abrí cualquier .md o apretá Espacio sobre uno en el Finder.
Links
- Repo: github.com/unaivv/mdViewer
- Release: v0.1.0
Si también estás harto de pagar por leer un README, probalo. Y si encontrás un bug o te falta algo, los issues están abiertos.