Documentación
Instalación
Todo lo que hace NSH pasa por un único comando, nsh. Compila apps escritas en Rust o TSX, las ejecuta en todas las plataformas, sirve TSX a los hosts de desarrollo con actualizaciones en caliente y empaqueta apps instalables. Puedes usarlo desde una distribución precompilada o compilarlo a partir de un clon del repositorio.
Las apps escritas en Rust también necesitan una toolchain de Rust (más abajo); las apps TSX solo necesitan nsh. Además, cada plataforma requiere sus propias herramientas:
| Plataforma | Desarrollar y empaquetar en | Requiere |
|---|---|---|
| iOS | macOS | Xcode y un runtime de simulador de iOS |
| Android | macOS, Windows o Linux | El Android SDK y un JDK; un emulador o un dispositivo |
| macOS | macOS | Las herramientas de línea de comandos de Xcode; las apps se ejecutan en macOS 14+ |
| Windows | Windows | Windows 10 1809+; el WebView2 Runtime para las web views |
| Linux | Linux | GTK 4.14+ (y sus paquetes de desarrollo para compilar el runtime) |
| GPUI (integración en apps GPUI) | macOS, Windows o Linux | Una GPU (Metal, DirectX o Vulkan); en Linux, Wayland o X11 |
El host AppKit es el predeterminado en macOS. Mac Catalyst (--target catalyst) necesita Xcode, igual que iOS. Los detalles están en Herramientas por plataforma.
#Instalar una versión publicada
Cada versión de GitHub incluye la distribución precompilada (más abajo) para macOS (Apple silicon), Linux x86_64 y Windows x86_64. Todas las formas de instalarla dejan el mismo comando nsh en tu PATH.
macOS y Linux, con el script de instalación:
curl -fsSL https://nsh.dev/install.sh | sh
Instala la distribución en ~/.nsh y enlaza ~/.local/bin/nsh a ella; al ejecutarlo de nuevo, se actualiza. NSH_VERSION=v0.1.0 fija una versión y NSH_INSTALL_DIR elige otro directorio.
Windows, en PowerShell:
irm https://nsh.dev/install.ps1 | iex
Se instala en %LOCALAPPDATA%\nsh y agrega su bin al PATH de tu usuario (abre una terminal nueva después). $env:NSH_VERSION y $env:NSH_INSTALL_DIR funcionan como arriba.
Homebrew (macOS y Linux):
brew install longbridge/tap/nsh
Scoop (Windows):
scoop install https://github.com/longbridge/nsh/releases/latest/download/nsh.json
mise (los tres sistemas):
mise use -g github:longbridge/nsh
Los archivos comprimidos (nsh-macos-arm64.tar.gz, nsh-linux-x86_64.tar.gz, nsh-windows-x86_64.zip, cada uno con un .sha256) no llevan versión en el nombre, así que https://github.com/longbridge/nsh/releases/latest/download/<archive> siempre descarga la más reciente. Los SDK de integración también se publican por separado, para apps nativas que no necesitan la CLI: nsh-embed-ios.zip y nsh-embed-android.zip.
#Para apps escritas en Rust
Instala Rust mediante rustup. nsh compila el runner de una app Rust para cada destino con Cargo, a partir de tu crate y de los crates de NSH en crates.io en la versión de la CLI, así que agrega los destinos de Rust de las plataformas en las que ejecutas:
rustup target add aarch64-apple-ios-sim aarch64-apple-ios aarch64-apple-ios-macabi # iOS simulator, devices, Mac Catalyst
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android # Android (with the SDK's NDK)
rustup target add wasm32-unknown-unknown # the web
Los escritorios se compilan para la máquina en la que estás. cargo run en el directorio de una app Rust la inicia directamente en el backend de escritorio, que se compila con las bibliotecas de desarrollo del backend (Herramientas por plataforma). Las compilaciones para Android también usan un NDK del SDK, igual que compilar el runtime de Android.
#La distribución precompilada
La distribución es un directorio, dist/nsh, con la CLI y los runtimes nativos precompilados con los que empaqueta las apps:
dist/nsh/bin/nsh # the CLI
dist/nsh/runtime/ios/iphoneos/nsh-ios-app # runs packaged apps on iOS devices
dist/nsh/runtime/ios/iphonesimulator/{nsh-ios-app,nsh-ios-host}
dist/nsh/runtime/ios/maccatalyst/nsh-ios-host # the Mac Catalyst development host
dist/nsh/runtime/android/{release,dev}/ # classes.dex, lib/<abi>/libnsh.so, symbols/<abi>/libnsh.so
dist/nsh/runtime/macos/{nsh-macos-host,nsh-macos-app} # the macOS (AppKit) development host and release runner
dist/nsh/runtime/linux/{nsh-linux-host,nsh-linux-app} # the Linux development host and release runner
dist/nsh/runtime/windows/{nsh-windows-host,nsh-windows-app}.exe # the Windows development host and release runner
dist/nsh/runtime/gpui/nsh-gpui-host[.exe] # the GPUI development host, for this OS
dist/nsh/runtime/web/{nsh.wasm,nsh-dev.wasm,nsh.js} # the web runtimes (nsh package / run --target web)
dist/nsh/embed/ios/{NativeShell,NativeShellDev}.xcframework # embedding in iOS apps
dist/nsh/embed/android/{nsh,nsh-dev}.aar # embedding in Android apps
Pon dist/nsh/bin en tu PATH (o llama a dist/nsh/bin/nsh directamente) y mantén el directorio unido: nsh encuentra los runtimes junto a sí mismo, en bin/../runtime (también a través de un enlace simbólico hacia él, como los que crean los instaladores).
export PATH="$PWD/dist/nsh/bin:$PATH"
nsh --version
La distribución se crea con cargo xtask dist en un clon del repositorio (más abajo). El binario nsh que contiene se compila para esa máquina. En un Mac con Xcode incluye los runtimes de iOS y macOS (Apple Silicon); en Linux incluye en su lugar el runtime de Linux, compilado para esa máquina; en Windows, el runtime de Windows, con bin\nsh.exe. Cada una incluye además el host de desarrollo de GPUI, compilado para esa máquina. Todas incluyen el runtime de Android (en Windows solo cuando se encuentra el Android SDK).
#Instalar el código fuente más reciente
En macOS y Linux, instala el main más reciente con Git, Rust y las dependencias de compilación de la plataforma que se indican abajo:
curl -fsSL https://nsh.dev/install.sh | sh -s -- --source
nsh -V # nsh 0.1.1 (abcdef0)
El instalador mantiene el clon en ~/.nsh/source, compila la CLI en modo release y la enlaza en ~/.local/bin. Vuelve a ejecutar el comando para actualizar; los cambios locales en el código fuente deben guardarse antes. El clon conservado permite que NSH compile runtimes nativos bajo demanda. Cargo usa su configuración y su directorio de destino existentes. NSH_INSTALL_DIR cambia el prefijo de instalación; NSH_VERSION selecciona solo versiones precompiladas. Tanto -V como --version muestran la versión y la revisión del código fuente de siete caracteres.
#Compilar desde un clon del repositorio
Necesitas Rust mediante rustup. El rust-toolchain.toml del repositorio selecciona la toolchain estable e instala los destinos de iOS y Android la primera vez que se usa.
git clone https://github.com/longbridge/nsh.git
cd nsh
cargo build -p nsh-cli # ./target/debug/nsh
Luego compila, una sola vez, el host de desarrollo de cada destino en el que quieras ejecutar, y de nuevo cada vez que actualices el clon:
cargo build -p nsh-ios-host --target aarch64-apple-ios-macabi # nsh run (Mac Catalyst window)
cargo build -p nsh-ios-host --target aarch64-apple-ios-sim # nsh run --target ios
cargo xtask android --dev # nsh run --target android
cargo build -p nsh-macos-host # nsh run --target macos (built for you in a checkout)
cargo build -p nsh-linux-host # nsh run on Linux (built for you in a checkout)
cargo build -p nsh-windows-host # nsh run on Windows (built for you in a checkout)
cargo build --manifest-path crates/gpui/Cargo.toml --target-dir target -p nsh-gpui-host # nsh run --target gpui (built for you in a checkout)
cargo build --profile web -p nsh-platform-web --target wasm32-unknown-unknown # nsh run --target web (built for you in a checkout)
Para nsh package, compila también los runners en modo release:
cargo build -p nsh-ios-app --target aarch64-apple-ios-sim # nsh package --target ios-simulator
cargo build -p nsh-ios-app --target aarch64-apple-ios # nsh package --target ios
cargo xtask android # nsh package --target android
cargo build -p nsh-macos-app # nsh package --target macos
cargo build -p nsh-linux-app # nsh package --target linux
cargo build -p nsh-windows-app # nsh package --target windows
# nsh package --target web uses the same web runtime as nsh run --target web
Una CLI compilada desde un clon busca los runtimes en target/<triple>/<profile> (los de macOS, Linux, Windows y GPUI, compilados para esta máquina, en target/<profile>) y en target/android/<profile>[-dev], usando su propio perfil: ./target/debug/nsh usa runtimes de depuración y ./target/release/nsh, runtimes release. Compila ambos con el mismo perfil (agrega --release a todos para obtener apps más rápidas).
#Herramientas por plataforma
#iOS y Mac Catalyst
- Xcode (con sus herramientas de línea de comandos).
nsh runusaxcrun simctlpara arrancar simuladores e instalar el host de desarrollo;nsh packageusaactoolpara los iconos de la app ycodesignpara firmar. - Un runtime de simulador de iOS. Si no hay ninguno instalado, instala uno con
xcodebuild -downloadPlatform iOS. - Las apps apuntan a iOS 15.0 y posteriores.
#Android
- El Android SDK, localizado mediante
ANDROID_HOME,ANDROID_SDK_ROOTo la ubicación predeterminada de Android Studio (~/Library/Android/sdk,%LOCALAPPDATA%\Android\Sdken Windows), con:platforms;android-35y unbuild-toolsreciente (NSH usaaapt2,zipalignyapksignerde él, sin Gradle);platform-tools(adb).
- Un JDK (
keytoolcrea el keystore de depuración en~/.android/debug.keystorela primera vez que empaquetas,apksignernecesita Java). - Un emulador en ejecución o un dispositivo conectado mediante
adb. Las apps necesitan Android 9 (API 28) o posterior.
sdkmanager "platforms;android-35" "build-tools;35.0.1" "platform-tools"
#macOS
- Las herramientas de línea de comandos de Xcode (
xcode-select --install): el SDK y clang para compilar el runtime,codesignysipspara empaquetar apps. - Las apps necesitan macOS 14 o posterior.
Consulta macOS.
#Linux
- GTK 4.14 o posterior, con sus paquetes de desarrollo y clang para compilar el runtime:
libgtk-4-dev clang(Debian, Ubuntu 24.04 o posterior),gtk4 clang(Arch),gtk4-devel clang(Fedora). - WebKitGTK 6.0 (2.40 o posterior) para las web views:
libwebkitgtk-6.0-dev(Debian, Ubuntu),webkitgtk-6.0(Arch),webkitgtk6.0-devel(Fedora) para compilar el runtime; las apps lo necesitan después en el lugar donde se ejecutan. Sin él,cargo xtask distcompila el runtime con marcadores de posición para las web views. - Plugins de GStreamer para los formatos de vídeo que reproducen las apps.
Consulta Linux.
#Windows
- Windows 10 1809 o posterior, o Windows 11. El WebView2 Runtime (parte de Windows 11, instalado con Edge en Windows 10) para las web views.
- Para compilar el runtime: Visual Studio Build Tools con la carga de trabajo “Desarrollo de escritorio con C++” y el Windows SDK, y LLVM (libclang, para los bindings de QuickJS; se busca en
C:\Program Files\LLVM, y si no, defineLIBCLANG_PATH).
Consulta Windows.
#Compilar el runtime de Android
Compilar el runtime de Android desde un clon del repositorio (cargo xtask android) requiere además un NDK del SDK (ndk;<version>; define ANDROID_NDK_HOME si el más reciente instalado está incompleto) y javac.
#Qué funciona dónde
| Comando | macOS | Linux | Windows |
|---|---|---|---|
nsh init, nsh build, nsh test, nsh dev, nsh check |
Sí | Sí | Sí |
nsh run --target catalyst (Mac Catalyst) |
Sí | No | No |
nsh run --target macos, nsh package --target macos |
Sí | No | No |
nsh run --target linux (el predeterminado en Linux), nsh package --target linux |
No | Sí | No |
nsh run --target windows (el predeterminado en Windows), nsh package --target windows |
No | No | Sí |
nsh run --target gpui (el backend que integran las apps GPUI) |
Sí | Sí | Sí |
nsh run --target ios, nsh package --target ios / ios-simulator |
Sí, con Xcode | No | No |
nsh run --target android, nsh package --target android |
Sí | Sí, desde un clon del repositorio | Sí, con el runtime de Android |
nsh keygen, certify, publish, verify, revoke |
Sí | Sí | Sí |
En Linux, compila la CLI y el runtime de Android desde un clon del repositorio (cargo build -p nsh-cli y cargo xtask android --dev); la toolchain de Linux del NDK se usa automáticamente. En Windows, la toolchain de Windows del NDK se usa del mismo modo, y cargo xtask dist incluye el runtime de Android cuando encuentra el Android SDK.
#Configuración del editor
Una app Rust es un proyecto de Cargo: rust-analyzer (VS Code, Zed, Neovim, RustRover) la revisa y autocompleta la API de NSH, con sus comentarios de documentación, como con cualquier crate.
Para TSX, NSH no necesita NPM. nsh init escribe un tsconfig.json y las declaraciones de tipos de todo lo que ofrece NSH en .nsh/types, y todos los comandos que compilan la app los mantienen actualizados. Cualquier editor que use el servidor de lenguaje de TypeScript (VS Code, Zed, Neovim, WebStorm) comprueba los tipos de la app con ellos. Consulta Estructura del proyecto.
#Siguientes pasos
Continúa con Primeros pasos para crear una app y ejecutarla.