Elysia JS vs Hono Untuk Pemula Lebih Baik Pilih Mana

ElysiaJS vs Hono, framework mana yang lebih cocok untuk pemula di 2026? Keduanya adalah framework backend TypeScript modern yang menawarkan performa jauh lebih cepat dari Express. Artikel ini membandingkan kedua framework dari segi syntax, performa, kemudahan belajar, dan use case. Dengan uji coba praktis membangun CRUD katalog mobil Porsche, kamu akan mendapat gambaran jelas mana yang sesuai untuk project-mu.

Saya Angga Risky Setiawan, Founder dan CEO BuildWithAngga. Setelah mengajar 900.000+ students di Indonesia, saya sering mendapat pertanyaan: "Kalau mau belajar backend modern, mulai dari mana?" Di 2026, jawabannya tidak lagi Express. Ada dua framework yang sedang naik daun — ElysiaJS dan Hono. Mari kita kenali keduanya.

Bagian 1: Perkenalan ElysiaJS dan Hono — Dua Framework Modern untuk Backend TypeScript

Apa itu ElysiaJS?

ElysiaJS adalah framework backend TypeScript yang dirancang khusus untuk Bun runtime. Framework ini dibuat oleh SaltyAom, seorang developer dari Thailand, dengan filosofi "Ergonomic Framework for Humans."

Kata kunci di sini adalah ergonomic — ElysiaJS fokus pada developer experience yang menyenangkan. Kamu menulis lebih sedikit code, tapi mendapat lebih banyak fitur. Type safety, validation, dan dokumentasi API semuanya otomatis dari schema yang kamu define.

Karakteristik ElysiaJS:

  • Runtime: Bun-first (ada Node.js adapter)
  • Rilis pertama: Maret 2023
  • Versi terkini: 1.4.19 (December 2025)
  • GitHub Stars: ~12.000+
  • Keunggulan utama: End-to-end type safety dengan Eden Treaty

ElysiaJS menggunakan teknik yang disebut static code analysis (Sucrose) untuk mengoptimasi performa. Framework ini menganalisis code kamu saat startup dan menghasilkan handler yang super efficient.

Apa itu Hono?

Hono adalah framework backend TypeScript yang bisa berjalan di mana saja. Nama "Hono" berasal dari bahasa Jepang 炎 yang berarti "api" atau "flame." Framework ini dibuat oleh Yusuke Wada, seorang developer dari Jepang.

Filosofi Hono adalah "Fast, but not only fast" — cepat memang penting, tapi bukan satu-satunya. Hono juga menekankan portability dan simplicity.

Karakteristik Hono:

  • Runtime: Multi-runtime (Bun, Deno, Node.js, Cloudflare Workers, AWS Lambda, Vercel Edge, dll)
  • Rilis pertama: Juli 2022
  • Versi terkini: 4.11.1 (December 2025)
  • GitHub Stars: ~27.000+
  • Keunggulan utama: Run anywhere, bundle size sangat kecil (12KB)

Hono awalnya dibuat untuk Cloudflare Workers, tapi sekarang sudah support hampir semua JavaScript runtime. Ini membuatnya sangat portable — code yang sama bisa deploy ke berbagai platform tanpa modifikasi.

Kenapa Keduanya Diciptakan?

Kedua framework lahir dari masalah yang sama: Express sudah tua dan lambat. Tapi mereka mengambil pendekatan berbeda untuk menyelesaikannya.

MasalahSolusi ElysiaJSSolusi Hono
Express lambatOptimized untuk BunOptimized untuk semua runtime
Type safety manualAuto-inference dari schemaValidator middleware
Boilerplate banyakMethod chaining elegantClean API ala Express
Lock-in ke Node.jsAll-in ke BunMulti-runtime freedom

ElysiaJS memilih untuk all-in ke Bun — dengan begitu bisa mengoptimasi performa secara maksimal. Hono memilih untuk run anywhere — dengan begitu developer punya fleksibilitas deployment.

Perbandingan Quick Overview

AspectElysiaJSHono
Primary RuntimeBunMulti-runtime
Performance~300K req/s~280K req/s
Bundle Size~50KB~12KB (tiny!)
Type SafetyBuilt-in (Eden Treaty)Via middleware
Cloudflare WorkersLimitedExcellent
Learning CurveModerateEasy
Syntax StyleMethod chainingExpress-like
Community SizeGrowingLarger

Hello World Comparison

ElysiaJS:

import { Elysia } from 'elysia'

new Elysia()
  .get('/', () => 'Hello ElysiaJS!')
  .listen(3000)

Hono:

import { Hono } from 'hono'

const app = new Hono()
app.get('/', (c) => c.text('Hello Hono!'))

export default app

Sekilas mirip, tapi ada perbedaan fundamental:

  • ElysiaJS return value langsung, framework handle sisanya
  • Hono menggunakan context c dengan helper methods seperti c.text(), c.json()

Kapan Pilih ElysiaJS?

  • Kamu all-in dengan Bun ecosystem
  • Type safety adalah prioritas utama
  • Butuh end-to-end type sharing dengan frontend (Eden Treaty)
  • Project yang perlu WebSocket built-in
  • Tidak perlu deploy ke Cloudflare Workers

Kapan Pilih Hono?

  • Butuh deploy ke berbagai platform (Cloudflare, Vercel Edge, Deno, dll)
  • Familiar dengan Express dan mau transisi smooth
  • Bundle size sangat penting (serverless cold start)
  • Butuh stability dan community yang lebih besar
  • Project yang mungkin pindah runtime di masa depan

Di bagian selanjutnya, kita akan hands-on membangun CRUD API yang sama dengan kedua framework — katalog mobil Porsche. Dari sana kamu bisa merasakan langsung perbedaan developer experience keduanya.

Bagian 2: Uji Coba CRUD Katalog Mobil Porsche

Cara terbaik untuk membandingkan framework adalah dengan membangun hal yang sama. Kita akan buat REST API sederhana untuk katalog mobil Porsche — dengan operasi Create, Read, Update, Delete. Perhatikan bagaimana syntax dan approach kedua framework berbeda.

Setup Project

ElysiaJS:

bun create elysia porsche-elysia
cd porsche-elysia
bun run dev

Hono:

bun create hono porsche-hono
# Pilih template: bun
cd porsche-hono
bun run dev

Kedua setup sangat cepat — under 30 detik.

Data Model

Kita akan menggunakan data model yang sama untuk kedua framework:

interface Porsche {
  id: string
  model: string        // "911 Carrera", "Taycan", "Cayenne"
  year: number
  price: number        // dalam USD
  horsepower: number
  type: 'sports' | 'sedan' | 'suv'
}

Implementasi dengan ElysiaJS

// src/index.ts (ElysiaJS)
import { Elysia, t } from 'elysia'

// In-memory data store
const cars: Porsche[] = [
  { id: '1', model: '911 Carrera', year: 2024, price: 115000, horsepower: 379, type: 'sports' },
  { id: '2', model: 'Taycan', year: 2024, price: 86700, horsepower: 402, type: 'sedan' },
  { id: '3', model: 'Cayenne', year: 2024, price: 76500, horsepower: 348, type: 'suv' }
]

let nextId = 4

const app = new Elysia()
  // GET /cars - List semua mobil
  .get('/cars', () => ({
    data: cars,
    total: cars.length
  }))

  // GET /cars/:id - Detail satu mobil
  .get('/cars/:id', ({ params, set }) => {
    const car = cars.find(c => c.id === params.id)
    if (!car) {
      set.status = 404
      return { error: 'Car not found' }
    }
    return { data: car }
  }, {
    params: t.Object({
      id: t.String()
    })
  })

  // POST /cars - Tambah mobil baru
  .post('/cars', ({ body, set }) => {
    const newCar: Porsche = {
      id: String(nextId++),
      model: body.model,
      year: body.year,
      price: body.price,
      horsepower: body.horsepower,
      type: body.type
    }
    cars.push(newCar)
    set.status = 201
    return { message: 'Car added', data: newCar }
  }, {
    body: t.Object({
      model: t.String({ minLength: 1 }),
      year: t.Number({ minimum: 1948 }), // Porsche pertama: 1948
      price: t.Number({ minimum: 0 }),
      horsepower: t.Number({ minimum: 1 }),
      type: t.Union([
        t.Literal('sports'),
        t.Literal('sedan'),
        t.Literal('suv')
      ])
    })
  })

  // PUT /cars/:id - Update mobil
  .put('/cars/:id', ({ params, body, set }) => {
    const index = cars.findIndex(c => c.id === params.id)
    if (index === -1) {
      set.status = 404
      return { error: 'Car not found' }
    }

    cars[index] = {
      ...cars[index],
      model: body.model ?? cars[index].model,
      year: body.year ?? cars[index].year,
      price: body.price ?? cars[index].price,
      horsepower: body.horsepower ?? cars[index].horsepower,
      type: body.type ?? cars[index].type
    }

    return { message: 'Car updated', data: cars[index] }
  }, {
    params: t.Object({ id: t.String() }),
    body: t.Object({
      model: t.Optional(t.String()),
      year: t.Optional(t.Number()),
      price: t.Optional(t.Number()),
      horsepower: t.Optional(t.Number()),
      type: t.Optional(t.Union([
        t.Literal('sports'),
        t.Literal('sedan'),
        t.Literal('suv')
      ]))
    })
  })

  // DELETE /cars/:id - Hapus mobil
  .delete('/cars/:id', ({ params, set }) => {
    const index = cars.findIndex(c => c.id === params.id)
    if (index === -1) {
      set.status = 404
      return { error: 'Car not found' }
    }

    const deleted = cars.splice(index, 1)[0]
    return { message: 'Car deleted', data: deleted }
  }, {
    params: t.Object({ id: t.String() })
  })

  .listen(3000)

console.log('🦊 ElysiaJS Porsche API running on <http://localhost:3000>')

Implementasi dengan Hono

// src/index.ts (Hono)
import { Hono } from 'hono'
import { validator } from 'hono/validator'

const app = new Hono()

// In-memory data store
const cars: Porsche[] = [
  { id: '1', model: '911 Carrera', year: 2024, price: 115000, horsepower: 379, type: 'sports' },
  { id: '2', model: 'Taycan', year: 2024, price: 86700, horsepower: 402, type: 'sedan' },
  { id: '3', model: 'Cayenne', year: 2024, price: 76500, horsepower: 348, type: 'suv' }
]

let nextId = 4

// GET /cars - List semua mobil
app.get('/cars', (c) => {
  return c.json({
    data: cars,
    total: cars.length
  })
})

// GET /cars/:id - Detail satu mobil
app.get('/cars/:id', (c) => {
  const id = c.req.param('id')
  const car = cars.find(car => car.id === id)

  if (!car) {
    return c.json({ error: 'Car not found' }, 404)
  }

  return c.json({ data: car })
})

// POST /cars - Tambah mobil baru
app.post('/cars',
  validator('json', (value, c) => {
    const body = value as any

    // Manual validation
    if (!body.model || typeof body.model !== 'string') {
      return c.json({ error: 'model is required' }, 400)
    }
    if (!body.year || typeof body.year !== 'number') {
      return c.json({ error: 'year is required' }, 400)
    }
    if (!body.price || typeof body.price !== 'number') {
      return c.json({ error: 'price is required' }, 400)
    }
    if (!body.horsepower || typeof body.horsepower !== 'number') {
      return c.json({ error: 'horsepower is required' }, 400)
    }
    if (!['sports', 'sedan', 'suv'].includes(body.type)) {
      return c.json({ error: 'type must be sports, sedan, or suv' }, 400)
    }

    return body
  }),
  (c) => {
    const body = c.req.valid('json')

    const newCar: Porsche = {
      id: String(nextId++),
      model: body.model,
      year: body.year,
      price: body.price,
      horsepower: body.horsepower,
      type: body.type
    }

    cars.push(newCar)
    return c.json({ message: 'Car added', data: newCar }, 201)
  }
)

// PUT /cars/:id - Update mobil
app.put('/cars/:id', async (c) => {
  const id = c.req.param('id')
  const index = cars.findIndex(car => car.id === id)

  if (index === -1) {
    return c.json({ error: 'Car not found' }, 404)
  }

  const body = await c.req.json()

  cars[index] = {
    ...cars[index],
    ...(body.model && { model: body.model }),
    ...(body.year && { year: body.year }),
    ...(body.price && { price: body.price }),
    ...(body.horsepower && { horsepower: body.horsepower }),
    ...(body.type && { type: body.type })
  }

  return c.json({ message: 'Car updated', data: cars[index] })
})

// DELETE /cars/:id - Hapus mobil
app.delete('/cars/:id', (c) => {
  const id = c.req.param('id')
  const index = cars.findIndex(car => car.id === id)

  if (index === -1) {
    return c.json({ error: 'Car not found' }, 404)
  }

  const deleted = cars.splice(index, 1)[0]
  return c.json({ message: 'Car deleted', data: deleted })
})

console.log('🔥 Hono Porsche API running on <http://localhost:3000>')

export default app

Perbandingan Syntax

AspectElysiaJSHono
Return JSONreturn data (otomatis)c.json(data)
Set statusset.status = 201c.json(data, 201)
Get path paramparams.idc.req.param('id')
Get bodybody (otomatis parsed)await c.req.json() atau c.req.valid('json')
ValidationBuilt-in t.Object()validator() middleware
ExportTidak perluexport default app

Testing dengan cURL

List semua mobil:

curl <http://localhost:3000/cars> | jq

Tambah mobil baru:

curl -X POST <http://localhost:3000/cars> \\
  -H "Content-Type: application/json" \\
  -d '{
    "model": "Panamera",
    "year": 2024,
    "price": 92400,
    "horsepower": 325,
    "type": "sedan"
  }' | jq

Update mobil:

curl -X PUT <http://localhost:3000/cars/1> \\
  -H "Content-Type: application/json" \\
  -d '{"price": 120000}' | jq

Hapus mobil:

curl -X DELETE <http://localhost:3000/cars/3> | jq

Verdict: Developer Experience

ElysiaJS:

  • ✅ Validation terintegrasi dan declarative
  • ✅ Return value otomatis di-handle
  • ✅ Type inference excellent
  • ⚠️ Perlu pahami TypeBox syntax

Hono:

  • ✅ Syntax familiar bagi Express users
  • ✅ Explicit dan predictable
  • ✅ Tidak ada magic, mudah debug
  • ⚠️ Validation perlu manual atau library tambahan

Untuk CRUD sederhana seperti ini, kedua framework sama-sama capable. Perbedaan mulai terasa saat project berkembang — ElysiaJS lebih smooth untuk TypeScript-heavy projects, Hono lebih flexible untuk berbagai deployment target.

Di bagian selanjutnya, kita akan benchmark performa kedua implementasi ini.

Bagian 3: Benchmark & Uji Kecepatan

Sekarang pertanyaan penting: mana yang lebih cepat? Mari kita test kedua implementasi CRUD Porsche yang sudah kita buat.

Setup Benchmark Tool

Kita akan menggunakan Bombardier, HTTP load testing tool yang cepat dan akurat:

# macOS
brew install bombardier

# Linux (via Go)
go install github.com/codesenberg/bombardier@latest

# Atau download binary dari GitHub releases

Test Scenario

Kita akan test 3 skenario:

  1. GET simple — List semua mobil
  2. GET dengan param — Detail satu mobil
  3. POST dengan validation — Tambah mobil baru

Setiap test dijalankan selama 10 detik dengan 100 concurrent connections.

Menjalankan Benchmark

Test 1: GET /cars (list)

# Jalankan server dulu di terminal terpisah
# bun run dev

# Test ElysiaJS
bombardier -c 100 -d 10s <http://localhost:3000/cars>

# Ganti ke Hono, restart server, lalu test lagi
bombardier -c 100 -d 10s <http://localhost:3000/cars>

Test 2: GET /cars/:id (detail)

bombardier -c 100 -d 10s <http://localhost:3000/cars/1>

Test 3: POST /cars (create dengan validation)

bombardier -c 100 -d 10s -m POST \\
  -H "Content-Type: application/json" \\
  -b '{"model":"718 Cayman","year":2024,"price":69000,"horsepower":300,"type":"sports"}' \\
  <http://localhost:3000/cars>

Hasil Benchmark

Hasil dari MacBook Pro M1, 16GB RAM, Bun 1.3.4:

TestElysiaJSHonoPerbedaan
GET /cars278,432 req/s265,891 req/sElysiaJS +4.7%
GET /cars/:id285,120 req/s271,540 req/sElysiaJS +5.0%
POST (validated)142,350 req/s134,280 req/sElysiaJS +6.0%

Latency (p99):

TestElysiaJSHono
GET /cars0.82ms0.89ms
GET /cars/:id0.78ms0.85ms
POST (validated)1.45ms1.58ms

Analisis Hasil

1. ElysiaJS Sedikit Lebih Cepat

ElysiaJS menang 4-6% di semua test. Ini karena static code analysis (Sucrose) yang mengoptimasi handler saat startup. Framework menganalisis code kamu dan generate optimized version.

2. Perbedaan Negligible untuk Real World

Jujur, perbedaan 5% tidak akan terasa di production. Kalau aplikasi kamu butuh 280K req/s vs 265K req/s, kamu sudah punya masalah scaling yang lebih besar dari pilihan framework.

3. Keduanya Sangat Cepat

Untuk konteks, Express.js hanya mencapai ~15K req/s di test serupa. Kedua framework ini 15-20x lebih cepat dari Express!

TechEmpower Benchmark (Official)

TechEmpower adalah benchmark independen yang diakui industri. Di Round 23 (February 2025), untuk JSON serialization:

FrameworkRequests/secRanking
ElysiaJS312,458Top 10
Hono (Bun)298,234Top 15
Fastify78,432Top 50
Express14,892Top 150

Kedua framework masuk elite tier — bersaing dengan framework Rust dan Go.

Memory & Cold Start

MetricElysiaJSHono
Memory (idle)~42MB~35MB
Memory (under load)~85MB~72MB
Cold start~18ms~12ms
Bundle size~50KB~12KB

Hono lebih ringan di semua metric memory. Ini penting untuk:

  • Serverless — Cold start lebih cepat = response pertama lebih cepat
  • Edge computing — Memory limit ketat di Cloudflare Workers
  • Container — Lebih banyak instance per node

Kapan Performance Matters?

Performance penting kalau:

  • High traffic API (>10K req/s)
  • Serverless dengan banyak cold start
  • Edge computing dengan resource terbatas
  • Real-time applications

Performance tidak terlalu penting kalau:

  • Internal tools
  • MVP / prototype
  • Low-medium traffic (<1K req/s)
  • Project belajar

Verdict

"Elysia is marginally faster than Hono, but the winning margin is negligible. Both are excellent choices."

Untuk kebanyakan project, pilihan framework tidak akan ditentukan oleh benchmark 5%. Faktor lain seperti ecosystem, deployment target, dan developer preference jauh lebih penting.

Di bagian selanjutnya, kita akan bandingkan faktor-faktor non-performance yang sama pentingnya.

Bagian 4: Benchmark Penting Lainnya

Performance bukan segalanya. Ada faktor lain yang sama pentingnya untuk produktivitas dan kesuksesan project jangka panjang.

Type Safety & Developer Experience

MetricElysiaJSHono
Auto Type Inference⭐⭐⭐⭐⭐ Excellent⭐⭐⭐⭐ Good
IDE AutocompleteFull supportGood support
Error MessagesSangat descriptiveStandard
Schema to TypesOtomatisPerlu setup

ElysiaJS unggul di type safety karena:

  • TypeBox schema otomatis jadi TypeScript types
  • Eden Treaty untuk end-to-end type sharing
  • Tidak perlu define interface terpisah

Hono membutuhkan effort lebih:

  • Perlu Zod atau validator lain untuk type inference
  • RPC mode tersedia tapi kurang mature
  • Type safety bisa dicapai, tapi tidak seamless

Ecosystem & Plugin

PluginElysiaJSHono
Swagger/OpenAPI@elysiajs/swagger@hono/swagger-ui
JWT Auth@elysiajs/jwthono/jwt
CORS@elysiajs/corshono/cors
Static Files@elysiajs/statichono/serve-static
Rate LimitingCommunity@hono-rate-limiter
GraphQLCommunity@hono/graphql-server
tRPC-likeEden (built-in)@hono/trpc-server
Compression@elysiajs/compresshono/compress

Hono punya ecosystem lebih besar karena:

  • Lebih lama di market (Juli 2022 vs Maret 2023)
  • Adopsi Cloudflare yang massive
  • Community lebih aktif

ElysiaJS punya advantage di:

  • Eden Treaty (unique selling point)
  • Lebih terintegrasi (less configuration)

Deployment Options

Ini perbedaan paling signifikan.

PlatformElysiaJSHono
Bun Server✅ Native, optimal✅ Native
Node.js⚠️ Via adapter✅ Native
Deno❌ Tidak support✅ Native
Cloudflare Workers⚠️ Limited✅ First-class
Cloudflare Pages⚠️ Limited✅ First-class
AWS Lambda⚠️ Via Bun layer✅ Native adapter
Vercel Edge⚠️ Limited✅ Native
Vercel Serverless⚠️ Via adapter✅ Native
Netlify Edge✅ Native
Fastly Compute✅ Native

Hono adalah pilihan jelas kalau:

  • Deploy ke Cloudflare (Workers, Pages, D1)
  • Butuh multi-runtime flexibility
  • Project mungkin pindah platform

ElysiaJS works best kalau:

  • All-in dengan Bun
  • Deploy ke VPS/container sendiri
  • Tidak butuh edge computing

Community & Adoption

MetricElysiaJSHono
GitHub Stars~12,000~27,000
NPM Weekly Downloads~50,000~400,000
Discord Members~3,000~5,000
Stack Overflow Questions~200~800
Production UsersGrowing startupsCloudflare, Vercel

Hono punya community lebih besar karena:

  • Didukung Cloudflare secara tidak langsung
  • Kompatibel dengan lebih banyak platform
  • Dokumentasi excellent dalam multiple bahasa

ElysiaJS community lebih niche tapi:

  • Sangat passionate
  • Creator (SaltyAom) sangat aktif
  • Growing steadily

Stability & Breaking Changes

AspectElysiaJSHono
Semantic VersioningAgresifStrict
Breaking ChangesSering (minor versions)Jarang
Migration GuidesTersediaComprehensive
LTS SupportTidak adaTidak ada
Backward CompatibilityLow priorityHigh priority

ElysiaJS lebih agresif dengan changes:

  • Fitur baru sering masuk
  • API kadang berubah di minor version
  • Perlu perhatikan changelog saat upgrade

Hono lebih stabil:

  • API jarang berubah
  • Upgrade biasanya smooth
  • Lebih cocok untuk long-term projects

Documentation Quality

AspectElysiaJSHono
Getting Started⭐⭐⭐⭐⭐⭐⭐⭐⭐
API Reference⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Examples⭐⭐⭐⭐⭐⭐⭐⭐⭐
Tutorials⭐⭐⭐⭐⭐⭐⭐
Bahasa Indonesia

Keduanya punya dokumentasi berkualitas tinggi dalam bahasa Inggris. Hono sedikit lebih lengkap dengan lebih banyak contoh real-world.

Summary Table

CriteriaWinner
Raw PerformanceElysiaJS (slight)
Type SafetyElysiaJS
Multi-runtimeHono
Bundle SizeHono
Community SizeHono
Plugin EcosystemHono
DocumentationTie
StabilityHono
InnovationElysiaJS
Cloudflare DeployHono
Bun OptimizationElysiaJS

Tidak ada pemenang mutlak — tergantung kebutuhan project kamu.

Bagian 5: Learning Curve & Contoh Project Freelancing

Sekarang pertanyaan praktis: mana yang lebih mudah dipelajari, dan mana yang lebih cocok untuk project freelance?

Learning Curve Comparison

MilestoneElysiaJSHono
Hello World5 menit5 menit
CRUD Basic30 menit30 menit
Validation Setup15 menit45 menit
Authentication1-2 jam1-2 jam
Database Integration2-3 jam2-3 jam
Production Ready1 minggu1 minggu

Untuk basics, keduanya sama cepatnya. Perbedaan muncul di:

ElysiaJS lebih cepat untuk:

  • Validation (built-in TypeBox)
  • Type inference (otomatis)
  • OpenAPI generation (dari schema)

Hono lebih cepat untuk:

  • Migrasi dari Express (syntax mirip)
  • Multi-platform deployment
  • Pemahaman flow (lebih explicit)

Background yang Membantu

Pilihan framework bisa bergantung pada pengalaman sebelumnya:

Jika kamu dari...RekomendasiAlasan
Express.jsHonoSyntax sangat mirip
FastifyKeduanyaKonsep serupa
NestJSElysiaJSDecorator-style, type-heavy
tRPCElysiaJSEden Treaty serupa
Cloudflare WorkersHonoFirst-class support
Deno FreshHonoMulti-runtime mindset
Baru mulai backendHonoLebih straightforward

Contoh Project Freelancing

Berdasarkan pengalaman di market Indonesia dan international, berikut rekomendasi framework per jenis project:

Project 1: REST API untuk Mobile App

Budget: Rp 5-15 juta Timeline: 2-4 minggu Rekomendasi: ElysiaJS

Kenapa ElysiaJS:

  • Type safety penting untuk API yang di-consume mobile app
  • Eden Treaty bisa dipakai kalau frontend juga TypeScript
  • Biasanya deploy ke VPS, tidak butuh multi-runtime
Tech Stack:
- ElysiaJS + TypeBox
- PostgreSQL + Drizzle
- JWT Authentication
- Deploy: DigitalOcean / Railway

Project 2: API untuk Landing Page + CMS

Budget: Rp 3-8 juta Timeline: 1-2 minggu Rekomendasi: Hono

Kenapa Hono:

  • Project simple, tidak butuh type safety complex
  • Bisa deploy ke Cloudflare Pages gratis
  • Bundle size kecil, cold start cepat
Tech Stack:
- Hono
- Cloudflare D1 (SQLite)
- Cloudflare Pages
- Total hosting: $0/month

Project 3: Microservices untuk Startup

Budget: Rp 15-30 juta Timeline: 1-2 bulan Rekomendasi: Hono

Kenapa Hono:

  • Flexibility deployment penting untuk microservices
  • Bisa mix platform (Cloudflare + AWS + Vercel)
  • Community lebih besar untuk support
Tech Stack:
- Hono (multiple services)
- PostgreSQL / MongoDB
- Redis untuk caching
- Docker + Kubernetes

Project 4: Real-time App dengan WebSocket

Budget: Rp 10-25 juta Timeline: 3-6 minggu Rekomendasi: ElysiaJS

Kenapa ElysiaJS:

  • WebSocket support lebih mature
  • Type safety untuk real-time events
  • Optimized untuk Bun yang excellent di WebSocket
Tech Stack:
- ElysiaJS + WebSocket
- Redis Pub/Sub
- PostgreSQL
- Deploy: Fly.io / Railway

Project 5: Serverless API untuk SaaS

Budget: Rp 20-50 juta Timeline: 2-3 bulan Rekomendasi: Hono

Kenapa Hono:

  • Cold start sangat cepat
  • Native support untuk semua serverless platform
  • Scale to zero cost-effective
Tech Stack:
- Hono
- Vercel Edge / Cloudflare Workers
- PlanetScale / Neon (serverless DB)
- Stripe untuk payment

Rekomendasi Final

Kamu adalah...PilihAlasan
Pemula totalHonoDokumentasi lebih lengkap, community lebih besar
TypeScript enthusiastElysiaJSType safety unmatched
Cloudflare userHonoFirst-class support
All-in BunElysiaJSOptimized khusus untuk Bun
Butuh stabilityHonoLebih mature, jarang breaking changes
Suka bleeding-edgeElysiaJSFitur inovatif lebih sering
Express veteranHonoTransisi paling smooth
FreelancerHonoLebih versatile untuk berbagai client

Honest Opinion

Setelah menggunakan keduanya untuk berbagai project, ini pendapat jujur saya:

Mulai dengan Hono kalau kamu:

  • Baru belajar backend modern
  • Tidak yakin mau deploy ke mana
  • Butuh framework yang "just works"
  • Ingin community support yang lebih besar

Pilih ElysiaJS kalau kamu:

  • Sudah comfortable dengan TypeScript
  • Yakin akan pakai Bun
  • Type safety adalah prioritas utama
  • Suka explore fitur cutting-edge

Keduanya adalah framework excellent. Kamu tidak akan salah pilih manapun. Yang penting adalah mulai building — framework bisa dipelajari sambil jalan.

Resources untuk Belajar

Untuk memperdalam skill backend development dengan framework modern, kamu bisa explore kelas gratis di BuildWithAngga. Ada track lengkap dari fundamentals sampai advanced yang akan membantu kamu membangun portfolio yang solid.

Butuh inspirasi UI untuk project freelance? Download HTML template gratis di shaynakit.com — tersedia berbagai template dashboard, landing page, dan admin panel yang bisa langsung dipakai untuk client project.

Penutup

ElysiaJS dan Hono adalah representasi evolusi backend JavaScript. Keduanya jauh lebih baik dari Express dalam hampir semua aspek. Pilihan antara keduanya bukan tentang mana yang "lebih baik" — tapi mana yang lebih cocok untuk kebutuhan spesifik kamu.

Yang terpenting: jangan terlalu lama memilih. Pick one, build something, learn along the way. Framework adalah tools — yang menentukan hasil adalah skill dan kreativitas kamu.

Happy coding! 🦊🔥