Volver a Proyectos

🖥️ LocalCoder

IDE de escritorio con asistente de IA 100% local: editor Monaco, chat en streaming y cero telemetría

Backend en Rust 100% offline Scanner de hardware

Escala del Proyecto

12Componentes
5Módulos Rust
0Telemetría
0Nube

Descripción General

Los asistentes de código en la nube tienen dos problemas que no se resuelven pagando más: tu código sale de tu máquina, y sin conexión no funcionan. LocalCoder es un IDE de escritorio que da la vuelta a eso: el modelo de lenguaje corre en tu propio ordenador mediante Ollama, y la aplicación no envía nada a ningún sitio.

Incluye el editor Monaco — el mismo motor de edición de VS Code — con pestañas, barra de estado y explorador de ficheros sin límite de profundidad, además de un panel de búsqueda y un chat con la IA que responde en streaming, token a token, en lugar de esperar la respuesta completa. La memoria de cada sesión se guarda en SQLite dentro de ~/.localcoder/.

La función de la que estoy más satisfecho es el scanner de hardware: detecta la CPU y la memoria disponible y recomienda qué modelo de Ollama puede mover ese equipo. Es la diferencia entre que el usuario descargue un modelo de 7B que le funciona y que descargue uno de 70B, agote la RAM y concluya que la IA local no sirve.

Tecnologías Utilizadas


Rust

Tauri 2

React 18

TypeScript

Monaco Editor

Zustand

TailwindCSS

SQLite (rusqlite)

Ollama

Vite

Componentes de la Interfaz

📝 EditorPanel

El editor Monaco integrado: el mismo motor que usa VS Code, con resaltado y autocompletado.

🗂️ TabBar

Pestañas de los ficheros abiertos.

📊 StatusBar

Barra de estado del editor.

🌲 FileTree

Explorador de ficheros sin límite de profundidad, apoyado en walkdir.

💬 ChatPanel

Chat con la IA local, con respuesta en streaming y renderizado de Markdown.

🔍 SearchPanel

Búsqueda dentro del proyecto abierto.

⚙️ SettingsPanel

Configuración de la aplicación y selección de modelo.

📚 Sidebar y Topbar

Navegación lateral y barra superior.

👋 WelcomeScreen

Pantalla inicial con acceso a proyectos recientes.

Arquitectura

Aplicación de escritorio con Tauri 2: la interfaz es web — React 18 con TypeScript y Tailwind, empaquetada por Vite — y el backend es un binario nativo en Rust. Tauri actúa de puente entre ambos, lo que da un ejecutable de pocos megabytes en lugar de los cientos que ocupa una aplicación Electron.

El backend Rust está dividido en cinco módulos con una responsabilidad clara cada uno, y es donde vive todo lo que necesita acceso real al sistema: disco, hardware, base de datos y red.

LocalCoder/
├── src/                     # frontend React + TypeScript
│   ├── App.tsx · main.tsx
│   ├── components/          # Editor, Chat, Explorer, Search, Settings
│   ├── store/               # estado global con Zustand
│   └── types/
└── src-tauri/               # backend nativo en Rust
    ├── main.rs             # comandos expuestos al frontend
    ├── ollama.rs           # cliente con respuesta en streaming
    ├── hardware.rs         # detección de CPU/RAM (sysinfo)
    ├── scanner.rs          # recorrido del proyecto (walkdir)
    ├── db.rs               # memoria por sesión en SQLite
    └── tauri.conf.json

Integraciones Externas

Ollama

Servidor de modelos en localhost:11434. La comunicación usa reqwest con la funcionalidad de stream activada, de modo que la respuesta se muestra mientras se genera.

Monaco Editor

Integrado vía @monaco-editor/react: el mismo editor de VS Code, con su resaltado y su experiencia de escritura.

SQLite mediante rusqlite

Compilado con la funcionalidad bundled, de modo que no requiere que el usuario tenga SQLite instalado. Guarda la memoria de cada sesión de chat.

sysinfo

Lectura de las características reales del equipo para el recomendador de modelos.

Flujo de Trabajo

  1. Arranque: la pantalla de bienvenida ofrece abrir un proyecto o continuar con uno reciente.
  2. Detección de hardware: hardware.rs lee CPU y memoria y propone los modelos de Ollama viables en ese equipo.
  3. Apertura del proyecto: scanner.rs recorre el árbol de directorios completo con walkdir.
  4. Edición: los ficheros se abren en pestañas sobre el editor Monaco.
  5. Consulta a la IA: el chat envía el contexto a Ollama y ollama.rs devuelve la respuesta en streaming.
  6. Memoria de sesión: db.rs guarda la conversación en SQLite dentro de ~/.localcoder/.
  7. Análisis del proyecto: la aplicación puede recorrer el proyecto completo línea por línea para dar contexto al modelo.

Retos Técnicos y Decisiones de Diseño

Tauri en lugar de Electron

Electron empaqueta un Chromium completo: cientos de megabytes y un consumo de memoria notable para un editor. Tauri usa el motor web que ya tiene el sistema operativo y compila el backend a un binario nativo. El coste es que hay que escribir ese backend en Rust y lidiar con las dependencias de sistema de cada distribución — el README documenta las de Ubuntu.

Streaming, porque la espera se nota

Un modelo local en una máquina normal tarda varios segundos en generar una respuesta larga. Con una petición convencional el usuario mira una pantalla quieta y asume que se ha colgado. Activar stream en reqwest y empujar los tokens al frontend a medida que llegan no acelera nada, pero cambia por completo la percepción de velocidad.

Recomendar el modelo en lugar de dejar elegir a ciegas

El principal motivo por el que alguien abandona la IA local es descargar un modelo demasiado grande para su equipo, ver que va a un token por segundo y concluir que no funciona. Leer la CPU y la RAM con sysinfo y recomendar en consecuencia convierte la primera experiencia en algo que funciona.

Sin telemetría como decisión de diseño

La aplicación no envía datos de uso, no reporta errores a ningún servidor y no requiere cuenta. Eso implica renunciar a saber cómo se usa, lo cual es incómodo para el desarrollador; pero es la única forma coherente de sostener la promesa de que el código del usuario no sale de su máquina.

Mi Rol

Desarrollador full stack — autor único.

Frontend React con integración de Monaco, los cinco módulos del backend Rust, el cliente de Ollama con streaming, el recomendador de modelos por hardware y la persistencia en SQLite.

Estado del Proyecto

Aplicación funcional que compila y se ejecuta con npm run tauri dev, con empaquetado de producción vía npm run tauri build. Requiere Rust, Node 18+ y Ollama corriendo en local.

Código y Enlaces

El README documenta las dependencias de sistema necesarias en Ubuntu y los modelos de Ollama recomendados para empezar.