Aplicación de notas de conocimiento personal desarrollada en Rust (Tauri v2) y Svelte 5 (Runes) con Bun, estructurada bajo Feature-Sliced Design (FSD) en el frontend y Arquitectura Cebolla (Onion Architecture) en el backend de Rust.
- 📝 Editor Markdown: Integrado con Milkdown y vista previa en tiempo real.
- 📊 Editor Mermaid: Edición avanzada con CodeMirror 6, resaltado de sintaxis nativo para diagramas Mermaid y visualizador interactivo con puntero láser.
- 🎨 Visualizador Excalidraw: Soporte completo para gráficos dibujados a mano con pestañas independientes y guardado configurable.
- ⚡ Modo VIM: Integración con
@replit/codemirror-vimactivable/desactivable en tiempo real desde el botón de la barra de estado. - 🗂️ Arquitectura Multipestaña (Tabs): Contexto aislado por archivo abierto e indicador visual de cambios sin guardar (
*). - 🏗️ Feature-Sliced Design (FSD): Organización modular por capas (
app,pages,widgets,features,entities,shared).
El código frontend dentro de src/ sigue rigurosamente los principios de Feature-Sliced Design (FSD) para maximizar la mantenibilidad, escalabilidad y aislamiento entre módulos.
src/
├── app/ # Capa App: Inicialización de la aplicación, estilos globales y punto de entrada raíz
│ ├── styles/ # CSS global y sistema de tokens (--bg-primary, --accent, etc.)
│ └── App.svelte # Montaje raíz de la aplicación Svelte
│
├── pages/ # Capa Pages: Composición de vistas y páginas completas
│ └── workspace/ # Página principal del área de trabajo (WorkspacePage)
│
├── widgets/ # Capa Widgets: Bloques UI complejos y autónomos
│ ├── ribbon/ # Barra de herramientas e iconos laterales (Ribbon)
│ ├── editor-header/ # Encabezado superior con navegación de pestañas y controles de ventana
│ ├── status-bar/ # Barra de estado inferior con contadores, sync e indicador VIM
│ └── command-palette/ # Modal superpuesto para la paleta de comandos (Ctrl+P)
│
├── features/ # Capa Features: Funcionalidades orientadas a la interacción del usuario
│ ├── vault-explorer/ # Explorador de archivos de la bóveda (Markdown, Mermaid, Excalidraw, PDFs, etc.)
│ ├── markdown-editor/ # Editor y visor de notas Markdown con Milkdown
│ ├── merman-editor/ # Editor/visor interactivo de diagramas Mermaid + Láser
│ └── excalidraw-editor/ # Visualizador e integrador de lienzos Excalidraw
│
├── entities/ # Capa Entities: Entidades de negocio y modelos del dominio
│ ├── vault-item/ # Modelo de elemento de bóveda (`VaultItem`, `VaultItemKind`, `TabItem`)
│ └── command/ # Registro de comandos y motor de búsqueda difusa (`commandRegistry`)
│
└── shared/ # Capa Shared: Reutilizables de infraestructura sin lógica de negocio
├── api/ # Invocación IPC Tauri (`invokeTauri`, `isTauriEnvironment`)
├── ui/code-editor/ # Envoltorio genérico de editor de código CodeMirror 6
└── assets/ # Imágenes, logotipos y recursos estáticos
-
Jerarquía Unidireccional de Importaciones: Las capas superiores solo pueden importar elementos de capas inferiores.
$$\text{app} \longrightarrow \text{pages} \longrightarrow \text{widgets} \longrightarrow \text{features} \longrightarrow \text{entities} \longrightarrow \text{shared}$$ -
Sin Importaciones Horizontales entre Slices: Un slice dentro de
features/owidgets/no puede importar directamente de otro slice de la misma capa. Si se requiere compartir componentes base (como el editor CodeMirror), residen enshared/ui. -
Puntos de Entrada Públicos (
index.ts): Cada slice expone únicamente su interfaz pública mediante su correspondienteindex.ts.
Para evitar rutas relativas compuestas (../../..), el proyecto cuenta con alias explícitos en tsconfig.app.json y vite.config.ts:
@app/*→src/app/*@pages/*→src/pages/*@widgets/*→src/widgets/*@features/*→src/features/*@entities/*→src/entities/*@shared/*→src/shared/*
El código Rust en src-tauri/ implementa Arquitectura Cebolla (Onion Architecture):
- Domain: Tipos del sistema de archivos, bóveda y structs base.
- Application Services: Comandos IPC (
get_vault_notes,save_note_content,select_vault_folder). - Adapters / Infrastructure: Sistema de archivos del sistema operativo e integración con Tauri v2 Core.
- Bun
>= 1.0 - Rust & Cargo
- (Opcional para compilación cruzada a Windows):
cargo-xwin(cargo install cargo-xwin)
# Instalar dependencias del proyecto
bun install
# Verificar tipos y sintaxis Svelte/TypeScript
bun check
# Iniciar la aplicación en modo desarrollo con Tauri
bun tauri devbun tauri buildPara generar el archivo ejecutable binario .exe directamente desde Linux:
bun tauri build --target x86_64-pc-windows-msvc --runner cargo-xwin --no-bundleUbicación del binario generado:
src-tauri/target/x86_64-pc-windows-msvc/release/app.exe