Medidor de velocidad de red nativo para macOS (SwiftUI), con interfaz clara al estilo Tahoe. Mide contra los endpoints públicos de Cloudflare: sin dependencias externas, sin binarios de terceros y sin cuentas — solo Swift y el SDK del sistema.
| Métrica | Cómo se obtiene |
|---|---|
| Descarga | 6 carriles paralelos contra GET /__down?bytes=100000000 |
| Subida | 4 carriles paralelos contra POST /__up con bloques de 20 MB |
| Latencia | 20 sondas GET /__down?bytes=0, se reporta la mediana y el mínimo |
| Jitter | Promedio de la diferencia absoluta entre sondas consecutivas |
| Latencia bajo carga | Sondas de latencia lanzadas mientras la descarga satura el enlace |
| Bufferbloat | Cuánto sube la latencia al saturar, con calificación A–F |
El resultado principal es la velocidad sostenida: se descarta el primer 30 % de cada fase (arranque lento de TCP) y se divide el total de bytes de la ventana restante entre su duración. El pico se muestra aparte para no inflar la cifra principal.
./build.sh # compila y deja dist/Nodo.app
./build.sh --install # además la copia a /ApplicationsLuego:
open dist/Nodo.appAtajos: ⌘R inicia el test, ⌘. lo cancela.
Solo las Command Line Tools de Xcode — no hace falta Xcode completo:
xcode-select --installNota: en el SDK de macOS 26+ el atributo
@Statepasó a ser un macro cuyo plugin (SwiftUIMacros) solo se distribuye con Xcode. Para que el proyecto compile con las Command Line Tools, el estado local de la vista declara a mano el almacenamiento que ese macro generaría (verContentView.swift).
Cada medición se guarda en
~/Library/Application Support/Nodo/history.json y se puede exportar a CSV
desde el panel lateral o con el menú Test → Exportar historial a CSV.
Sources/Nodo/
NodoApp.swift punto de entrada y menús
ContentView.swift pantalla principal y panel de historial
SpeedTestEngine.swift orquestación del test y cálculo de velocidad
TransferDelegate.swift carriles de transferencia y conteo de bytes
SpeedGauge.swift velocímetro con escala por tramos
Components.swift tarjetas, gráfica en vivo y paleta clara
HistoryStore.swift persistencia y exportación
Models.swift modelos y formato
Tools/MakeIcon.swift genera el icono .icns (monograma) con Core Graphics
build.sh compila y ensambla el bundle .app
La app solo habla con speed.cloudflare.com. El endpoint /meta devuelve tu IP
pública, tu ASN/ISP y el centro de datos de Cloudflare que te atendió; eso se
muestra en pantalla y se guarda en el historial local. Nada sale de tu Mac.
MIT.