Funciones
Todo lo que hace Lingua. Sin adornos.
Cada línea de esta página corresponde a comportamiento que ya se distribuye en el binario desktop. Donde todavía no estamos, lo decimos. Screenshots y videos cortos llegan con v0.3; hasta entonces, cada visual aquí representa la UI real renderizada en HTML.
Lenguajes
Cinco runners. Una ventana.
Cada lenguaje tiene su runner con defaults adecuados. JS / TS / Python vienen con Lingua. Go y Rust usan las toolchains que ya tienes en tu máquina.
JavaScript
FreeRuntime Web Worker · timeouts controlados por el padre
// runs in a sandboxed worker, capped output, instant feedback
const reqs = ['/api/health', '/api/version', '/api/build'];
const probes = await Promise.all(
reqs.map((u) => fetch(u).then((r) => [u, r.status]))
);
console.table(Object.fromEntries(probes));TypeScript
FreeRuntime esbuild-wasm transpila → worker JS
// type-check happens in your editor; runtime is the JS worker
type Tier = 'free' | 'pro' | 'pro_lifetime' | 'team';
const limits: Record<Tier, number | 'unlimited'> = {
free: 5, pro: 'unlimited', pro_lifetime: 'unlimited', team: 'unlimited',
};
console.log(limits.free); //=> 5Python
FreeRuntime Pyodide v0.26.4 · offline vendored en desktop
# zero install — Pyodide ships inside the binary
import statistics
samples = [42, 51, 39, 47, 55, 38, 49, 44, 52, 46]
print({
'mean': round(statistics.mean(samples), 2),
'stdev': round(statistics.stdev(samples), 2),
})Go
ProRuntime Toolchain local de Go · env mínimo de subprocess
package main
import "fmt"
func main() {
langs := []string{"js", "ts", "python", "go", "rust"}
fmt.Printf("lingua runs %d languages\n", len(langs))
}Rust
ProRuntime Toolchain local rustc · tmpdir limpio por run
fn main() {
let langs = ["js", "ts", "python", "go", "rust"];
let total: usize = langs.iter().map(|l| l.len()).sum();
println!("{} chars across {} langs", total, langs.len());
}Ruby, Java, Kotlin, Scala, Swift, C y C++ están registrados pero todavía no se ejecutan dentro de Lingua. No pretendemos lo contrario.
Editor
Monaco, con lo que realmente usas.
El editor que impulsa VS Code, conectado como espera un developer senior: modo Vim que no pelea con la app, paleta de comandos real y atajos personalizables.
- Monaco editor con resaltado de sintaxis e IntelliSense en cada lenguaje soportado.
- Vim mode vía
monaco-vim— opt-in desde Settings → Editor. Comandos modales, registers, marks y la status line que esperas. - Paleta de comandos (⌘ ⇧ P) alcanza cada acción: runners, utilidades, settings y cambio de lenguaje.
- Atajos personalizados con editor dentro de la app. Exporta e importa como JSON.
- Format on save por lenguaje: prettier / ruff / gofmt / rustfmt donde esté disponible.
Flujo
Snippets, historial y un modelo sano de env.
La infraestructura alrededor del editor evita que un scratchpad se convierta en desorden después de la tercera pestaña.
Historial de ejecución con diff
Cada ejecución se captura localmente. Compara runs consecutivos lado a lado, restaura una versión anterior o borra el historial con un atajo. Los snapshots son opt-in y nunca salen del dispositivo.
- const tier = 'free';
- console.log(limits[tier]);
//=> 5 + const tier = 'pro';
+ console.log(limits[tier]);
//=> 'unlimited' Variables de entorno en tres capas
Globales abajo, overrides de proyecto en medio y valores de pestaña arriba. La última escritura gana. El env efectivo se calcula al ejecutar: sin herencia oculta ni ruleta de archivos .env.
Global
Disponible para cada snippet en cada proyecto.
- GITHUB_TOKEN = <redacted> global
- NODE_ENV = development global
Proyecto
Cargado solo para snippets dentro del root de proyecto activo.
- API_BASE_URL = https://staging.api project
- NODE_ENV = staging proyecto (sobrescribe global)
Pestaña
Gana. Defínelo inline para el snippet que ejecutas ahora.
- API_BASE_URL = http://localhost:3000 pestaña (sobrescribe proyecto)
Snippets, proyectos y quick-open
- Snippets — guarda cualquier cosa que deba sobrevivir al cierre de la pestaña. Free limita a 5; Pro quita el límite.
- Project root — apunta Lingua a una carpeta y quick-open (⌘ P) la indexa en background.
- Project search — busca por contenido en todo el árbol, limitado al root activo.
- Theme presets — importa / exporta tu tema del editor. Vienen tres presets oscuros y uno claro.
Utilidades
Los 29 paneles que reemplazan tus tabs del navegador.
Formateador JSON, tester regex, decodificador JWT, hash, parser cron, conversor de color y veintitrés más. Todo integrado, accesible por teclado y offline.
Utilidades developer
29 paneles integrados.
Las pestañas del navegador que suelen rodear a un runner — formateador JSON, regex, JWT, diff, hash, cron, color y más — ya viven dentro de Lingua.
- Formateador JSON
- YAML / JSON
- JSON / CSV
- Formateador SQL
- Embellecer / Minificar
- Case de texto
- Inspector de texto
- Tester Regex
- Visor Diff
- Preview Markdown
- Lorem Ipsum
- Texto aleatorio
- Entidad HTML
- Parser URL
- URL Encode
- curl → Código
- HTML → JSX
- Escape backslash
- Base64
- Imagen Base64
- Decodificador JWT
- Hash
- UUID
- Base numérica
- Conversor de color
- SVG → CSS
- Generador QR
- Parser Cron
- Timestamp
Privacidad y seguridad
Los detalles aburridos que necesitas para confiar.
Lingua ejecuta el código que escribes. Lo tomamos en serio: tanto en lo que nunca recopilamos como en cómo el runtime contiene tus snippets.
Telemetría desactivada por defecto
Nada sale de tu dispositivo hasta que das consentimiento explícito en el prompt inicial. Incluso activada, los payloads son nombres de eventos anónimos con la versión de la app: nunca tu código, nunca rutas de archivos, nunca un vendor de terceros.
Ejecución en sandbox
JS/TS/Python corren en workers con timeouts controlados por el padre y salida limitada. Los subprocesses Go/Rust heredan un env mínimo (PATH, HOME, LANG, TMPDIR). El IPC de filesystem usa un registro de capacidades: el renderer solo toca rutas bajo roots aprobados.
CSP estricta
El renderer desktop trae una CSP que bloquea scripts remotos e imports de módulos no aprobados. Todo lo que Lingua necesita en runtime viene empaquetado, incluido Pyodide v0.26.4, con integridad fijada en runtime-assets.lock.json.
Distribución
Builds verificables, licencias offline.
Cada release está firmada, notarizada cuando el sistema lo exige, acompañada de checksums y bloqueada por npm audit. Las licencias se verifican offline: sin phone-home al iniciar.
$ shasum -a 256 -c SHA256SUMS.txt
Lingua-0.2.1-arm64.zip: OK
Lingua-0.2.1-x64.zip: OK
LinguaSetup.exe: OK
lingua_0.2.1_amd64.deb: OK - macOS Apple Developer ID · notarizado · limpio para Gatekeeper
- Windows Authenticode · reputación SmartScreen en progreso
- Linux .deb y .rpm con firma de maintainer
- Canal estable, releases draft-first — las releases se crean como draft, pasan smoke test sobre un build empaquetado y luego se promueven. Ningún binario llega sin ese gate.
- SHA256SUMS.txt se publica junto a cada release. Verifica antes de instalar.
- Verificación offline de licencias — los tokens Pro están firmados con Ed25519 y se verifican contra una llave pública embebida. Sin cuenta, sin check de servidor.
- Auto-updates se mantienen en el mismo canal firmado. Puedes desactivarlas por instalación.
- Source-available bajo la Licencia Comercial de Lingua. Compílalo tú mismo si quieres auditar lo que corre en tu máquina.
- Pipeline de release auditable — cada paso vive en
.github/workflows/release.ymlen el repo público.