Belajar ElysiaJS - Konsep Dasar & Arsitektur Utama
Episode 2 of 21

Belajar ElysiaJS - Konsep Dasar & Arsitektur Utama

Memahami arsitektur inti ElysiaJS: core routing engine berbasis TypeBox, plugin system yang fleksibel, dan Eden Treaty untuk type-safe end-to-end tanpa code generation, serta perbandingan mendalam dengan framework lain seperti Express, Fastify, dan NestJS.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 1 kita memahami sejarah dan mengapa ElysiaJS lahir, pada episode ini kita akan menyingkap arsitektur di balik framework ini. Memahami arsitektur penting karena akan menjelaskan mengapa ElysiaJS dirancang seperti ini — mulai dari cara kerja routing engine, bagaimana TypeBox menghasilkan JSON Schema, hingga bagaimana Eden Treaty mengekspos tipe ke client.

Arsitektur ElysiaJS

ElysiaJS terdiri dari tiga lapisan utama yang saling terintegrasi:

Core: Routing Engine dan Type System

Core ElysiaJS adalah routing engine yang dibangun di atas TypeBox. Setiap route didaftarkan dengan method, path, dan schema — lalu TypeBox menghasilkan JSON Schema yang digunakan untuk validasi request dan inferensi tipe secara otomatis.

Core ElysiaJS: routing + TypeBox
import { Elysia, t } from 'elysia'
 
const app = new Elysia()
  .get('/', () => 'Hello Elysia!')
  .post('/user', ({ body }) => body, {
    body: t.Object({
      name: t.String(),
      email: t.String({ format: 'email' }),
    })
  })
  .listen(3000)

Perhatikan bahwa schema body di atas secara bersamaan melakukan dua hal: validasi request dan menghasilkan tipe TypeScript untuk body di handler. Ini adalah inti dari bagaimana ElysiaJS menghilangkan duplikasi tipe.

Plugin System

Semua fitur tambahan di ElysiaJS diimplementasikan sebagai plugin — termasuk CORS, JWT, Swagger, static files, dan bahkan serializer. Plugin adalah fungsi yang menerima instance app dan menambahkan route atau middleware kepadanya.

Plugin system: CORS dan JWT
import { Elysia } from 'elysia'
import cors from '@elysiajs/cors'
import jwt from '@elysiajs/jwt'
 
const app = new Elysia()
  .use(cors())
  .use(jwt({ name: 'jwt', secret: process.env.JWT_SECRET }))

Pendekatan plugin-based membuat ElysiaJS sangat modular — kalian hanya meng-include fitur yang dibutuhkan, menjaga bundle tetap kecil.

Eden Treaty: Client Type-Safe

Eden Treaty adalah lapisan client yang memungkinkan frontend untuk memanggil route ElysiaJS dengan type safety penuh. Ia mengimpor tipe langsung dari server tanpa code generation.

Eden Treaty: type inference di client
import { treaty } from '@elysiajs/eden'
import type { app } from './server'
 
const client = treaty(app)
const { data } = await client.user.get({ query: { name: 'John' } })
// data otomatis typed berdasarkan route definition

Cara Kerja di Balik Layar

Alur dari route definition hingga response bisa diuraikan dalam beberapa langkah:

  1. Schema definition: Kalian mendefinisikan tipe untuk body, params, query, dan response menggunakan TypeBox (t.Object(), t.String(), dll.).
  2. JSON Schema generation: TypeBox secara otomatis menghasilkan JSON Schema dari definisi tipe.
  3. Request validation: Saat request masuk, ElysiaJS memvalidasi melawan JSON Schema. Jika gagal → otomatis return 422.
  4. Tipe inference: TypeScript compiler menggunakan JSON Schema untuk menghasilkan tipe yang tepat di handler.
  5. Eden exposure: Tipe route diekspos ke Eden client tanpa step tambahan.

Proses ini sepenuhnya compile-time dan runtime — tidak ada code generation yang perlu dijalankan secara terpisah.

Perbandingan dengan Framework Lain

Express vs ElysiaJS

Express tidak punya built-in type system — kalian harus menambahkan @types/express dan bahkan itu pun tidak lengkap. ElysiaJS 100% type-safe dari awal, dengan validasi otomatis dari schema.

Fastify vs ElysiaJS

Keduanya performa tinggi dan menggunakan JSON Schema untuk validasi. Perbedaannya: ElysiaJS menggunakan TypeBox untuk menghasilkan JSON Schema dari tipe TypeScript, sedangkan Fastify meminta kalian menulis JSON Schema secara manual atau menggunakan library pihak ketiga. ElysiaJS juga unggul di type inference end-to-end melalui Eden Treaty.

NestJS vs ElysiaJS

NestJS sangat berbeda dari ElysiaJS — ia menggunakan decorators dan dependency injection ala Angular, berjalan di atas Express/Fastify, dan sangat berat untuk small-medium projects. ElysiaJS ringan dan functional-first, tanpa decorators, tanpa DI container.

Tip

Pilihan framework bergantung pada kebutuhan proyek. Jika kalian membutuhkan arsitektur modular besar dengan DI, NestJS bisa jadi pilihan. Jika kalian menginginkan ringan, cepat, dan type-safe end-to-end, ElysiaJS lebih cocok.

Penutup

Pada episode 2 ini, kalian telah memahami arsitektur inti ElysiaJS — bagaimana core routing engine berbasis TypeBox, plugin system yang modular, dan Eden Treaty untuk client type-safe.

Inti yang harus dibawa pulang:

  • Core ElysiaJS menggabungkan routing engine dengan TypeBox untuk validasi dan tipe otomatis.
  • Plugin system membuat semua fitur tambahan modular dan terisolasi.
  • Eden Treaty mengekspos tipe route ke client tanpa code generation.
  • Perbandingan dengan Express, Fastify, dan NestJS menunjukkan posisi unik ElysiaJS di ekosistem.

Di episode 3 selanjutnya kita akan membuat proyek pertama ElysiaJS — dari bun create elysia hingga menjalankan server pertama dan memahami anatomi aplikasi minimal. Sampai jumpa di episode 3!