Repository navigation
Releases
1.0.0-beta.1
1.0.0-beta.1
Añadido
- Tema integrado «Papiro»: papel kraft envejecido con fibras y manchas, la nota como una hoja de bordes rotos y tostados, y tinta sepia con títulos en serif. En oscuro, cuero curtido con letras de pergamino. También en «Papiro Islas».
- Carpetas de temas globales: los
.cssde~/.config/synapsers/themes(que se lee siempre) y de las carpetas extra que agregues en Configuración → Apariencia aparecen como temas en todas las bóvedas, sin recompilar. Las carpetas extra se guardan enappearance.theme_dirsdel nuevo~/.config/synapsers/config.jsonc; se leen al iniciar y con el botón Reescanear. Admiten@nombre,@capay@basecomo los integrados. - Tema integrado «Neón CRT» y temas integrados automáticos: «Neón CRT» es Neón con líneas de barrido tipo monitor viejo en la lectura (en Linux pueden dar lag al desplazarse, por eso «Neón» ya no las trae). Para sumar un tema integrado basta con dejar su
.cssensrc/entities/appearance/themes/, con@nombre,@capao@baseen su comentario inicial. - Actualizador automático (Auto-updater):
- Integración del plugin
tauri-plugin-updaterpara detectar y aplicar actualizaciones firmadas desde GitHub Releases. - Firma digital criptográfica de los paquetes y generación automática del manifiesto
latest.jsonen los flujos de CI/CD para Linux (.tar.gz) y Windows (.zip).
- Integración del plugin
Cambiado
- Una sola carpeta de configuración global,
~/.config/synapsers: el registro de puertos MCP (mcp-ports.json) ya no se escribe también en~/.config/synapse. Esa carpeta ya no se usa y se puede borrar. - Caché de navegación a
postcard:- Reemplazo de la biblioteca desmantenida
bincodeporpostcard(v1.1conuse-std) para la serialización binaria en disco de la caché del motor de navegación (DashMap<NoteId, NoteMeta>), reduciendo huella y garantizando compatibilidad moderna de tipos.
- Reemplazo de la biblioteca desmantenida
- Optimización de compilación:
- Compilación con ThinLTO en modo release y uso del enlazador
llden Linux para acelerar los tiempos de enlazado y empaquetado en CI.
- Compilación con ThinLTO en modo release y uso del enlazador
1.0.0-alpha.5
1.0.0-alpha.5
Añadido
-
Página web de presentación (
docs/index.html): landing estática basada endocs/about.md, con capturas ampliables (visor con zoom a tamaño real y navegación con flechas), comparativa, temas, arquitectura y la mascota (pulpo kawaii) fija en la esquina inferior derecha. -
Temas integrados «Rosa» e «Islas»: «Rosa» en tonos rosa suaves; «Islas» muestra los paneles como islas flotantes con esquinas redondeadas sobre un marco más oscuro, y se combina con los demás en «Papel Islas», «Neón Islas» y «Rosa Islas».
-
Temas integrados «Papel» y «Neón»: vienen con la app y aparecen en Configuración → Apariencia → Tema personalizado sin copiar archivos. Un archivo
.synapse/themes/con el mismo nombre los reemplaza. «Neón» es cyberpunk con fondo de rejilla, paneles translúcidos con desenfoque, títulos con brillo magenta, cian y amarillo, íconos de carpeta propios y desplegables dibujados a mano. Tiene versión oscura y una clara «amanecer». -
Temas: todo el color en variables, zonas públicas y tema de ejemplo: los colores de la interfaz salen de variables CSS (nuevas:
--success,--warning,--danger,--purple,--on-accent,--overlay-bg…), así un tema cambia toda la app. Las zonas principales tienen clases establessynapse-*(barra lateral, filas del explorador, pestañas, editor, lectura, barra de estado, diálogos). Guía endocs/temas.mdy tema de ejemplo «Papel». Algunos tonos cambian levemente al seguir las variables del tema, sobre todo en la pantalla de bienvenida. -
Temas y fragmentos CSS por bóveda: en Configuración → Apariencia se elige un tema de
.synapse/themes/y se activan fragmentos de.synapse/snippets/(archivos.css). Se aplican sin reiniciar y cada bóveda guarda los suyos en.synapse/appearance.json. Los temas pueden cambiar los títulos por nivel en lectura y edición (--h1-font,--h1-size,--h1-weight,--h1-color… hastah6), la fuente del texto de las notas (--font-text) y el ícono de carpeta (--icon-folder,--icon-folder-open). -
Diff de Excalidraw por píxeles: el diff visual de un dibujo tiene el modo «Diferencias», como las imágenes. Las dos versiones se exportan a imagen con el mismo marco y se resaltan en magenta los píxeles que cambiaron.
-
Fondo por defecto en la pestaña vacía: una imagen para el tema claro y otra para el oscuro, incluidas en la app. Se usan mientras no se elija un fondo propio.
-
El fondo propio de la pestaña vacía ahora es de cada bóveda, no general. El que ya estaba elegido pasa a la bóveda abierta.
-
Explorador: expandir y contraer todo: dos botones en la cabecera del explorador. Con el filtro de Git activo solo afectan a las carpetas del filtro; al quitarlo, las demás siguen como estaban.
-
Explorador: archivos borrados: un archivo borrado que Git todavía tiene sigue apareciendo en el árbol, en rojo y tachado; al hacer clic se abre su diff.
-
Filtro de Git completo: con el filtro de Git el explorador muestra todo lo que entraría en un commit (sin seguimiento, modificado, añadido o borrado), aunque sea un tipo de archivo que normalmente no se ve en el explorador.
-
Índice de la nota: al hacer clic en el título de una nota Markdown (o en el botón de índice a su lado) se abre un índice con todos sus títulos y subtítulos, contraído por defecto (solo se ven los de primer nivel), con botones para expandir y contraer todo; al elegir uno, la nota va a ese título. El índice abre desplegado hasta el título donde estás, que aparece resaltado, y tiene arriba una búsqueda rápida de títulos (Enter va al primero que coincide).
-
Ubicación en la nota: junto al título de una nota Markdown, entre paréntesis, se ve la ruta de títulos de la parte que estás viendo (p. ej.
(Inicio › Parte A › Detalle)), que se actualiza al desplazarte; al hacer clic en un tramo se va a ese título. -
De lectura a edición sin perder el sitio: al pasar del modo lectura a un modo de edición, el cursor queda en la primera línea que se estaba viendo en lectura.
-
Breadcrumb: copiar ruta completa: el menú contextual del archivo en el breadcrumb ofrece «Copiar ruta relativa» y «Copiar ruta completa».
Corregido
- Cabeceras alineadas: la línea inferior de la cabecera del explorador ahora coincide con la de la barra de pestañas.
- Bloques de código en lectura: dentro de un bloque de código aparecía una línea horizontal bajo cada línea de texto (heredaba el borde del código en línea).
- Commit con archivos borrados: hacer commit de un archivo borrado cuyo borrado ya estaba en stage (o de una carpeta borrada entera) fallaba con «git add falló: … no concordó con ningún archivo».
1.0.0-alpha.4
1.0.0-alpha.4
Añadido
- Panel de configuración: el botón de engranaje del ribbon abre un panel para cambiar el tema, el idioma, el tamaño del texto, el fondo de la pestaña vacía, el modo Vim, las propiedades de la nota, los visores de Mermaid y Excalidraw, el servidor de PlantUML y todos los atajos de teclado. Los atajos se guardan en
shortcuts.jsoncsin perder sus comentarios. - Pestaña vacía con buscador y fondo: la pestaña vacía muestra arriba el buscador de
Ctrl+O, con el foco puesto para empezar a escribir, y permite elegir una imagen de fondo con «Cambiar fondo». - Abreviatura
hs:paraheadings:en la búsqueda de contenido, y la guía de búsqueda ahora explica este filtro. hs:yheadings:también funcionan en Quick Open (Ctrl+O): buscan en los encabezados sin tener que escribir?delante.- Al filtrar por
headings:ohs:, el resultado muestra el encabezado encontrado con formato de título y, en la línea siguiente, el texto que le sigue. El índice se reconstruye solo la primera vez que se abre la bóveda tras actualizar. - MCP:
write_noteinforma de lo que hizo: la respuesta indica concreatedsi la nota se creó o se sobrescribió, y añadewarningsi su carpeta no existía. - MCP:
write_noteya no pisa notas sin permiso (cambio incompatible): para reemplazar una nota existente hay que enviarexpected_hashuoverwrite: true; si no, falla y explica cómo seguir. También falla si se envíaexpected_hashy la nota no existe. - Tamaño del texto en el editor y la previsualización:
Ctrl+rueda,Ctrl++yCtrl+-lo cambian, yCtrl+0lo restablece. Los atajos se configuran enshortcuts.jsonc(zoom_in,zoom_out,zoom_reset) y admiten varias combinaciones separadas por comas. - Comparar dos archivos desde VaultExplorer: al seleccionar exactamente dos archivos, el menú contextual ofrece «Comparar archivos» y abre un diff entre ellos, sin necesidad de git. Solo admite archivos de texto.
- La búsqueda en el contenido indexa los títulos y subtítulos de las notas Markdown y les da más peso que al resto del texto: una nota con el término en un encabezado sale antes que una que solo lo menciona en un párrafo. También se puede filtrar con
headings:término. El índice se reconstruye solo la primera vez que se abre la bóveda tras actualizar. - Filtro
kind:en Quick Open (Ctrl+O):kind:pdf informebusca solo entre los PDF;kind:markdown,word,excel,code,image,mermaidyexcalidrawfuncionan igual, basta con escribir el comienzo (kind:pd). Solokind:pdflista todos los PDF. - Los enlaces
[[nota#Título]]llevan al encabezado, como en Obsidian: al pulsarlos (en el editor y en modo lectura) se abre la nota y se va a ese título o subtítulo, no a la primera vez que aparece el texto. Con[[nota#Título#Subtítulo]]vale el último. ![[nota#Título]]incrusta esa sección en el modo lectura: muestra el título y todo lo que le pertenece, hasta el siguiente encabezado del mismo nivel o superior (los subtítulos de nivel inferior van incluidos). También se expanden los embeds dentro de lo incrustado, hasta 3 niveles y sin repetir ciclos. Si la nota o el título no existen, queda como enlace a la nota (antes se mostraba una imagen rota). En el editor sigue siendo un enlace al encabezado. Las imágenes y demás recursos con![[...]]no cambian.- Atajo
Shift+F6en VaultExplorer para renombrar: permite renombrar el archivo o carpeta seleccionado cuando el explorador de archivos tiene el foco.
Corregido
-
La búsqueda en el contenido ya no pierde resultados cuando la última palabra es completa y su raíz es más corta, como «para» en
hs:Prompts para. -
Taben los editores de código y Markdown inserta 4 espacios en vez de sacar el foco del editor; con texto seleccionado sangra las líneas, yShift+Tabquita la sangría. Con Vim, solo en modo inserción. -
La búsqueda en modo lectura ya no congela la app al escribir en notas grandes: se busca una sola vez al dejar de escribir, y limpiar los resaltados es mucho más rápido.
-
Ctrl+Shift+Fabre la búsqueda en el contenido también con una nota abierta; antes abría la búsqueda dentro de la nota. -
Ctrl+Ren un editor abre buscar y reemplazar con el foco en el campo de reemplazo. Con Vim sigue siendo rehacer, salvo con el foco en el panel de búsqueda. Fuera del editor sigue recargando. -
Las propiedades de la nota reconocen listas en línea como
tags: [uno, dos, tres]. -
Shift+F6en CodeMirror solo se activa si tiene el foco, evitando capturar la combinación o seleccionar ocurrencias cuando el editor no está enfocado. -
Los mensajes de error del editor de código ya no quedan cortados o tapados por la barra superior, por ejemplo en un error de la primera línea de un diagrama.
-
Ctrl+Ren un editor con Vim rehace (como en Vim) en vez de recargar el archivo; fuera de Vim sigue recargando. -
El render de D2 y Mermaid ya no se atrasa al editar: antes cada tecla lanzaba un render y, con un layout lento como TALA (~3 s por render), se encolaban y el diagrama tardaba decenas de segundos en ponerse al día. Ahora se espera a que se deje de escribir (más tiempo si el render es lento) y nunca hay más de uno pendiente.
-
Render de D2 y Mermaid al editar: ya no se lanza un render por tecla (con TALA se acumulaban y el diagrama llegaba muy tarde); se espera una pausa al escribir y nunca hay más de un render en cola.
Ctrl+Enterfuerza el redibujado y la barra de estado muestra el render en curso y lo que tardó. -
El editor de diagramas (D2/Mermaid) recupera el foco y el cursor al volver a su pestaña, y una recarga del archivo desde disco ya no recrea el editor ni manda el cursor al inicio: solo se aplica el tramo que cambió.
-
Búsqueda de Vim (
/) y cursor invisibles en el tema oscuro del editor de código. -
Una segunda instancia de la app ya no reescribe el puerto MCP de la bóveda ni la marca como detenida.
-
Título editable de la nota: se guardaba sobre una propiedad no reactiva.
-
Quick Open: separadores coherentes y orden estable en los empates.
-
Persistencia del estado de MCP al cerrar y abrir workspaces:
- Se desacopló el ciclo de vida del runtime y socket TCP efímero (
running) de la preferencia configurada por el usuario en la bóveda (enabled). - Al cerrar la aplicación, ventana o alternar entre bóvedas, el servidor MCP detiene su proceso/socket sin sobrescribir ni apagar
enabled: falseen.synapse/mcp.json. - Al abrir un workspace donde MCP estaba activo, el servidor se reactiva automáticamente.
- Se introdujo el trait de dominio
McpConfigRepositoryy su implementación de infraestructuraFileMcpConfigRepositorysiguiendo la Arquitectura Cebolla.
- Se desacopló el ciclo de vida del runtime y socket TCP efímero (
Cambiado
F2alterna entre edición y lectura (antesCtrl+E).- En el editor,
Ctrl+EyCtrl+Ydesplazan la pantalla una línea yCtrl+Dduplica la línea, también con Vim (en Vim,Ctrl+Ddeja de ser media página). - Rendimiento:
- Arranque más rápido: las pestañas se montan al activarse, el explorador ya no usa un árbol de respaldo y los comandos de lectura salen del hilo principal (bloqueo de JS al arrancar de ~1250 a ~750 ms).
- El backend devuelve al sistema la memoria liberada tras abrir la bóveda (de ~800 a ~400 MB).
- Explorador virtualizado: solo se pintan las filas visibles.
- Imágenes servidas con el protocolo de assets de Tauri en vez de base64 por IPC.
- Una sola lista de la bóveda en el frontend, sin avalancha de IPC al abrir.
- Búsqueda de texto completo: consultar las versiones indexadas ya no carga cada documento (19 ms → 3 ms con 3 740 documentos).
Añadido
-
Soporte para PlantUML (
.puml,.plantuml): editor con resaltado y autocompletado, vista previa, errores marcados en su línea,Ctrl+Enterpara redibujar, creación desde el explorador y la paleta, y exportación a PNG/SVG. El render lo hace un servidor PlantUML (por defectoplantuml.com, por lo que el código del diagrama sale de tu máquina); se cambia con el comando «PlantUML: cambiar servidor». El SVG recibido se limpia antes de mostrarlo. -
Ctrl+Enteren el editor de D2 y Mermaid fuerza el redibujado del diagrama. -
Estado del render de diagramas en la barra de estado: «Renderizando D2… 1,2 s» mientras dura y el tiempo que tardó al terminar.
-
Autocompletado con las palabras del documento en todos los editores (markdown, D2 y Mermaid): los nombres que ya usas (variables, nodos…) se sugieren aunque el lenguaje no los conozca, detrás de las sugerencias del lenguaje.
-
Exportar diagramas a PNG y SVG desde el menú contextual del explorador, para Excalidraw, Mermaid y D2. El archivo se guarda junto al diagrama con el tema actual.
-
Shift+F6cambia todas las coincidencias de una palabra (como renombrar en JetBrains, pero textual): selecciona las coincidencias exactas de palabra completa y lo que se escribe las cambia todas. Con Vim, se cambian conc. -
Plegado entre llaves en D2 y Mermaid, desde el margen del editor de código.
-
Atajos de plegado de Vim con el comportamiento de Vim:
zc,zo,za,zC,zO,zMyzR.zcpliega el bloque que contiene al cursor yzMpliega todos los niveles. -
Copiar la ruta de la bóveda desde el menú contextual del explorador; copiar ruta se desactiva si no hay archivos seleccionados.
-
Compatibilidad con la API de Obsidian para plugins:
- La fachada responde de forma síncrona como en Obsidian:
getAbstractFileByPath,getActiveFileymetadataCache.getFileCache. SynapseVaultmantiene un índice ruta → metadatos (sin contenido) que se actualiza con las mutaciones locales y los eventos del vigilante. Los plugins se cargan cuando el índice está listo.- Lo específico de Excalidraw pasa a
integrations/excalidraw.
- La fachada responde de forma síncrona como en Obsidian:
-
**Filtro "Solo co...
1.0.0-alpha.3
1.0.0-alpha.3
Añadido
-
Deshacer y rehacer en el editor:
Ctrl+Zpara deshacer yCtrl+Shift+ZoCtrl+Ypara rehacer.- Atajos de vim:
upara deshacer,Ctrl+Rpara rehacer yUpara revertir la última línea editada. - Módulo reutilizable
shared/lib/editor-history.
-
Comentar/descomentar líneas con
Ctrl+/(Cmd+/en macOS):- Nuevo módulo
shared/lib/editor-comment, disponible en el editor de Markdown y en el editor de código de diagramas. - Usa los tokens de comentario del lenguaje:
#para D2,%%para Mermaid y<!-- -->para Markdown.
- Nuevo módulo
-
Deshacer de línea (
U) en el editor:- Nuevo módulo
shared/lib/editor-historyque replica elUde vim: revierte los cambios de la última línea editada, y vuelve a aplicarlos si se repite. - Disponible en el editor de Markdown y en el editor de código de diagramas.
- Nuevo módulo
-
Versión de compilación derivada de Git:
- Nuevo módulo
version.rsque compone la versión SemVer a partir degit describe(por ejemplo1.0.0-alpha.2+4.g09ab330), y añade la marca de tiempo si el árbol está sucio. build.rsemite la información convergen. El comandoget_app_versiony la opción--versionusan esta versión en lugar depackage_info().
- Nuevo módulo
-
Guardado de cambios pendientes antes de operaciones sobre archivos:
- Nuevo puente
shared/lib/pending-writes: el explorador, el breadcrumb y el menú de Git persisten el buffer del editor antes de renombrar o hacergit add. - Con esto, renombrar o añadir al stage un archivo abierto ya no opera sobre una versión desactualizada en disco.
- Nuevo puente
-
Panel de código redimensionable en diagramas D2 y Mermaid:
- Nueva barra
SplitResizerentre el código y el visor del diagrama. - La proporción elegida se recuerda por archivo durante la sesión, en memoria del backend (comandos
get_diagram_split_ratioyset_diagram_split_ratio). No se persiste a disco.
- Nueva barra
-
Renombrado de archivos versionados en Git:
- Si el archivo está en el índice, el renombrado se prepara en el índice (
git addde la ruta antigua y la nueva), de modo que Git lo detecta como renombrado. - Nuevo método
GitService::is_trackedpara comprobar si una ruta tiene archivos versionados.
- Si el archivo está en el índice, el renombrado se prepara en el índice (
-
Mover archivos y carpetas en el explorador con
Ctrl+XyCtrl+V:- Nuevo comando
move_vault_items: mueve elementos a la carpeta destino, sin sobrescribir ni mover una carpeta dentro de sí misma. - Las pestañas abiertas siguen a sus archivos tras el movimiento, y los archivos versionados quedan preparados en el índice de Git.
- Si un elemento está bloqueado y tiene cambios sin guardar, se pide confirmación antes de moverlo.
- Nuevo comando
-
Panel de atajos de teclado (
F1o el comando "Mostrar atajos de teclado"):- Lista los atajos configurables de
shortcuts.jsoncy los fijos del editor, con búsqueda. - Nuevo componente
Kbdpara mostrar combinaciones, usado también en la paleta de comandos.
- Lista los atajos configurables de
-
Confirmación al renombrar archivos bloqueados: si el archivo bloqueado tiene cambios sin guardar, el diálogo de cambios pendientes ofrece guardar y continuar, o cancelar.
Cambiado
-
Ancho mínimo del panel de código de diagramas: baja de 280 a 160 px.
-
Atajos en la barra lateral: los rótulos del Ribbon muestran solo la combinación principal, mediante
primaryShortcutText. -
Autoguardado al quitar el bloqueo: un archivo con cambios pendientes al desbloquearse se vuelve a guardar automáticamente.
-
Metadatos y edición de Rust:
Cargo.tomlpasa aedition = "2024"yrust-version = "1.93.0", con autor, descripción y repositorio del proyecto. La líneaversionqueda comentada, así que la versión ya no sale deCargo.toml. -
Rendimiento del editor de notas:
- Autoguardado a los 4 s de dejar de escribir. También se guarda al perder el foco, al cambiar de pestaña o al pasar a solo lectura, respetando los archivos bloqueados.
- Ya no se reconcilia toda la bóveda en cada guardado.
- Refresco de
git statusagrupado con un debounce de 5 s. - Debounce del indexador de texto completo (FTS) de 5 s.
- Nuevas claves en
config.jsonc:editor.git_status_refresh_debounce_ms,indexing.debounce_msydrawing_change_debounce_ms(2500 ms por defecto).
-
Excalidraw:
- Detección de cambios por firma de elementos, de modo que el scroll, el zoom y la selección no serializan la escena.
- Debounce de 2500 ms y propagación inmediata de los cambios pendientes al perder el foco.
- Nueva clave
drawing_max_wait_ms(15000 ms): tope de edición continua sin pausas, pasado el cual el dibujo se propaga y se guarda igualmente. - El indexador omite el reindexado si el texto del dibujo no ha cambiado.
-
Diagramas D2 y Mermaid: los bloques
```d2y```mermaidya no se re-renderizan al editar texto cercano.
Corregido
Ctrl+Rya no recarga la ventana de la aplicación.- Tamaño del SVG de D2: el SVG recibe
widthyheighta partir de suviewBox, evitando que colapse en las tarjetas de lectura. - Renombrar o hacer
git addcon cambios sin guardar: el buffer del editor se persiste antes de la operación, para no trabajar con el archivo desactualizado en disco. - Pestañas tras renombrar una carpeta o un archivo: se reasignan todas las referencias abiertas (pestañas principales y divididas, selección, historial, cierre, bloqueos y rutas recientes), incluidas las notas dentro de una carpeta renombrada.
- Guardado tardío recreaba el archivo antiguo: un guardado pendiente o un visor que cerraba después de un renombrado volvía a crear la ruta anterior. Ya no ocurre.
- Dibujos sin guardar al perder el foco: al ocultarse la ventana o perder el foco, se guardan también los dibujos con cambios aún sin propagar.
- Renombrar o mover un archivo bloqueado sin confirmación: ahora se pide confirmación si el archivo está protegido.
1.0.0-alpha.2
1.0.0-alpha.2
Añadido
-
Componente reutilizable
GitStatusBadgey soporte de tokens CSS para Git:- Creación del componente
GitStatusBadge.svelteen la entidad@entities/gitpara centralizar la presentación visual de insignias de estado Git (Mmodificado/staged,Aañadido,?untracked,Sstashed). - Integración del componente
GitStatusBadgetanto enVaultExplorercomo enBreadCrumb, unificando su diseño e interacción en toda la interfaz. - Adición de variables semánticas CSS para estados Git en el tema claro y oscuro (
--git-modified,--git-staged,--git-untracked,--git-stashedy sus respectivas variantes-bgy-border).
- Creación del componente
-
Pegado inteligente de imágenes en notas Markdown:
- Intercepción de eventos de pegado (
paste) en CodeMirror cuando el portapapeles contiene una imagen (archivo o datos binarios). - Detección automática del formato de imagen correspondiente (
webp,png,jpg,svg,gif, etc., con fallback por defecto awebp). - Guardado físico de la imagen en la subcarpeta
attachments/relativa a la carpeta de la nota actual (o en la raíz si la nota reside en ella), con timestampimage_YYYYMMDD_HHmmss.[ext]y resolución de colisiones. - Inserción automática del enlace transcluido
![[image_...]]en la posición del cursor de la nota, renderizándose visualmente de forma inmediata gracias al soporte de imágenes del editor.
- Intercepción de eventos de pegado (
-
Versión dinámica de la aplicación y visualización adaptativa:
- Exposición del comando IPC Tauri
get_app_versionen el backend para obtener la versión de forma fidedigna desdepackage_info().version. - Conexión de la versión dinámica en la pantalla de bienvenida (
WelcomeScreen) reemplazando valores codificados en duro. - Indicador de versión integrado en la barra de estado inferior (
StatusBar), con visibilidad adaptativa mediante estilos CSS que la ocultan automáticamente si no hay espacio horizontal suficiente.
- Exposición del comando IPC Tauri
-
Reorganización de herramientas en la barra lateral Ribbon:
- Reordenamiento de las herramientas situando directamente debajo de las carpetas el acceso a la búsqueda de archivos por nombre (
quick-open) y la búsqueda full-text en el contenido de las notas (search).
- Reordenamiento de las herramientas situando directamente debajo de las carpetas el acceso a la búsqueda de archivos por nombre (
-
Puntaje compuesto en Quick Open (
Ctrl+O):- Nuevo módulo
ranking.rs(QuickOpenScorer) construido sobrenucleo_matcher, que puntúa por campo (nombre de archivo, título, tags y ruta) con pesos: nombre > título > tags > ruta. - Bonus de recencia acotado (último día, última semana o alguna vez abierta) y bonus por coincidencia exacta del nombre, de modo que una coincidencia dispersa reciente no supera a una coincidencia limpia.
- Pruebas de integración en
navigation_tests.rspara el nuevo orden de resultados.
- Nuevo módulo
-
Miniaturas de videos de YouTube en notas Markdown:
- Los links a YouTube (
youtube.com,youtu.be,youtube-nocookie.com, incluidosshorts,embedylive) muestran una miniatura clicable en el modo de lectura y en el editor en vivo. - Nuevo módulo
youtube.tscon extracción del ID de video y pruebas unitarias enyoutube.test.ts. - La miniatura se oculta automáticamente si no se puede cargar.
- Los links a YouTube (
-
Sincronización del título en el frontmatter:
- Nueva función
sync_frontmatter_titleque actualiza o crea el campotitleen el frontmatter YAML de una nota Markdown, conservando el resto de campos y el cuerpo.
- Nueva función
-
Extensión
.txttratada como código:- Los archivos
.txtse añaden a la lista de extensiones de código enconfig.jsoncy se muestran con el icono de código en lugar del de Markdown.
- Los archivos
Cambiado
-
Guardado automático con temporizador por archivo:
- Cada nota tiene su propio temporizador de guardado, por lo que editar una nota ya no cancela el guardado pendiente de otra.
- Se guarda de inmediato al perder el foco de la ventana, al ocultarse, al cambiar de pestaña o al pasar a solo lectura, respetando siempre el bloqueo de archivo.
auto_save_delay_mspasa de 600 a 4000 ms yfs_watcher_recent_save_grace_msde 3000 a 8000 ms.
-
Refresco de Git agrupado: nueva clave
git_status_refresh_debounce_ms(5000 ms) enconfig.jsonc. Los guardados agrupan elgit statusen lugar de lanzar uno por guardado. -
Reindexación Full-Text configurable: nueva clave
indexing.debounce_ms(5000 ms por defecto, antes fijo en 350 ms). Ya no se reconstruye toda la bóveda en cada guardado: el watcher detecta el cambio. -
Orden del explorador de la bóveda: las carpetas con emoji al inicio van primero, seguidas del resto de carpetas y luego archivos, todo en orden alfabético sin distinguir mayúsculas (
sortSiblingsenVaultExplorer.svelte). -
Motor D2 migrado a
@d2lang/d2:- Se reemplaza el paquete
@terrastruct/d2por@d2lang/d2(v0.1.34) enpackage.jsony en el serviciod2-service.ts. - Nuevo motor de layout
taladisponible en el selector de D2 junto adagreyelk.
- Se reemplaza el paquete
-
Ordenamiento de Quick Open reescrito: se sustituye el sistema de niveles (tiers) y el ordenamiento manual por el puntaje compuesto de
QuickOpenScorer, y el escaneo lineal de respaldo solo se ejecuta cuando nucleo no termina a tiempo o no ha inyectado todas las notas.
Corregido
- Filtrado de Quick Open por palabras: cada palabra de la consulta debe aparecer en el campo, en cualquier orden (por ejemplo,
bcp ttibencuentraBCP - TTIB ...). - Bucle de
nucleo.ticken búsqueda: el bucle ya no ejecuta untickde más tras terminar el trabajo de nucleo. - Diagramas Mermaid que se re-renderizaban al escribir: el widget ya no compara posiciones absolutas, así que escribir antes de un diagrama no lo destruye y vuelve a renderizar en cada pulsación.
- Diagramas D2 con altura cero en WebKit: el SVG generado recibe
widthyheightderivados de suviewBox, evitando que colapse dentro de las tarjetas de lectura.
Añadido
-
Integración del plugin CLI de Tauri (
@tauri-apps/plugin-cli/tauri-plugin-cli):- Incorporación de soporte CLI formal en la aplicación de escritorio mediante el plugin oficial de Tauri v2.
- Opciones de consulta de versión (
--version,-V) y ayuda detallada (--help,-h) que imprimen información directamente en la terminal y finalizan la ejecución de forma inmediata sin instanciar la interfaz gráfica. - Documentación en
--helpde las opciones de apertura de bóveda/archivo (--vault/-v,--file/-f, ruta posicional) y de inicio de servidor local stdio MCP (--mcp).
-
Preservación y reapertura de pestañas cerradas en la navegación del historial:
- Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en
tabHistoryde forma desacoplada y con bajo consumo de memoria. - Al utilizar la navegación hacia atrás o adelante (incluyendo los botones laterales del ratón o Alt+Left/Alt+Right), si la pestaña destino había sido cerrada, se reabre automáticamente restituyendo su posición física original en la barra de pestañas y conservando el estado de selección del cursor.
- Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en
-
Parámetros de temporización de editor y Excalidraw configurables en
config.jsonc:- Nuevas propiedades bajo el bloque
"editor"tipadas y validadas tanto en el modelo de dominio Rust (EditorConfig) como en la entidad frontend (file-types.svelte.ts):drawing_auto_save_delay_ms: Tiempo de inactividad antes de persistir dibujos a disco (3000 ms por defecto).drawing_change_debounce_ms: Tiempo de espera para propagar cambios de escena hacia la pestaña (400 ms por defecto).fs_watcher_recent_save_grace_ms: Ventana de gracia para ignorar eventos del watcher originados por guardados propios (3000 ms por defecto).
- Nuevas propiedades bajo el bloque
-
Capa de compatibilidad Obsidian API: Entorno global, emulación Node.js y stubs CodeMirror:
- Emulación de módulos en
require(): Soporte para paquetes@codemirror/searchy@codemirror/autocomplete, así como módulos esenciales de Node.js requeridos por plugins comunitarios (path,events,constants,url,punycode,cryptoconcreateHashyrandomBytes,stream,process,utilyquerystring), junto a stubs seguros para dependencias de escritorio (electron,child_process,fs,http,https,os). - Polyfill nativo de
Buffer: Implementación basada enUint8Arraycon codificación y decodificación binaria UTF-8 y Base64 (Buffer.from,isBuffer,toString). - Entorno global y objetos canónicos: Exposición de
activeWindow,global,processyCodeMirror.defineMode/defineSimpleModeen el contexto global de ejecución. - Nuevas exportaciones en bundle Obsidian: Incorporación de la clase
Vault(SynapseVault),Workspace(SynapseWorkspace),SuggestModal,loadMermaid(con import dinámico seguro),loadMathJaxy funcióngetIconIds.
- Emulación de módulos en
-
Capa de compatibilidad Obsidian API: Soporte para Vault, Workspace y App:
- Opciones y recorrido en
SynapseVault: Métodosvault.getConfig(vimMode,theme,legacyEditor,livePreview),vault.getNameyrecurseChildren(folder, callback)para iteración recursiva de jerarquías de archivos. - Extensiones en
SynapseWorkspace: PropiedadcontainerEl, métodosgetMostRecentLeaf()eiterateAllLeaves(callback), disparo de eventos conupdateOptions()y registro de fuentes de vista previa flotante (registerHoverLinkSource/unregisterHoverLinkSource). - Persistencia local y propiedades en
SynapseApp: MétodosloadLocalStorageysaveLocalStoragepara plugins que almacenan ajustes temporales, objetoapp.foldManager(load,save) para soporte de plegado de código/secciones y banderaapp.isMobile = falsepara compatibilidad con plugins de calendario y vistas de notas diarias. - Caché de metadatos: Método
metadataCache.getCachedFiles()para consultar todas las rutas registradas ...
- Opciones y recorrido en
1.0.0-alpha.1
1.0.0-alpha.1
Añadido
-
Integración del plugin CLI de Tauri (
@tauri-apps/plugin-cli/tauri-plugin-cli):- Incorporación de soporte CLI formal en la aplicación de escritorio mediante el plugin oficial de Tauri v2.
- Opciones de consulta de versión (
--version,-V) y ayuda detallada (--help,-h) que imprimen información directamente en la terminal y finalizan la ejecución de forma inmediata sin instanciar la interfaz gráfica. - Documentación en
--helpde las opciones de apertura de bóveda/archivo (--vault/-v,--file/-f, ruta posicional) y de inicio de servidor local stdio MCP (--mcp).
-
Preservación y reapertura de pestañas cerradas en la navegación del historial:
- Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en
tabHistoryde forma desacoplada y con bajo consumo de memoria. - Al utilizar la navegación hacia atrás o adelante (incluyendo los botones laterales del ratón o Alt+Left/Alt+Right), si la pestaña destino había sido cerrada, se reabre automáticamente restituyendo su posición física original en la barra de pestañas y conservando el estado de selección del cursor.
- Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en
-
Parámetros de temporización de editor y Excalidraw configurables en
config.jsonc:- Nuevas propiedades bajo el bloque
"editor"tipadas y validadas tanto en el modelo de dominio Rust (EditorConfig) como en la entidad frontend (file-types.svelte.ts):-
drawing_auto_save_delay_ms: Tiempo de inactividad antes de persistir dibujos a disco (3000 ms por defecto). -
drawing_change_debounce_ms: Tiempo de espera para propagar cambios de escena hacia la pestaña (400 ms por defecto). -
fs_watcher_recent_save_grace_ms: Ventana de gracia para ignorar eventos del watcher originados por guardados propios (3000 ms por defecto).
-
- Nuevas propiedades bajo el bloque
-
Capa de compatibilidad Obsidian API: Entorno global, emulación Node.js y stubs CodeMirror:
-
Emulación de módulos en
require(): Soporte para paquetes@codemirror/searchy@codemirror/autocomplete, así como módulos esenciales de Node.js requeridos por plugins comunitarios (path,events,constants,url,punycode,cryptoconcreateHashyrandomBytes,stream,process,utilyquerystring), junto a stubs seguros para dependencias de escritorio (electron,child_process,fs,http,https,os). -
Polyfill nativo de
Buffer: Implementación basada enUint8Arraycon codificación y decodificación binaria UTF-8 y Base64 (Buffer.from,isBuffer,toString). -
Entorno global y objetos canónicos: Exposición de
activeWindow,global,processyCodeMirror.defineMode/defineSimpleModeen el contexto global de ejecución. -
Nuevas exportaciones en bundle Obsidian: Incorporación de la clase
Vault(SynapseVault),Workspace(SynapseWorkspace),SuggestModal,loadMermaid(con import dinámico seguro),loadMathJaxy funcióngetIconIds.
-
Emulación de módulos en
-
Capa de compatibilidad Obsidian API: Soporte para Vault, Workspace y App:
-
Opciones y recorrido en
SynapseVault: Métodosvault.getConfig(vimMode,theme,legacyEditor,livePreview),vault.getNameyrecurseChildren(folder, callback)para iteración recursiva de jerarquías de archivos. -
Extensiones en
SynapseWorkspace: PropiedadcontainerEl, métodosgetMostRecentLeaf()eiterateAllLeaves(callback), disparo de eventos conupdateOptions()y registro de fuentes de vista previa flotante (registerHoverLinkSource/unregisterHoverLinkSource). -
Persistencia local y propiedades en
SynapseApp: MétodosloadLocalStorageysaveLocalStoragepara plugins que almacenan ajustes temporales, objetoapp.foldManager(load,save) para soporte de plegado de código/secciones y banderaapp.isMobile = falsepara compatibilidad con plugins de calendario y vistas de notas diarias. -
Caché de metadatos: Método
metadataCache.getCachedFiles()para consultar todas las rutas registradas en la caché.
-
Opciones y recorrido en
-
Capa de compatibilidad Obsidian API: Ecosistema de Plugins, UI y Barra de Estado:
-
Ciclo de vida en
Plugin: MétodosregisterObsidianProtocolHandler,registerEditorSuggestyregisterHoverLinkSourcecon limpieza automática enonunload. -
Registro centralizado en
PluginLoader: Exposición del mapaapp.plugins.plugins[pluginId]asignado antes de la inicialización de cada plugin y limpieza al descargarse. -
Gestor
SynapseInternalPluginsManager(app.internalPlugins): Soporte para plugins nativos (app.internalPlugins.getPluginByIdygetEnabledPluginById), requerido por plugins comunitarios comoCalendar,Periodic Notesy la bibliotecaobsidian-daily-notes-interface. -
Soporte nativo de
daily-notes: Registro del plugin internodaily-notescon configuración predeterminada (YYYY-MM-DD, carpeta y plantilla), cargando asíncronamente las opciones de.obsidian/daily-notes.jsono.synapse/daily-notes.json. -
Plugins internos y stubs: Registro de
workspaces,file-recovery(con manejadores asíncronos seguros) y stubs parabacklink,outgoing-link,tag-pane,page-previewygraph. -
Integración con la barra de estado:
SynapseStatusBarManagerconecta directamente los elementos.status-bar-item.plugin-status-itemcreados por plugins con el componente visualStatusBar.svelteen la parte inferior del espacio de trabajo. -
Componentes de UI y modales: Clase base
SuggestModal<T>con contenedor de resultados yFuzzySuggestModal<T>conectada; métodos fluidossetPlaceholderysetInstructionsenModal.
-
Ciclo de vida en
-
Capa de compatibilidad Obsidian API: Extensiones DOM nativas y biblioteca
moment():-
Extensiones DOM nativas en
HTMLElement.prototype: Métodos canónicos de Obsidian (setText,getText,addClass,removeClass,addClasses,removeClasses,toggleClass,hasClass,setAttr,getAttr) en el prototipo global del DOM para manipulación segura sin excepciones en tiempo de ejecución. -
Soporte ampliado de fechas y locales en
moment(): Métodos de comparación y límites (isSame,isBefore,isAfter,startOf,endOf), manipulación de unidades (year,month,date,day,weekday,isoWeekday,week,set,get), formateo relativo (calendar()), métodos de internacionalización (locale,localeData,moment.locale,moment.localeData,moment.updateLocale,moment.locales,moment.weekdays,moment.weekdaysShort,moment.weekdaysMin) y spec global_bundledLocaleWeekSpec.
-
Extensiones DOM nativas en
-
Indexación en memoria de carpetas (
DashSet) y navegación rápida:-
NavigationEngine(Backend Rust): Nueva colección concurrentefolders: Arc<DashSet<CompactString>>para registrar directorios de la bóveda (incluidas carpetas vacías). -
Hidratación en frío (< 1 ms): Pre-poblado instantáneo de carpetas ancestros al arrancar desde las rutas en RAM de las notas sin romper la compatibilidad binaria del caché
bincode. - Watcher reactivo de filesystem: Sincronización en vivo de carpetas ante eventos de creación, eliminación y renombrado en disco.
-
Servicio de dominio puro (
domain/services/folder_service.rs): Métodosextract_ancestor_foldersysummarize_folderpara cálculo de huella semántica (notes_count,subfolders_count,dominant_tagsysample_notes) en memoria sin I/O directo. -
Comando Tauri
search_folders_command: Búsqueda difusa y paginada de carpetas con retorno de huella semántica.
-
-
Herramientas Agénticas MCP avanzadas para carpetas:
-
search_folders: Permite a los LLMs buscar carpetas con coincidencia difusa y recibir su huella semántica (conteo, tags más frecuentes y notas de muestra) para desambiguar carpetas homónimas en una sola llamada sin sobrecargar la ventana de contexto. -
move_folder_contents: Mueve de forma masiva notas entre directorios con prevención de path traversal y bucles infinitos, filtro opcional por extensión, estrategia de resolución de conflictos (skip,rename,overwrite) y soporte de simulacrodry_run. -
Paginación en
list_folder_contents: Soporte delimityoffsetconhas_moreynext_offsetpara directorios con cientos de notas. -
Filtro de ruta en
full_text_search: Soporte de coincidencias parciales por segmento de carpeta con alto recall.
-
-
UX mejorada en
Ctrl+O(Quick Open):-
Modo
/(DIR): Escribir/filtra exclusivamente carpetas en la bóveda con badge indicador visual. - Colapso inteligente a Top 3 en búsqueda normal: En consultas generales, las carpetas coincidentes se limitan a las 3 más relevantes para evitar desplazar las notas y archivos hacia abajo.
-
Elemento interactivo "Ver X carpetas más...": Alternancia expandir/colapsar con soporte completo de clic de ratón o teclado (
Enter). -
Drill-down interactivo y botón Revelar: Presionar Enter sobre una carpeta autocompleta la búsqueda a
ruta/carpeta/, o botón para revelarla directamente en el explorador lateral.
-
Modo
-
Navegación unificada por páginas con retención de altura relativa (
PageDown/PageUp):-
Módulo compartido
shared/lib/navigation(relative-page-navigator.ts): Utilidad modular reusable que calcula el vector$\Delta Y = Y_{\text{target}} - Y_{\text{current}}$ y desplaza el contenedor asegurando que el elemento seleccionado mantenga la misma fila visual o altura en pantalla (Relative Viewport Retention). -
QuickOpen (
Ctrl+O): Navegación adaptativa a 60 FPS fijos que preserva la posición vertical del elemento seleccionado o hace clamping seguro en los extremos. -
Búsqueda Full-Text (
Ctrl+Shift+F): Soporte completo dePageDownyPageUpenFullTextSearchcon retención de posición relativa y sincronización de foco. -
VaultExplorer (Explorador lateral): Soporte de
PageDownyPageUpcon navegació...
-
Módulo compartido
2026.10.26.01-alpha
[2026.10.26.01-alpha] - 2026-10-26
Añadido
- Renderizado Embebido de Dibujos Excalidraw en Markdown con Caché:
- Soporte completo para renderizar visualmente archivos de dibujo Excalidraw (
.excalidraw,.excalidraw.json,.excalidraw.md) como gráficos vectoriales SVG directamente dentro de las notas Markdown. - Compatibilidad total con transclusiones de wikilinks (
![[dibujo.excalidraw]],![[esquema.excalidraw.md|500]]), sintaxis estándar de imagen () y bloques de código dedicados (excalidraw ...) con soporte para directivas{{#include ...}}. - Sistema de Caché Multinivel de Alto Rendimiento:
- Nivel 1 (RAM): Caché en memoria LRU de 0 ms para visualización instantánea.
- Nivel 2 (Disco): Persistencia de SVGs prerenderizados en
<vault>/.synapse/cache/excalidraw/<hash>_<theme>.svg. Lee el SVG en menos de 2 ms sin invocar React ni volver a calcular la geometría si el contenido no ha cambiado. - Nivel 3 (Motor): Renderizado bajo demanda con
exportToSvgadaptado al tema activo claro u oscuro de Synapse.
- Integración transparente en el editor en vivo CodeMirror (sustitución interactiva al salir del cursor con botón de edición) y en la vista de lectura
MarkdownReadingView.
- Soporte completo para renderizar visualmente archivos de dibujo Excalidraw (
- Visualizador y Editor de Diagramas D2 (
.d2) con WebAssembly (@terrastruct/d2):- Soporte completo para abrir, editar y previsualizar archivos de diagramas
.d2con renderizado SVG nativo de alto rendimiento vía WASM. - Reconocimiento de la extensión
.d2en la categoríadiagramstanto en el backend Rust (file_types.rs) como en la configuración (config.jsonc) y entidades frontend (file-types.svelte.ts). - Configuración Declarativa In-File: Soporte nativo del bloque
vars: { d2-config: { ... } }para definir motor de layout (dagre,elk), tema (theme-id), tema oscuro (dark-theme-id), modo boceto (sketch) y padding directamente en el código fuente. - Detección automática del tema claro u oscuro de Synapse como fallback si el archivo no especifica un
theme-id. - Integración en
WorkspacePage, comparador de diff (VisualDiffViewer), visor de revisiones Git (RevisionViewer) y renderizado de bloques de código ````d2` en notas Markdown (tanto en lectura como en edición en vivo).
- Soporte completo para abrir, editar y previsualizar archivos de diagramas
- Refactorización Unificada
DiagramSplitViewer(src/shared/ui/diagram-viewer/): Extracción de componentes comunes de visualización de diagramas en un único componente base reutilizable, reduciendo más de 1,300 líneas de código duplicado entreMermaidViewer,MermanVieweryD2Viewer. Lienzo SVG unificado con zoom y paneo interactivo sobreviewBox, motor gráfico de Puntero Láser sobre canvas 2D con estela y controles flotantes conbits-ui. - Autocompletado y Linter Sintáctico en Tiempo Real para D2 y Mermaid (
CodeEditor.svelte):- Autocompletado Contextual (
@codemirror/autocomplete):- En D2: sugerencias para motores (
dagre,elk), catálogo de 20 temas oficiales con nombre descriptivo (0Neutral,3Flagship,200Dark Mauve,300Terminal,303C4, etc.), formas geométricas (shape:), direcciones (direction:), estilos (style.*) y snippets ded2-config. - En Mermaid: sugerencias para directivas
%%{init: ...}%%, frontmatterconfig:, catálogo de temas de Mermaid.js y Merman,look(classic,handDrawn),layout(dagre,elk),curvey tipos de diagrama (flowchart,sequenceDiagram,stateDiagram-v2,erDiagram,architecture-beta, etc.).
- En D2: sugerencias para motores (
- Linter y Diagnóstico en Línea (
@codemirror/lint+lintGutter):- Subrayado rojo ondulado en la línea y columna exacta del error sintáctico devuelto por los parsers de D2 (rangos AST) y Mermaid (
err.hash.loc), con marcadores en el margen de línea y tooltips informativos.
- Subrayado rojo ondulado en la línea y columna exacta del error sintáctico devuelto por los parsers de D2 (rangos AST) y Mermaid (
- Autocompletado Contextual (
- Atajo de Teclado para Alternar/Entrar en Modo Edición:
- Nuevo atajo de teclado por defecto
Ctrl+E(toggle_edit_mode) para alternar instantáneamente entre el modo lectura y el modo edición en el visor Markdown activo sin necesidad de hacer clic con el ratón. - Registro del atajo en la configuración global y en el mapa de atajos (
shortcuts.svelte.ts).
- Nuevo atajo de teclado por defecto
- Persistencia Global del Modo Vim:
- El estado del modo Vim (
vimMode) ahora se almacena y recuerda permanentemente a través delocalStoragey la configuración de la aplicación (appSettings.vimMode), manteniéndose activo al recargar o reiniciar Synapse.
- El estado del modo Vim (
- Sincronización Bidireccional entre Modales de Búsqueda:
- Al presionar
Ctrl+Shift+Fteniendo abiertoQuickOpen(Ctrl+O), el texto introducido se transfiere automáticamente aFullTextSearchy la ventana deQuickOpense cierra. - De forma recíproca, al pulsar
Ctrl+OdesdeFullTextSearch, la consulta se traslada instantáneamente aQuickOpencerrando el diálogo de búsqueda full-text.
- Al presionar
- Autocompletado de Wikilinks (
[[...]]):- Ventana emergente (popup) en tiempo real al escribir
[[en el editor CodeMirror con sugerencias contextuales de notas de la bóveda. - Formateo limpio: la lista desplegable muestra únicamente el nombre base del archivo sin rutas de directorios ni extensión
.md. - Ampliación de dimensiones visuales del menú emergente (
.cm-tooltip-autocomplete) a 460px de ancho y hasta 420px de altura con scrolling suave.
- Ventana emergente (popup) en tiempo real al escribir
- Knowledge Graph 2D y 3D con Aceleración WebGL:
- Visualizador de grafo de conocimiento bidireccional local y global con simulación de fuerzas (force-directed).
- Modo 3D WebGL impulsado por Three.js con botón conmutador 2D/3D accesible en la cabecera del visor de grafos.
- Soporte de nodos fantasma (ghost nodes) para wikilinks referenciados pendientes de creación.
- Paralelización multi-hilo con Rayon en Rust para análisis y cálculo ultra-rápido de enlaces y física de grafos en bóvedas masivas.
- Explorador de Etiquetas e Inspector de Relaciones:
- Vista lateral
TagsExplorerpara explorar, contar y filtrar notas rápidamente según sus etiquetas (#etiqueta). - Panel
RelationsInspectorpara auditar backlinks, enlaces salientes e hijos/padres de la nota activa.
- Vista lateral
- Servidor MCP Local (Model Context Protocol):
- Servidor stdio MCP integrado en Rust (
synapse-mcp) para conectar agentes de IA locales con la bóveda de forma dedicada desde CLI (synapsers --mcp). - Servidor MCP en Proceso (
in-process) con Transporte HTTP: Soporte para ejecutar el servidor MCP en segundo plano en la misma instancia activa de escritorio de Synapse (http://127.0.0.1:27182/mcp), vinculándose dinámicamente a la bóveda abierta en pantalla y compartiendo en memoria el índice de búsqueda Tantivy. - Indicador e Interruptor en
StatusBar: Botón interactivo en la barra de estado inferior que muestra el estado en vivo (MCP ON :27182/MCP OFF), permite activar o apagar el servidor con un clic y expone información de la bóveda activa y peticiones atendidas vía tooltip. - Comandos en Paleta (
Ctrl+P): Acciones rápidas para alternar el servidor MCP local y copiar la URL de conexión al portapapeles. - Persistencia de Estado: Opción recordada en
localStorage(appSettings.mcpServerEnabled) para restaurar automáticamente el servidor encendido al reabrir la app. - Herramientas MCP avanzadas para búsqueda full-text, inspección de relaciones/backlinks, lectura de notas, listado de contenido de carpetas (
list_folder_contents), listado de notas vecinas en la misma carpeta (list_sibling_notes), movimiento en lote de notas entre carpetas (move_notes) y estado Git.
- Servidor stdio MCP integrado en Rust (
- Soporte de Frontmatter YAML según OKF:
- Parseo, indexación y preservación bidireccional de metadatos YAML frontmatter alineados con las especificaciones Open Knowledge Format (OKF) y herramientas de IA.
Corregido
- Prevención de Recarga Redundante y Bloqueo de Edición en Excalidraw al presionar Esc:
- Se corrigió un bug en
ExcalidrawViewerdonde al pulsar Esc o producirse una deselección con pérdida de foco (focusout), la serialización y guardado del archivo desencadenaba una actualización externa reactiva que sobreescribía la escena de Excalidraw (updateScene). Esto provocaba la pérdida del puntero interactivo del canvas y requería alternar a modo lectura y volver a edición para reactivar el dibujo. - Implementación de discriminación de cambios locales (
isLocalChange) y comparación semántica con hash de versión de escena (hasSceneDivergedutilizandogetSceneVersion) para impedir reescrituras de la escena viva generadas por el propio visor. - Restauración automática y garantizada de la herramienta de selección (
setActiveTool({ type: 'selection' })) tras la captura del eventoEscape.
- Se corrigió un bug en
- Foco Automático en el Editor al Reabrir o Alternar Notas:
- Al abrir o reabrir una nota que quedó en modo edición, o alternar entre pestañas editables, el editor CodeMirror recibe el foco de entrada automáticamente (
focus()), permitiendo escribir o desplazarse inmediatamente con las teclas sin necesidad de hacer clic manual previo.
- Al abrir o reabrir una nota que quedó en modo edición, o alternar entre pestañas editables, el editor CodeMirror recibe el foco de entrada automáticamente (
- Precisión y Ranking en Búsqueda Difusa (
search_with_stats):- Corrección del algoritmo de ranking en el motor de navegación Nucleo: se otorgan prioridades y bonificaciones estrictas a coincidencias exactas y subcadenas completas en nombres de archivo y títulos, eliminando resultados espurios irrelevantes al buscar palabras en minúsculas comunes (ej.
todo).
- Corrección del algoritmo de ranking en el motor de navegación Nucleo: se otorgan prioridades y bonificaciones estrictas a coincidencias exactas y subcadenas completas en nombres de archivo y títulos, eliminando resultados espurios irrelevantes al buscar palabras en minúsculas comunes (ej.
- Respuesta Instantánea de QuickOpen (
Ctrl+O):- Eliminación de listeners redundantes y configuración de
forceMount={true}en los elementos deCommand.Itempara evitar que la lista se quede en blanco. - Retorno en memoria en 0 ms si la búsqueda en backend no ha completado la primera respuesta.
- Eliminación de listeners redundantes y configuración de
- Aislamiento de Pestañas Sintéticas de Grafos:
- Se corrigió la asociación de rutas para evitar que URIs sintéticas como
synapse://graphsean identif...
- Se corrigió la asociación de rutas para evitar que URIs sintéticas como
2026.10.24.01-alpha
[2026.10.24.01-alpha] - 2026-10-24
Añadido
- Bloqueo de Archivos contra Modificaciones Accidentales (File Lock):
- Opción de bloquear y desbloquear archivos desde el menú contextual de
VaultExplorer. - Iconos de candado visibles en el árbol de archivos, en las pestañas (
EditorHeader) y en la barra superior. - Inhibición estricta de auto-guardado en archivos bloqueados con persistencia en
VaultUiState.locked_files. - Diálogo de confirmación accesible al intentar cerrar pestañas o la aplicación con cambios pendientes en archivos bloqueados, ofreciendo opciones para abortar, descartar cambios o forzar el guardado.
- Opción de bloquear y desbloquear archivos desde el menú contextual de
- Modo Lectura por Defecto en Archivos Excalidraw:
- Tanto los dibujos de Excalidraw nativo como los de Obsidian Excalidraw (
.excalidraw,.excalidraw.md) ahora se abren por defecto en modo lectura, evitando mutaciones o disparos accidentales en memoria.
- Tanto los dibujos de Excalidraw nativo como los de Obsidian Excalidraw (
- Acciones del Sistema en Menús Contextuales:
- "Abrir con la app por defecto": Permite abrir cualquier archivo con la aplicación configurada por omisión en el sistema operativo (Word, Excel, etc.) tanto desde
VaultExplorercomo desde las pestañas. - "Mostrar en carpeta": Abre el gestor de archivos nativo del sistema y resalta el archivo o carpeta seleccionada.
- Implementación multiplataforma en Rust siguiendo la especificación estándar FreeDesktop D-Bus (
org.freedesktop.FileManager1.ShowItemsconbusctl/dbus-sendy fallbacks en Linux,explorer /selecten Windows yopen -Ren macOS).
- "Abrir con la app por defecto": Permite abrir cualquier archivo con la aplicación configurada por omisión en el sistema operativo (Word, Excel, etc.) tanto desde
- Control de Lectura y Escritura Local en Visor de Diff:
- En
VisualDiffViewer, el panel de trabajo local ahora inicia en modo lectura por defecto con un interruptor para alternar entre modo lectura y escritura exclusiva para el archivo local en disco, mientras que el panel de revisión Git permanece estrictamente en modo solo lectura.
- En
- Soporte de Imágenes y Archivos Incrustados en Diagramas Excalidraw:
- Reconocimiento y parseo bidireccional de la sección
## Embedded Filesen archivos Markdown de Obsidian Excalidraw (.excalidraw.md). - Resolución automática de rutas relativas y wikilinks (
fileId: [[ruta/a/imagen.png]]) a URLs de datos (dataURL) leídas desde la bóveda activa. - Inyección dinámica en el registro de archivos del lienzo tanto en el visor de Excalidraw nativo (
api.addFiles) como en el generador vectorial SVG deObsidianExcalidrawViewer(ExcalidrawAutomate.toSVG), permitiendo la correcta visualización de imágenes y gráficos incrustados. - Preservación íntegra de la sección
## Embedded Filesdurante el guardado y serialización de archivos.
- Reconocimiento y parseo bidireccional de la sección
Corregido
-
Prevención de Congelamiento y Optimización de Memoria en Obsidian Excalidraw:
- Se eliminó el filtro CSS
drop-shadowen el contenedor SVG del visor de Obsidian Excalidraw, evitando que WebKitGTK asigne búfers rasterizados masivos de varios gigabytes (hasta 4 GB) para diagramas vectoriales extensos. - Se configuró el SVG generado con
width="100%" height="100%"acoplado a suviewBox, permitiendo un renderizado vectorial escalado por GPU sin límites fijos hipertrofiados. - Se implementó un debounce de 300 ms en el evento
onChangedel editor nativo de Excalidraw para evitar ejecutar la compresión LZ de miles de elementos en cada micro-movimiento del puntero. - Se protegieron las imágenes cargadas para no persistir URLs de datos o activos en el bloque de archivos del JSON en documentos Markdown, respetando el formato estándar de
## Embedded Files.
- Se eliminó el filtro CSS
-
Apertura de Diagramas Excalidraw en Modo Lectura por Defecto:
- Detección precisa de archivos de dibujo a través de su metadata YAML frontmatter (
--- \n excalidraw-plugin: parsed \n ---) independientemente del nombre o extensión.md. - Los diagramas se abren por omisión en modo lectura (
readOnlyy botón en modo "Lectura") para evitar modificaciones accidentales y consumo innecesario de recursos.
- Detección precisa de archivos de dibujo a través de su metadata YAML frontmatter (
-
Persistencia del Modo Edición durante el Auto-guardado en Excalidraw:
- Se corrigió un bug donde, al guardar automáticamente un dibujo abierto en Excalidraw, la recarga del archivo y la actualización interna de escena revertían el visor al modo lectura o dejaban la herramienta activa en modo mano (
hand), impidiendo continuar editando sin alternar el botón de la cabecera.
- Se corrigió un bug donde, al guardar automáticamente un dibujo abierto en Excalidraw, la recarga del archivo y la actualización interna de escena revertían el visor al modo lectura o dejaban la herramienta activa en modo mano (
-
Protección Estricta contra Guardado en Archivos Bloqueados:
- Se corrigió un bug donde
persistVaultItemToRustpersistía archivos bloqueados al cerrar la ventana, desmontar componentes o disparar callbacks automáticos de visores. Ahora se exigeforce = trueexplícito (únicamente activable vía diálogo de confirmación, atajoCtrl+So botón Guardar manual).
- Se corrigió un bug donde
v2026.10.23.04-alpha
[2026.10.23.04-alpha] - 2026-10-23
Añadido
- Plugins Comunitarios de Obsidian (SOLO SE VALIDO EL PLUGIN DE EXCALIDRAW DE OBSIDIAN):
- Explorador e instalador integrado de plugins comunitarios desde el catálogo oficial de Obsidian.
- Soporte de instalación, habilitación, deshabilitación, desinstalación y ejecución en entorno seguro.
- Caché de doble nivel (RAM y disco) con TTL para navegación instantánea del catálogo sin saturar la red.
- Detección automática de plugins instalados mediante escaneo directo en disco del vault.
- Comandos y soporte en interfaz para verificar actualizaciones y actualizar plugins automáticamente.
- Búsqueda Full-Text en Documentos PDF y Word (DOCX):
- Extracción e indexación automática de texto para archivos
.pdfy.docxen el motor Tantivy en Rust. - Configuración detallada en
config.jsonc(indexing): límites de tamaño (max_pdf_file_size,max_docx_file_size), límite de páginas (max_pdf_pages), límite de caracteres (max_extracted_chars) y filtrado de palabras corruptas (max_word_length).
- Extracción e indexación automática de texto para archivos
- Navegación Fluida y Expansión desde Breadcrumb:
- Al hacer clic en un directorio dentro del
BreadCrumbde una nota activa,VaultExplorerse expande y se muestra automáticamente si la barra lateral estaba colapsada u oculta. - La carpeta seleccionada en el breadcrumb despliega inmediatamente sus subdirectorios y archivos en el árbol del explorador.
- Al hacer clic en un directorio dentro del
- Regiones de Arrastre de Ventana en Windows y Sistemas de Escritorio:
- Se habilitaron regiones de arrastre nativas de Tauri (
data-tauri-drag-region) en las zonas vacías de la cabecera de pestañas (EditorHeader) y en la cabecera del explorador (VaultExplorer). - Espaciador de arrastre dedicado de 24px junto a los controles de ventana para garantizar un punto de agarre cómodo incluso con decenas de pestañas abiertas.
- Soporte para maximizar y restaurar la ventana mediante doble clic en las áreas libres de la cabecera sin interferir con las pestañas ni los botones interactivos.
- Se habilitaron regiones de arrastre nativas de Tauri (
[2026.10.23.03-alpha] - 2026-10-23
Añadido
- Explorador, instalador y gestor de plugins comunitarios de Obsidian con optimizaciones de rendimiento y caché.
v2026.10.23.02-alpha
🧠 Bienvenidos a Synapse.rs (Primer Release Alpha)
Synapse.rs es una aplicación de gestión de notas, conocimiento y diagramas hiper-rápida, privada y offline-first, construida
con Tauri v2, Rust y Svelte 5. Diseñada para ser liviana, extensible y compatible con el ecosistema de Markdown y
Obsidian.
✨ Características Principales
- Velocidad Extrema en Rust: Indexación y navegación instantánea con búsqueda difusa en memoria (Nucleo fuzzy matching).
- Editor Markdown y Diagramas: Soporte nativo para Markdown, diagramas Mermaid, Merman y dibujos Excalidraw (
.excalidraw.md). - Control de Versiones Git Integrado: Historial de cambios, diff visual por archivo, branching y stashing directo desde la app.
- Modo Archivo Puntual (Standalone): Abre y edita archivos individuales (
.md,.mermaid,.excalidraw) directamente sin necesidad de crear un espacio de trabajo. - Soporte de Formatos: Vista previa de imágenes, documentos PDF y acceso rápido a archivos externos (Word, Excel) con tu visor de sistema preferido.
- Tema Dinámico: Modo Oscuro, Claro y sincronización automática con el sistema operativo.
- 100% Privado y Local: Tus notas nunca salen de tu máquina; tus archivos son simplemente carpetas en tu disco.
📦 Descargas Portables (Sin instalador)
No requieren instalación de dependencias pesadas; simplemente descarga y ejecuta:
| Plataforma | Archivo | Instrucciones |
|---|---|---|
| Linux (x64) | synapsers |
Dar permisos de ejecución: chmod +x synapsers y ejecutar ./synapsers |
| Windows (x64) | synapsers.exe |
Doble clic para ejecutar directamente |
Note
Esta es una versión Alpha. Si encuentras algún comportamiento inesperado o tienes sugerencias, eres bienvenido a abrir un issue en el repositorio.