Ekosistem Node.js terus berkembang. Cara developer membangun API, microservices, backend aplikasi SaaS, hingga sistem enterprise juga semakin berubah. Jika dahulu Express menjadi pilihan yang hampir otomatis ketika seseorang ingin membangun server menggunakan Node.js, kini muncul semakin banyak alternatif modern, salah satunya Fastify.
Express memiliki sejarah panjang di dunia Node.js. Framework ini dikenal karena konsepnya sederhana, fleksibel, memiliki dokumentasi luas, serta didukung oleh ekosistem middleware yang sangat besar. Bahkan sampai sekarang Express masih menjadi salah satu framework penting untuk pengembangan aplikasi berbasis Node.js.
Di sisi lain, Fastify hadir dengan pendekatan yang lebih berorientasi pada performa, schema, plugin, dan modularitas. Framework ini dirancang untuk memberikan overhead serendah mungkin di atas Node.js sekaligus menyediakan sejumlah fitur yang lebih terintegrasi untuk kebutuhan aplikasi modern.
Pertanyaannya kemudian menjadi menarik: apakah sudah waktunya meninggalkan Express dan berpindah ke Fastify?
Jawabannya tidak sesederhana memilih framework yang memiliki benchmark lebih tinggi. Performa memang penting, tetapi aplikasi production juga harus mempertimbangkan kompatibilitas, middleware, ekosistem, TypeScript, validasi data, developer experience, biaya migrasi, hingga kemampuan tim dalam memelihara kode.
Karena itu, perbandingan Fastify vs Express perlu dilihat secara lebih mendalam.
Table of Contents
ToggleMengenal Express dan Fastify
Sebelum membandingkan keduanya, penting untuk memahami filosofi dasar masing-masing framework.
Apa Itu Express?
Express adalah framework web minimalis untuk Node.js yang berfokus pada routing dan middleware. Aplikasi Express pada dasarnya terdiri dari rangkaian middleware yang diproses selama siklus request dan response.
Konsep ini menjadi salah satu alasan utama Express sangat populer. Developer dapat menambahkan middleware sesuai kebutuhan tanpa harus mengikuti struktur aplikasi yang terlalu ketat. Express menyediakan routing menggunakan metode seperti app.get(), app.post(), app.put(), dan app.delete().
Contoh sederhananya:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.json({ hello: 'world' })
})
app.listen(3000)
Kesederhanaan tersebut membuat Express cocok untuk berbagai jenis aplikasi, mulai dari REST API sederhana sampai backend aplikasi yang cukup kompleks.
Express juga memiliki ekosistem middleware yang sangat luas. Kebutuhan seperti parsing request, CORS, cookie, compression, authentication, session, logging, dan static files dapat ditambahkan melalui middleware. Dokumentasi resmi Express bahkan menyediakan daftar middleware yang digunakan untuk berbagai kebutuhan tersebut.
Apa Itu Fastify?
Fastify adalah web framework Node.js yang dibangun dengan fokus pada performa, overhead rendah, schema-based validation, serialization, logging, dan arsitektur plugin.
Fastify tidak hanya mencoba membuat routing menjadi cepat. Framework ini juga mencoba menyediakan pola arsitektur yang membantu aplikasi tetap modular ketika ukurannya bertambah.
Salah satu konsep utama Fastify adalah plugin. Route, utility, decorator, database connection, authentication, dan berbagai komponen aplikasi dapat dikemas dalam plugin dan diregistrasikan menggunakan fastify.register().
Contoh sederhananya:
const fastify = require('fastify')({
logger: true
})
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
fastify.listen({ port: 3000 })
Perbedaannya terlihat sederhana, tetapi filosofi di belakang Fastify cukup berbeda. Fastify dirancang agar aplikasi dapat dibangun menggunakan komponen-komponen yang terisolasi melalui mekanisme encapsulation.
Performa Fastify vs Express
Performa merupakan alasan paling sering disebut ketika Fastify dibandingkan dengan Express.
Framework backend pada dasarnya memiliki overhead sendiri. Semakin banyak pekerjaan yang harus dilakukan framework pada setiap request, semakin besar pula potensi dampaknya terhadap throughput dan latency.
Fastify sejak awal dirancang untuk memberikan overhead serendah mungkin di atas Node.js.
Benchmark Terbaru
Benchmark resmi Fastify yang diperbarui pada 2 September 2026 memberikan gambaran menarik. Dalam benchmark tersebut, Fastify 5.12.1 mencapai sekitar 97.595 requests per second, sedangkan Express 5.2.1 berada di sekitar 59.651 requests per second.
Benchmark yang sama mencatat latency Fastify sekitar 9,73 ms, sementara Express sekitar 16,25 ms. Dari pengujian tersebut, Fastify tercatat sekitar 1,6 kali lebih tinggi dalam requests per second dan memiliki latency lebih rendah.
Namun, angka tersebut tidak boleh langsung diterjemahkan menjadi “Fastify selalu 1,6 kali lebih cepat”.
Fastify sendiri memberikan peringatan bahwa angka benchmark tersebut bersifat ilustratif. Hasil nyata dapat berubah berdasarkan hardware, versi Node.js, konfigurasi server, database, middleware, payload, jumlah concurrent request, dan karakteristik workload.
Dengan kata lain, benchmark framework bukan pengganti benchmark aplikasi sebenarnya.
Mengapa Fastify Bisa Lebih Cepat?
Salah satu alasannya adalah Fastify memang dirancang dengan perhatian besar terhadap overhead framework.
Fastify menggunakan pendekatan schema-based untuk validasi dan serialisasi. Schema dapat dikompilasi menjadi fungsi yang sangat performant. Dokumentasi Fastify menyebutkan bahwa JSON Schema dapat digunakan untuk validasi request dan serialisasi response, dengan Ajv sebagai salah satu komponen validasi yang digunakan.
Dalam aplikasi yang menangani request dalam jumlah besar, optimasi semacam ini dapat menjadi penting.
Express sendiri bukan framework yang secara khusus memaksakan schema validation pada setiap route. Developer bebas menentukan apakah ingin menggunakan library tambahan seperti Zod, Joi, Yup, atau library lainnya.
Pendekatan Express memberikan fleksibilitas, tetapi konsekuensinya developer perlu menentukan sendiri stack validasi yang digunakan.
Validasi dan Serialisasi Data
Dalam aplikasi modern, backend tidak hanya menerima request. Backend juga harus memastikan data yang masuk sesuai dengan format yang diharapkan.
Misalnya endpoint berikut:
POST /users
Mungkin membutuhkan:
{
"name": "Bagus",
"email": "[email protected]",
"age": 25
}
Backend harus memastikan name berupa string, email memiliki format yang benar, dan age merupakan angka.
Pendekatan Express
Express memberikan kebebasan kepada developer untuk memilih mekanisme validasi.
Misalnya menggunakan Zod:
const userSchema = z.object({
name: z.string(),
email: z.email(),
age: z.number()
})
Kemudian developer dapat menjalankan schema tersebut pada middleware atau controller.
Kelebihannya adalah developer memiliki banyak pilihan.
Kekurangannya, validasi bukan bagian inti dari filosofi Express, sehingga struktur implementasinya sangat bergantung pada arsitektur aplikasi.
Pendekatan Fastify
Fastify menggunakan JSON Schema sebagai bagian penting dari sistem routing.
Contohnya:
fastify.post('/users', {
schema: {
body: {
type: 'object',
required: ['name', 'email'],
properties: {
name: { type: 'string' },
email: { type: 'string' }
}
}
}
}, async (request, reply) => {
return request.body
})
Schema tersebut dapat digunakan Fastify untuk validasi request.
Fastify juga dapat menggunakan schema untuk serialisasi response. Dokumentasi resminya menjelaskan bahwa schema response dapat membantu Fastify menghasilkan proses serialisasi yang performant.
Ini merupakan salah satu perbedaan paling penting antara kedua framework.
TypeScript: Express vs Fastify
TypeScript sekarang menjadi bagian penting dalam pengembangan backend modern.
Aplikasi enterprise biasanya memiliki codebase besar, banyak developer, banyak service, serta kebutuhan maintenance jangka panjang. Static typing dapat membantu menemukan kesalahan sebelum aplikasi dijalankan.
TypeScript pada Express
Express saat ini memiliki dokumentasi TypeScript dan contoh resmi penggunaan tipe seperti Request, Response, dan NextFunction.
Contohnya:
import express, {
type Request,
type Response
} from 'express'
const app = express()
app.get('/', (req: Request, res: Response) => {
res.json({
message: 'Hello World'
})
})
Jadi, anggapan bahwa Express tidak mendukung TypeScript sebenarnya sudah tidak tepat.
Namun, TypeScript pada Express sering membutuhkan penambahan tipe untuk library tertentu, terutama ketika developer menggunakan middleware atau package pihak ketiga.
TypeScript pada Fastify
Fastify memiliki sistem typing yang lebih terintegrasi dengan konsep schema dan route.
Dokumentasi resminya menyediakan type provider untuk beberapa pendekatan, termasuk JSON Schema, TypeBox, dan Zod. Type provider memungkinkan TypeScript memperoleh informasi tipe dari schema yang digunakan dalam route.
Contohnya dapat membantu developer menjaga hubungan antara:
schema → request → handler → response
Dengan pendekatan tersebut, Fastify menjadi menarik untuk proyek yang sejak awal menggunakan TypeScript secara intensif.
Arsitektur Plugin
Ini adalah salah satu area yang membuat Fastify cukup berbeda dari Express.
Express sangat bergantung pada konsep middleware dan router. Fastify menggunakan plugin sebagai salah satu fondasi arsitekturnya.
Bagaimana Plugin Fastify Bekerja?
Fastify menyediakan API:
fastify.register(plugin)
Ketika plugin diregistrasikan, Fastify membuat scope baru secara default. Perubahan yang dilakukan dalam scope tersebut tidak otomatis memengaruhi ancestor context, tetapi tersedia untuk descendant context.
Mekanisme tersebut disebut encapsulation.
Contohnya, aplikasi dapat dipisahkan menjadi:
src/
├── plugins/
│ ├── database.js
│ ├── authentication.js
│ └── logger.js
├── routes/
│ ├── users.js
│ ├── products.js
│ └── orders.js
└── server.js
Setiap bagian dapat memiliki konteks dan dependensinya sendiri.
Pada aplikasi enterprise, pola seperti ini dapat membantu mencegah ketergantungan global yang sulit dilacak.
Express dan Modularitas
Express juga dapat dibuat sangat modular.
Developer dapat menggunakan express.Router() untuk membuat router terpisah dan kemudian memasangnya menggunakan app.use(). Dokumentasi Express menyebut Router sebagai sistem middleware dan routing yang dapat dipasang ke aplikasi.
Contoh:
const users = express.Router()
users.get('/', getUsers)
users.post('/', createUser)
app.use('/users', users)
Jadi bukan berarti Express tidak dapat membuat aplikasi modular.
Perbedaannya adalah Fastify menjadikan encapsulation sebagai bagian yang lebih fundamental dari arsitektur plugin.
Middleware: Kekuatan Besar Express
Jika ada satu area yang membuat Express tetap relevan, middleware adalah salah satunya.
Express memiliki konsep middleware yang sangat sederhana:
app.use((req, res, next) => {
next()
})
Middleware dapat membaca request, memodifikasi request atau response, mengakhiri request, atau meneruskan request ke middleware berikutnya menggunakan next().
Konsep ini telah digunakan bertahun-tahun dan dipahami oleh banyak developer Node.js.
Ekosistem Express juga memiliki banyak middleware untuk kebutuhan umum seperti:
- CORS
- Cookie
- Compression
- Authentication
- Session
- Static files
- Logging
- Multipart form
- Security headers
Express bahkan menyediakan dokumentasi khusus untuk berbagai middleware tersebut.
Fastify Tidak Menggunakan Middleware Secara Native
Di sini terdapat perbedaan yang perlu diperhatikan.
Fastify tidak menyediakan middleware Express-style secara built-in. Untuk menggunakan middleware seperti Express, developer perlu menggunakan plugin seperti @fastify/express atau @fastify/middie.
Hal ini bukan berarti Fastify tidak memiliki lifecycle processing.
Fastify menggunakan hooks dan plugin untuk kebutuhan tersebut.
Contohnya:
Request
|
v
onRequest
|
v
preParsing
|
v
preValidation
|
v
preHandler
|
v
Handler
|
v
preSerialization
|
v
onSend
|
v
onResponse
Pendekatan ini memberikan kontrol lifecycle yang lebih spesifik.
Tetapi bagi developer yang terbiasa dengan Express, pola tersebut membutuhkan sedikit adaptasi.
Async/Await dan Error Handling
Keduanya sekarang telah berkembang dibanding generasi awal Express.
Express 5 memiliki dukungan terhadap handler dan middleware berbasis Promise. Jika Promise ditolak atau error terjadi pada fungsi async, Express akan meneruskannya ke mekanisme error handling.
Contohnya:
app.get('/users', async (req, res) => {
const users = await getUsers()
res.json(users)
})
Jadi, pernyataan bahwa Express modern “tidak mendukung async/await” sudah tidak tepat.
Fastify sejak awal sangat cocok dengan pola asynchronous:
fastify.get('/users', async (request, reply) => {
const users = await getUsers()
return users
})
Fastify memungkinkan handler async mengembalikan data secara langsung.
Perbedaannya bukan lagi sekadar “Express tidak mendukung async/await”, tetapi lebih kepada bagaimana masing-masing framework mengintegrasikan asynchronous lifecycle ke dalam arsitekturnya.
Logging
Logging merupakan bagian penting dari aplikasi production.
Ketika server menangani ribuan atau jutaan request, developer membutuhkan informasi mengenai:
- endpoint
- HTTP method
- status code
- response time
- error
- request ID
- informasi debugging
Fastify memiliki integrasi logging menggunakan Pino. Logger tersebut dapat diaktifkan ketika membuat instance Fastify dengan opsi logger.
Contohnya:
const fastify = require('fastify')({
logger: true
})
Kemudian:
fastify.get('/', async (request, reply) => {
request.log.info('Homepage accessed')
return {
message: 'Hello World'
}
})
Pendekatan tersebut memberikan logging terintegrasi dengan lifecycle request Fastify.
Express memiliki mekanisme debugging melalui environment variable DEBUG, sementara kebutuhan logging request biasanya ditambahkan menggunakan middleware seperti Morgan atau logger pihak ketiga.
Artinya, Express memberikan fleksibilitas lebih besar dalam memilih logging stack, sedangkan Fastify memberikan integrasi yang lebih siap digunakan.
Ekosistem dan Kompatibilitas
Ini adalah bagian yang tidak boleh dilewatkan ketika membandingkan kedua framework.
Express telah berada dalam ekosistem Node.js selama bertahun-tahun. Akibatnya, developer dapat menemukan sangat banyak tutorial, contoh project, package, artikel, forum discussion, hingga solusi troubleshooting.
Fastify memiliki ekosistem yang lebih kecil, tetapi terus berkembang. Dokumentasi resminya menyediakan berbagai plugin untuk CORS, cookie, JWT, compression, CSRF protection, Elasticsearch, caching, circuit breaker, environment configuration, dan kebutuhan lainnya.
Fastify juga menyediakan plugin kompatibilitas Express.
@fastify/express
Plugin tersebut memungkinkan developer menggunakan sebagian middleware Express dalam aplikasi Fastify.
Ini menjadi nilai penting ketika organisasi ingin melakukan migrasi secara bertahap.
Migrasi dari Express ke Fastify
Apakah aplikasi Express lama harus langsung dipindahkan ke Fastify?
Belum tentu.
Migrasi framework membutuhkan waktu. Developer perlu mengubah routing, middleware, error handling, testing, authentication, logging, validation, deployment configuration, dan integrasi package.
Selain itu, Express dan Fastify memiliki API request/response yang berbeda.
Express menggunakan:
req
res
Sedangkan Fastify menggunakan:
request
reply
Express:
res.status(200).json({
message: 'OK'
})
Fastify:
return {
message: 'OK'
}
Fastify juga tidak menggunakan Express middleware secara native. Jika aplikasi memiliki banyak middleware Express, kompatibilitas perlu diperiksa terlebih dahulu.
Karena itu, migrasi sebaiknya dilakukan berdasarkan kebutuhan bisnis dan teknis, bukan hanya karena benchmark.
Kapan Fastify Lebih Masuk Akal?
Fastify sangat menarik untuk aplikasi yang membutuhkan throughput tinggi.
Contohnya:
API dengan Traffic Tinggi
Jika server menerima request dalam jumlah besar dan endpoint relatif ringan, overhead framework menjadi lebih relevan.
Dalam benchmark resmi September 2026, Fastify memang menunjukkan throughput dan latency yang lebih baik daripada Express pada skenario pengujian tersebut.
Namun, database query yang lambat tetap akan menjadi bottleneck meskipun framework sangat cepat.
Microservices
Arsitektur plugin dan encapsulation Fastify dapat membantu membangun service yang lebih terstruktur.
Setiap service dapat memiliki:
- route
- authentication
- database
- schema
- hook
- utility
dengan scope yang lebih terkontrol.
Fastify sendiri menjelaskan bahwa sistem encapsulation dirancang untuk membantu menghindari cross-dependency dan membuat bagian aplikasi menjadi lebih cohesive.
TypeScript Backend
Jika project menggunakan TypeScript secara intensif, kombinasi schema dan type provider Fastify dapat menjadi nilai tambah.
Fastify menyediakan type provider yang membantu inference berdasarkan schema.
Kapan Express Masih Menjadi Pilihan Rasional?
Express tetap relevan untuk banyak kasus.
Project Sederhana
Jika kebutuhan aplikasi hanya:
GET /users
POST /users
GET /products
POST /orders
Express dapat menyelesaikan kebutuhan tersebut dengan sangat sederhana.
Tim Sudah Menguasai Express
Pengetahuan tim merupakan faktor penting.
Migrasi ke framework baru memiliki biaya.
Jika tim sudah memahami Express secara mendalam, pindah ke Fastify hanya demi mendapatkan peningkatan benchmark mungkin tidak memberikan keuntungan nyata jika bottleneck aplikasi sebenarnya berada pada database, network, caching, atau external API.
Ekosistem Lama
Aplikasi enterprise yang telah menggunakan banyak middleware Express juga perlu mempertimbangkan biaya migrasi.
Dalam kondisi tersebut, Express bisa tetap dipertahankan dan dioptimalkan.
Dokumentasi Express sendiri menyediakan berbagai rekomendasi production seperti penggunaan asynchronous API, reverse proxy, load balancer, caching, dan process manager.
Dengan arsitektur deployment yang baik, aplikasi Express tetap dapat menangani workload production secara serius.
Apakah Express Sudah Menjadi Framework Lawas?
Istilah “framework lawas” perlu digunakan secara hati-hati.
Express memang lebih tua dibanding Fastify. Namun, lebih tua tidak otomatis berarti tidak relevan.
Express masih memiliki dokumentasi resmi yang aktif dan Express 5 telah mengadopsi sejumlah pola modern, termasuk dukungan Promise pada middleware dan route handler.
Karena itu, lebih tepat melihat Express sebagai framework yang matang dan minimalis, sementara Fastify dapat dipandang sebagai framework yang lebih berorientasi pada performa, schema, dan arsitektur plugin.
Pertanyaannya bukan:
“Apakah Express sudah mati?”
Melainkan:
“Apakah karakteristik Express masih sesuai dengan kebutuhan aplikasi yang sedang dibangun?”
Pertanyaan kedua jauh lebih berguna ketika membuat keputusan teknologi.
Perbandingan Kode Dasar
Express:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.json({
hello: 'world'
})
})
app.listen(3000)
Fastify:
const fastify = require('fastify')({
logger: true
})
fastify.get('/', async (request, reply) => {
return {
hello: 'world'
}
})
fastify.listen({
port: 3000
})
Secara sintaks, keduanya sama-sama mudah dipahami.
Perbedaannya mulai terasa ketika aplikasi berkembang menjadi banyak route, banyak dependency, validasi kompleks, authentication, logging, schema, dan service.
Jadi, Kapan Waktunya Beralih?
Tidak ada satu jawaban yang berlaku untuk semua project.
Jika Anda membuat project baru dengan target throughput tinggi, membutuhkan JSON Schema, TypeScript, plugin architecture, dan struktur modular, Fastify layak dipertimbangkan sejak awal.
Jika Anda memiliki aplikasi Express yang sudah stabil, memiliki tim berpengalaman, dan tidak mengalami masalah performa yang signifikan, migrasi total belum tentu diperlukan.
Pendekatan lain adalah melakukan eksperimen kecil.
Buat satu endpoint menggunakan Express dan Fastify, lalu ukur:
- requests per second
- p95 latency
- p99 latency
- memory usage
- CPU usage
- response size
- database latency
- error rate
Gunakan workload yang menyerupai kondisi production.
Dengan begitu, keputusan tidak hanya berdasarkan benchmark framework, tetapi berdasarkan data aplikasi Anda sendiri.
Perbandingan Akhir Fastify vs Express
| Aspek | Express | Fastify |
|---|---|---|
| Filosofi | Minimalis, routing dan middleware | Performa, schema, plugin dan modularitas |
| Performa | Baik untuk banyak kebutuhan web | Sangat kompetitif dan unggul pada benchmark resmi tertentu |
| Benchmark resmi 2026 | Sekitar 59.651 req/s pada skenario Fastify benchmark | Sekitar 97.595 req/s pada skenario yang sama |
| Latency benchmark | Sekitar 16,25 ms | Sekitar 9,73 ms |
| Routing | Sangat sederhana | Sederhana dan terintegrasi dengan schema |
| Middleware | Sangat kuat dan matang | Tidak built-in; dapat menggunakan plugin kompatibilitas |
| JSON Schema | Tidak menjadi fitur inti | Menjadi bagian penting dari validation dan serialization |
| Validasi request | Umumnya menggunakan package tambahan | Schema-based dengan Ajv |
| Serialisasi response | Fleksibel | Dioptimalkan melalui schema |
| TypeScript | Didukung dengan baik | Dukungan typing dan type provider sangat kuat |
| Plugin | Ekosistem middleware/package sangat luas | Plugin merupakan bagian inti arsitektur |
| Encapsulation | Dapat dicapai melalui router/module | Menjadi konsep fundamental |
| Logging | Biasanya menggunakan middleware/package | Pino terintegrasi |
| Async/Await | Didukung, termasuk Promise handling pada Express 5 | Sangat natural melalui async handler |
| Ekosistem | Sangat besar dan matang | Lebih kecil tetapi berkembang |
| Kompatibilitas package Express | Native | Sebagian dapat digunakan melalui compatibility plugin |
| Learning curve | Sangat mudah untuk pemula | Mudah di dasar, tetapi konsep plugin/schema perlu dipahami |
| Cocok untuk | REST API, web app, MVP, project existing | API high-throughput, microservices, TypeScript backend |
| Migrasi | Tidak perlu jika aplikasi sudah stabil | Cocok dipertimbangkan untuk project baru atau migrasi bertahap |
Pada benchmark resmi Fastify yang diperbarui September 2026, Fastify 5.12.1 mencatat 97.595 requests per second dan Express 5.2.1 mencatat 59.651 requests per second. Namun, Fastify sendiri menegaskan bahwa angka tersebut bersifat ilustratif dan hasil aplikasi nyata dapat berbeda berdasarkan workload dan lingkungan.
Jadi, apakah waktunya meninggalkan Express?
Tidak secara otomatis.
Fastify memang menawarkan pendekatan modern yang menarik, terutama untuk aplikasi yang membutuhkan performa tinggi, schema validation, TypeScript, logging terintegrasi, dan arsitektur plugin yang kuat.
Namun Express masih memiliki keunggulan besar dalam hal kematangan, ekosistem, kompatibilitas, dokumentasi, dan jumlah developer yang sudah terbiasa menggunakannya.
Untuk project baru, Fastify layak masuk dalam daftar kandidat utama, khususnya jika performa dan arsitektur modular menjadi prioritas.
Untuk aplikasi Express yang sudah berjalan dengan baik, migrasi sebaiknya dilakukan berdasarkan pengukuran dan kebutuhan nyata, bukan sekadar mengikuti tren.
Dengan kata lain, Fastify bukan sekadar pengganti Express, tetapi alternatif dengan filosofi yang berbeda. Express tetap menjadi pilihan kuat ketika fleksibilitas dan ekosistem menjadi prioritas, sedangkan Fastify semakin menarik ketika performa, schema, TypeScript, dan modularitas menjadi bagian penting dari desain backend.
