---
title: "Cargo: Feature Not Found — Como Resolver"
url: "https://rustlang.com.br/erros/cargo-feature-not-found/"
markdown_url: "https://rustlang.com.br/erros/cargo-feature-not-found.MD"
description: "Como resolver o erro 'feature not found' do Cargo no Rust. Aprenda sobre feature flags, como encontrar features disponíveis e configurar Cargo.toml corretamente."
date: "2026-02-23"
author: "Equipe Rust Brasil"
---

# Cargo: Feature Not Found — Como Resolver

Como resolver o erro 'feature not found' do Cargo no Rust. Aprenda sobre feature flags, como encontrar features disponíveis e configurar Cargo.toml corretamente.


# Cargo: Feature Not Found

O erro **"feature not found"** ocorre quando você especifica uma **feature flag** no `Cargo.toml` que não existe no crate. Features no Rust são um mecanismo de compilação condicional que permite ativar ou desativar funcionalidades opcionais de uma dependência.

## A Mensagem de Erro

```
error: failed to select a version for `serde`.
    ... required by package `meu-projeto v0.1.0`
versions that meet the requirements `^1` are: 1.0.197, ...

the package `meu-projeto` depends on `serde`, with features: `derivar` did you mean `derive`?
```

Outra variação:

```
error: Package `tokio v1.36.0` does not have feature `todas`. It has the following features:
bytes, fs, io-std, io-util, libc, macros, mio, net, parking_lot, process, ...
```

## O Que Significa

**Feature flags** são funcionalidades opcionais que um crate pode oferecer. Elas permitem:

- Reduzir o tempo de compilação (só compila o que você precisa)
- Reduzir o tamanho do binário
- Evitar dependências desnecessárias
- Oferecer APIs opcionais

Quando você especifica uma feature que não existe no crate, o Cargo não sabe o que ativar e reporta o erro. As causas comuns são:

1. **Erro de digitação** no nome da feature
2. **Feature renomeada** em nova versão do crate
3. **Feature que não existe** naquele crate
4. **Confusão entre crates** — a feature pertence a outro crate

## Código com Erro

```toml
# Cargo.toml

[dependencies]
# ERRO: "derivar" não existe — o correto é "derive"
serde = { version = "1", features = ["derivar"] }

# ERRO: "todas" não existe — o correto é "full"
tokio = { version = "1", features = ["todas"] }

# ERRO: "json" não é feature do serde, e sim do serde_json
serde = { version = "1", features = ["json"] }
```

## Como Resolver

### Solução 1: Verificar o Nome Correto da Feature

Consulte a documentação do crate para ver as features disponíveis:

```bash
# Ver features disponíveis via cargo
cargo add serde --dry-run

# Ou consulte o Cargo.toml do crate no repositório/docs.rs
```

Corrija os nomes:

```toml
[dependencies]
# Nomes corretos
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", features = ["json", "rustls-tls"] }
```

### Solução 2: Consultar docs.rs ou crates.io

Cada crate no [docs.rs](https://docs.rs) lista suas features. Acesse:

- `https://docs.rs/nome-do-crate/latest/` -- Documentacao
- `https://crates.io/crates/nome-do-crate` -- Pagina do crate

No `crates.io`, as features aparecem na seção "Feature flags" da página do crate.

### Solução 3: Usar `cargo add` com Features

O `cargo add` facilita adicionar dependências com features corretas:

```bash
# Adicionar com features específicas
cargo add tokio --features rt-multi-thread,macros,io-util

# Adicionar com todas as features
cargo add tokio --features full

# Ver features disponíveis
cargo add tokio --dry-run
```

### Solução 4: Verificar o Cargo.toml do Crate

Veja o `Cargo.toml` do crate diretamente no repositório GitHub. A seção `[features]` lista todas as features disponíveis:

```toml
# Exemplo: Cargo.toml do tokio
[features]
default = []
full = ["fs", "io-util", "io-std", "macros", "net", "parking_lot",
        "process", "rt", "rt-multi-thread", "signal", "sync", "time"]
fs = []
io-util = ["bytes"]
macros = ["tokio-macros"]
net = ["libc", "mio/net", "socket2"]
rt = []
rt-multi-thread = ["rt"]
# ...
```

## Features Comuns dos Crates Mais Populares

### serde
```toml
serde = { version = "1", features = ["derive"] }
# Features: derive, alloc, rc, unstable
```

### tokio
```toml
tokio = { version = "1", features = ["full"] }
# Ou selecione apenas o que precisa:
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util"] }
# Features: bytes, fs, full, io-std, io-util, macros, net, parking_lot,
#           process, rt, rt-multi-thread, signal, sync, time, test-util
```

### reqwest
```toml
reqwest = { version = "0.12", features = ["json", "rustls-tls"] }
# Features: blocking, cookies, default-tls, gzip, json, multipart,
#           native-tls, rustls-tls, stream
```

### sqlx
```toml
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres"] }
# Features: runtime-tokio-native-tls, runtime-tokio-rustls,
#           runtime-async-std-native-tls, runtime-async-std-rustls,
#           postgres, mysql, sqlite, any, macros, migrate
```

### clap
```toml
clap = { version = "4", features = ["derive"] }
# Features: cargo, color, derive, env, error-context, help, std,
#           string, suggestions, unicode, usage, wrap_help
```

## Definindo Suas Próprias Features

No seu `Cargo.toml`:

```toml
[features]
default = ["json"]           # Features ativadas por padrão
json = ["dep:serde_json"]    # Ativa dependência opcional
logging = ["dep:log", "dep:env_logger"]
testes-integracao = []

[dependencies]
serde_json = { version = "1", optional = true }
log = { version = "0.4", optional = true }
env_logger = { version = "0.11", optional = true }
```

Uso no código:

```rust
#[cfg(feature = "json")]
pub mod json_parser {
    use serde_json::Value;

    pub fn parsear(texto: &str) -> serde_json::Result<Value> {
        serde_json::from_str(texto)
    }
}

#[cfg(feature = "logging")]
pub fn iniciar_log() {
    env_logger::init();
}
```

## Compilando com Features Específicas

```bash
# Compilar sem features default
cargo build --no-default-features

# Compilar com features específicas
cargo build --features "json,logging"

# Compilar com todas as features
cargo build --all-features
```

## Veja Também

- [Cargo: Unresolved Import](/erros/cargo-unresolved-import/)
- [Cargo: Could Not Compile](/erros/cargo-could-not-compile/)
- [E0412: Tipo Não Encontrado](/erros/e0412-tipo-nao-encontrado/)
- [Cheatsheet Rust](/cheatsheet/)
- [Documentação do Cargo: Features](https://doc.rust-lang.org/cargo/reference/features.html)
