Back to flin
flin

Escribiendo aplicaciones como en 1995 con el poder de 2026

FLIN trae de vuelta la simplicidad del desarrollo web de 1995 con el poder de un compilador, VM y base de datos de 2026.

Thales & Claude | March 30, 2026 7 min flin
EN/ FR/ ES
flinrust

En 1995, creabas index.html, escribías <h1>Hello</h1>, lo subías a un servidor y funcionaba. El ciclo de retroalimentación se medía en segundos. Un niño de doce años podía construir un sitio web en una tarde. Toda la web fue construida por personas que no eran programadores profesionales -- eran profesores, estudiantes, aficionados, propietarios de pequeñas empresas que necesitaban presencia en esa cosa nueva llamada internet.

En 2024, crear el equivalente de ese hello world requiere instalar Node.js, inicializar un proyecto, instalar React, ReactDOM, Vite, TypeScript, definiciones de tipos, Tailwind, PostCSS, Autoprefixer, ESLint, Prettier, y luego crear una docena de archivos de configuración antes de escribir una sola línea de código de aplicación. El conteo de dependencias se acerca a 2.000 paquetes. La huella en disco supera 1,5 gigabytes. El tiempo hasta el primer renderizado se mide en horas.

FLIN existe porque creemos que esta trayectoria no es inevitable. Es una elección que hizo la industria, y es una elección que podemos deshacer. No retrocediendo a las limitaciones de 1995, sino avanzando -- construyendo un lenguaje que entrega la simplicidad de aquella era con todo el poder de 2026: un compilador, una máquina virtual, una base de datos embebida, UI reactiva y un servidor HTTP. Todo detrás de un solo archivo.

La explosión de la complejidad: una línea temporal

Año     Archivos para "Hello World"    Dependencias    Archivos config    Espacio disco
----    ---------------------------    ------------    ---------------    -------------
1995    1 (index.html)                 0               0                  3 KB
2005    3 (HTML/CSS/JS)                0               0                  15 KB
2010    10 + jQuery                    5               1                  500 KB
2015    50 + Gulp                      200             5                  80 MB
2020    500 + Webpack                  1.000           10                 500 MB
2024    50.000+                        2.000           15+                1,5 GB

Cada paso en esta progresión fue racional de forma aislada. Pero el efecto agregado es que las herramientas destinadas a ayudarnos se han convertido en el problema.

La observación que inició FLIN

FLIN nació de una observación simple: la mayoría de las aplicaciones web hacen las mismas cinco cosas.

  1. Mostrar datos al usuario.
  2. Reaccionar a la entrada del usuario.
  3. Guardar datos en una base de datos.
  4. Consultar datos de una base de datos.
  5. Manejar solicitudes HTTP.

Cinco cosas. Y sin embargo, para hacer estas cinco cosas en 2024, necesitas React para la primera, una biblioteca de gestión de estado para la segunda, Prisma o TypeORM para la tercera y cuarta, Express o Fastify para la quinta, más TypeScript, Vite, ESLint, Prettier, Tailwind y una docena de archivos de configuración para conectar todo.

La pregunta que lanzó FLIN fue: ¿y si una sola herramienta hiciera las cinco cosas nativamente?

Cómo se ve FLIN: la aplicación más simple

flincount = 0

<button click={count++}>{count}</button>

Dos líneas de lógica. Una línea de vista. Guárdalo como app.flin. Ejecuta flin dev. El navegador se abre. Haces clic en el botón. El número incrementa. No hay sentencia de importación, no hay archivo de configuración, no hay paso de compilación, no hay gestor de paquetes, no hay inicialización de framework.

Cómo se ve FLIN: una aplicación real

flintodos = []
filter = "all"
newTodo = ""

entity Todo {
    title: text
    done: bool = false
    created: time = now
}

filtered = match filter {
    "all" -> Todo.all
    "active" -> Todo.where(done == false)
    "completed" -> Todo.where(done == true)
}

<main>
    <h1>My Todos</h1>

    <input value={newTodo} placeholder="What needs to be done?"
           enter={save Todo { title: newTodo }; newTodo = ""}>

    <nav>
        <button click={filter = "all"}>All</button>
        <button click={filter = "active"}>Active</button>
        <button click={filter = "completed"}>Done</button>
    </nav>

    {for todo in filtered}
        <div class="todo-item">
            <input type="checkbox" checked={todo.done}
                   change={todo.done = !todo.done; save todo}>
            <span class={if todo.done then "done" else ""}>{todo.title}</span>
            <button click={delete todo}>x</button>
        </div>
    {/for}

    <footer>{Todo.where(done == false).count} items left</footer>
</main>

Cuarenta y tres líneas. Una aplicación completa con una entidad respaldada por base de datos, UI reactiva, filtrado, creación, alternación, eliminación y un conteo en vivo de elementos restantes.

El poder detrás de la simplicidad

La simplicidad de la sintaxis de FLIN no se logra limitando sus capacidades. Se logra moviendo la complejidad al compilador y al runtime, donde pertenece.

Fuente FLIN          Lo que el compilador/runtime realmente hace
-----------          -----------------------------------------
count = 0            Asignar variable reactiva, registrar en grafo de dependencias
entity Todo {...}    Generar esquema, crear tabla, registrar métodos de consulta,
                     habilitar rastreo temporal
save todo            Serializar, escritura WAL, actualizar caché, invalidar caché,
                     actualización reactiva de UI
Todo.where(...)      Generación de consulta SQL, vinculación de parámetros,
                     deserialización de resultados, caché opcional
{for todo in ...}    Diff de DOM virtual, renderizado incremental de lista,
                     reconciliación con claves

El desarrollador escribe cinco cosas. El compilador y el runtime hacen cincuenta.

Por qué esto importa para África

FLIN fue creado en Abiyán, Costa de Marfil, y su diseño refleja las restricciones de construir software en África Occidental.

Cuando tu conexión a internet promedia 5 Mbps en un buen día, descargar 1,5 GB de node_modules no es una espera de cinco minutos -- es una odisea de varias horas que consume datos móviles costosos. Cuando los cortes de electricidad interrumpen tu trabajo, una compilación larga de Webpack que falla a mitad de camino significa empezar de nuevo.

El modelo de cero dependencias de FLIN elimina todos estos puntos de fricción. No hay nada que descargar. No hay paso de compilación en modo desarrollo. La huella de memoria se mide en megabytes, no en gigabytes.

Lo que es bueno para Lagos es bueno para Londres. Las restricciones que hacen que FLIN sea necesario en África lo hacen mejor en todas partes.

La dimensión de la IA

Hay una segunda audiencia para la simplicidad de FLIN que no existía en 1995: los generadores de código IA.

Cuando un modelo de lenguaje genera código FLIN, las probabilidades de producir un programa correcto son dramáticamente más altas que con un stack React/TypeScript/Prisma:

  • Sin importaciones que alucinar. FLIN no tiene importaciones.
  • Sin configuración que malconfigurar. FLIN no tiene archivos de configuración.
  • Un archivo por componente. La IA no necesita coordinar cambios entre directorios frontend y backend.
  • Superficie de sintaxis mínima. Menos palabras clave, menos patrones, menos formas de expresar lo mismo.

Los compromisos honestos

No puedes usar paquetes npm. FLIN no tiene gestor de paquetes ni interoperabilidad con el ecosistema JavaScript.

Estás aprendiendo un lenguaje nuevo. La sintaxis de FLIN está diseñada para ser intuitiva, pero no es JavaScript, Python ni ningún lenguaje que ya conozcas.

El ecosistema es joven. FLIN tiene 180 componentes de UI embebidos y 1.675 iconos embebidos, pero no tiene los miles de paquetes de terceros que React o Vue ofrecen.

FlinDB no es PostgreSQL. Para aplicaciones que requieren consultas SQL complejas o compatibilidad con herramientas existentes basadas en PostgreSQL, FlinDB puede no ser suficiente.

La apuesta filosófica

En 1995, la web era una plataforma abierta y accesible donde cualquiera podía participar. FLIN es una apuesta de que este compromiso entre simplicidad y potencia es falso. Que puedes tener la simplicidad de 1995 y el poder de 2026. Que un solo lenguaje puede reemplazar toda una cadena de herramientas. Que un niño de doce años que sabe HTML debería poder construir una aplicación web real.

Es una apuesta que estamos haciendo desde Abiyán, con un compilador Rust, un CTO IA, y la convicción de que los próximos millones de desarrolladores web no vendrán de San Francisco. Vendrán de Lagos, Nairobi, Dakar, Abiyán y Kinshasa. Y merecen herramientas que respeten su tiempo, su ancho de banda y su inteligencia.


Siguiente en la serie: What FLIN Looks Like in Practice: First Examples -- La teoría es barata. Aquí hay código FLIN real: una aplicación de tareas, un blog, una API, un dashboard en tiempo real y un motor de búsqueda semántica.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles