Instalar Rust con rustup
rustup no es un instalador, es un gestor de toolchains. Stable y nightly conviviendo, componentes, targets de cross-compilación y por qué una sola herramienta gobierna todas tus versiones de Rust.
No instalas “Rust”: instalas rustup, y rustup instala, actualiza y hace convivir tantas versiones del compilador como necesites. Entender esta distinción desde el primer minuto te ahorra el error clásico de instalar Rust desde el gestor de paquetes del sistema y quedarte atrapado en una versión de hace dos años.
- Instalar la toolchain oficial con
rustup. - Entender los tres canales: stable, beta y nightly.
- Añadir componentes y targets de compilación.
- Fijar la toolchain por proyecto de forma reproducible.
rustup: instalar de una vez
rustup es el instalador oficial y, sobre todo, el gestor de versiones. Una sola orden monta todo:
# la vía canónica (rustup.rs)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# comprueba lo instalado
rustc --version # el compilador
cargo --version # el gestor de paquetes y build
rustup --version # el propio gestor de toolchains
rustup deja dos directorios clave: ~/.rustup (las toolchains) y ~/.cargo (el registro, la caché y los binarios en ~/.cargo/bin, que debe estar en tu PATH). Los ejecutables rustc y cargo que invocas son en realidad proxies de rustup: interceptan la llamada y la redirigen a la toolchain activa.
El paquete rustc de tu distro suele ir muy por detrás y no te deja tener varias versiones ni cambiar de canal. Para desarrollo, rustup es la única opción sensata. Si ya instalaste Rust por el sistema, desinstálalo antes para evitar que dos rustc compitan en el PATH.
Los tres canales: el tren de releases
Rust se publica con un modelo de tren de tres vías que avanza cada seis semanas:
flowchart LR N[nightly cada dia] --> B[beta seis semanas] B --> S[stable seis semanas] S --> V[version fijada 1.x]
- stable: la vía de producción. Cada seis semanas sale una versión nueva (1.85, 1.86, …) con garantías de estabilidad: lo que compila hoy seguirá compilando.
- beta: la próxima stable, en periodo de pruebas. Sirve para adelantarte a regresiones antes de que lleguen.
- nightly: se compila cada noche desde
master. Es la única que habilita features inestables tras un#![feature(...)]. Herramientas como Miri viven aquí.
rustup default stable # canal por defecto
rustup toolchain install nightly # añade nightly sin quitar stable
rustup update # actualiza todas las toolchains
rustup toolchain list # qué tienes instalado
cargo +nightly build # usa nightly puntualmente con +canal
La edición 2024 exige stable 1.85 o superior; en 2026 el stable va por la serie 1.9x, así que cualquier instalación fresca la soporta de sobra.
El sufijo +canal funciona con cualquier proxy: cargo +nightly, rustc +beta, incluso cargo +1.85. Es la forma de invocar una toolchain concreta sin tocar tu default, ideal para comprobar si un fallo es una regresión introducida entre versiones.
Componentes y targets
Una toolchain es modular. Los componentes son piezas opcionales del mismo canal:
rustfmt
El formateador oficial. Se invoca con cargo fmt.
clippy
El linter que enseña Rust idiomático, vía cargo clippy.
rust-analyzer
El servidor LSP que da inteligencia a tu editor.
rust-src
El fuente de la librería estándar, que rust-analyzer y Miri necesitan.
rustup component add clippy rustfmt rust-analyzer rust-src
Los targets son plataformas para las que compilar. Tu host trae el suyo; para cross-compilar añades más:
rustup target add wasm32-unknown-unknown # WebAssembly
rustup target add x86_64-unknown-linux-musl # binario estático para Linux
rustup target add aarch64-apple-darwin # Apple Silicon
cargo build --target wasm32-unknown-unknown
Un target se nombra con la tripleta arquitectura-vendor-sistema-abi. Añadir uno solo descarga la std precompilada para esa plataforma; el compilador ya sabe generar su código.
Al instalar una toolchain, rustup aplica un perfil que decide cuántos componentes trae de serie. Puedes ajustarlo y auditar tu instalación:
rustup set profile minimal # solo rustc, cargo y std (ideal en CI)
rustup show # toolchain activa, componentes y targets
rustup which cargo # a qué binario real apunta el proxy
rustup doc --std # abre la doc de la std, sin conexión
Los perfiles van de minimal (lo justo para compilar) a complete (todo, incluido lo que a veces está roto en nightly); default es el término medio sensato para desarrollar a diario.
Una vez descargada, toda tu toolchain vive en ~/.rustup. rustup doc abre la documentación local en el navegador y cargo compila sin red mientras las dependencias ya estén en la caché de ~/.cargo. Útil en aviones y en runners de CI con cachés persistentes.
Fijar la toolchain por proyecto
La reproducibilidad exige que todo el equipo (y la CI) use la misma versión. Se declara en un archivo en la raíz del repo:
[toolchain]
channel = "1.90.0"
components = ["clippy", "rustfmt", "rust-analyzer"]
targets = ["wasm32-unknown-unknown"]
Al entrar en ese directorio, rustup instala y selecciona automáticamente esa toolchain. Nadie compila “con lo que tenga puesto”.
El error mental de quien viene de C o de Python es pensar que “el compilador” es una cosa única instalada en el sistema. En Rust, tener varias toolchains conviviendo no es un caso raro: es el flujo normal. Desarrollas en stable, verificas una regresión en beta, pruebas una feature experimental en nightly y compilas para tres plataformas distintas, todo desde el mismo directorio y sin virtualizar nada. Los proxies de rustup hacen que cargo signifique “el cargo correcto para este proyecto ahora mismo”, resolviendo el canal por override de directorio, luego por rust-toolchain.toml y por último por el default global, en ese orden. Interiorizar que la versión del compilador es un dato del proyecto —versionado, reproducible, explícito— y no del ordenador, es el primer hábito de ingeniería serio en Rust. Es lo que hace que “en mi máquina funciona” deje de existir como excusa.
- Instala Rust con
rustupy confirma las versiones derustc,cargoyrustup. - Añade la toolchain
nightlyy ejecutarustc +nightly --versionsin cambiar tu default. - Añade los componentes
clippy,rustfmtyrust-analyzer. - Añade el target
wasm32-unknown-unknowny comprueba que aparece enrustup target list --installed. - Crea un
rust-toolchain.tomlque fije el canalstabley ábrelo desde otro directorio para ver el cambio automático.