Ky vs Axios — Qual escolher em projetos modernos JavaScript?

Ky vs Axios — Qual escolher em projetos modernos JavaScript?

Nos últimos anos surgiram várias formas de fazer requisições HTTP no frontend e no backend. Durante muito tempo o Axios foi a escolha padrão, mas com a chegada do fetch nativo e bibliotecas modernas como Ky, essa decisão começou a mudar.

Nos últimos anos surgiram várias formas de fazer requisições HTTP no frontend e no backend. Durante muito tempo o Axios foi a escolha padrão, mas com a chegada do fetch nativo e bibliotecas modernas como Ky, essa decisão começou a mudar.

Neste artigo vamos ver:

  • Diferença entre Ky e Axios

  • Vantagens do Ky

  • Exemplos comparando os dois

  • Quando faz sentido usar Axios

  • Respostas para dúvidas comuns

O que é Axios

O Axios é um cliente HTTP muito popular que funciona tanto no browser quanto no Node.js.

Ele usa internamente:

  • Browser → XMLHttpRequest

  • Node → módulos http/https

Exemplo:

import axios from 'axios'

const response = await axios.get('/api/users')

console.log(response.data)

Características:

  • Muito completo

  • API madura

  • Suporte a interceptors

  • Funciona em qualquer ambiente

Mas também:

  • Bundle maior

  • Não usa fetch

  • API mais verbosa

O que é Ky

O Ky é um cliente HTTP moderno baseado em Fetch API.

Ele é minimalista, leve e pensado para aplicações modernas.

Exemplo:

import ky from 'ky'

const data = await ky.get('/api/users').json()

console.log(data)

Características:

  • Muito leve

  • Baseado em fetch

  • API moderna

  • Retry automático

  • Hooks simples

  • Melhor para frontend moderno

Comparação direta

RecursoAxiosKy
BaseXMLHttpRequest / httpfetch
Bundlemaiormuito menor
APImais verbosaminimalista
Retrymanualnativo
Timeoutsimsim
Interceptorcompletohooks
Progresssimnão
Node.jsexcelenteok (Node 18+)
Front modernookexcelente

Exemplos equivalentes

GET

Axios

const res = await axios.get('/api/users')
const data = res.data

Ky

const data = await ky.get('/api/users').json()

POST

Axios

await axios.post('/api/users', {
name: 'John'
})

Ky

await ky.post('/api/users', {
json: {
name: 'John'
}
})

Headers

Axios

await axios.get('/api', {
headers: {
Authorization: token
}
})

Ky

await ky.get('/api', {
headers: {
Authorization: token
}
})

Instância

Axios

const api = axios.create({
baseURL: '/api'
})

Ky

const api = ky.create({
prefixUrl: '/api'
})

Vantagens do Ky sobre Axios

✅ 1. Bundle muito menor

Ky ≈ ~4kb

Axios ≈ ~30kb+

Em frontend moderno isso faz diferença.

✅ 2. Usa fetch nativo

Hoje navegadores e Node já suportam fetch.

Então o Ky não precisa reinventar a roda.

✅ 3. API mais limpa

Axios

response.data

Ky

.json()

Mais explícito e moderno.

✅ 4. Retry automático

Ky

ky.get('/api', { retry: 3 })

Axios precisa plugin.

✅ 5. Hooks mais simples

const api = ky.create({
hooks: {
beforeRequest: [
req => {
req.headers.set('Authorization', token)
}
]
}
})

✅ 6. Melhor para projetos modernos

React

Next.js

Vue

Vite

Node 18+

Cloudflare

Edge

Deno

Todos já usam fetch.

❓ O log de erros tem um glossário disponível para debugar em conjunto?

No Axios os erros são mais estruturados:

error.response
error.request
error.config

Isso facilita debug.

No Ky, o erro é baseado no fetch:

HTTPError
TimeoutError
AbortError

Exemplo:

try {
await ky.get('/api').json()
} catch (error) {
if (error.name === 'HTTPError') {
const body = await error.response.json()
}
}

Ou seja:

  • Axios → mais detalhado

  • Ky → mais simples, mas suficiente

Para projetos modernos, o padrão fetch costuma ser suficiente.

❓ Se o fetch já existe, por que usar Axios?

Essa é uma ótima pergunta.

Hoje muitos projetos não precisam mais de Axios.

Se o projeto usa:

  • Node 18+

  • Next.js 13+

  • React moderno

  • Browser moderno

Você já tem fetch.

Então adicionar Axios pode ser desnecessário.

Motivos para ainda usar Axios:

  • suporte a Node antigo

  • interceptors complexos

  • progresso upload/download

  • libs antigas dependem

  • backend pesado

Mas em projetos novos, muitas vezes faz mais sentido:

fetch puro

ou

Ky

❓ Então por que usar Ky se já existe fetch?

Porque o fetch é muito básico.

Ky adiciona:

  • retry

  • timeout

  • hooks

  • json automático

  • prefixUrl

  • melhor ergonomia

Sem adicionar peso.

Exemplo fetch puro:

const res = await fetch('/api/users')
const data = await res.json()

Com Ky:

const data = await ky.get('users').json()

Menos código

mais recursos

mesmo runtime

Conclusão

Axios continua sendo excelente.

Mas para projetos modernos, o Ky é muitas vezes uma escolha melhor:

  • mais leve

  • mais simples

  • usa fetch

  • menos dependência

  • melhor para frontend moderno

Se você está começando um projeto hoje, vale considerar seriamente usar Ky ou fetch antes de adicionar Axios.