September 1, 2026

Arsitektur EmDash CMS: Cara Kerja Teknis dan Keamanan Plugin

by

Lutfi Hanif

rumahweb.com

Banner - arsitektur emdash cms

Kalau kamu sudah tahu apa itu EmDash dan penasaran dengan detail teknisnya, ini artikel yang tepat. Di sini kita tidak akan membahas “apakah EmDash lebih baik dari WordPress” secara umum, tapi langsung masuk ke pertanyaan yang lebih penting untuk developer: bagaimana arsitektur EmDash bekerja di balik layar, dan apakah klaim keamanannya memang solid secara teknis?

Artikel ini diasumsikan kamu sudah familiar dengan konsep dasar seperti serverless, REST API, dan cara kerja CMS pada umumnya.

Ringkasan

  • EmDash dibangun di atas TypeScript, Astro 6.0, dan Kysely sebagai query builder dengan SQLite lokal dan Cloudflare D1 di produksi.
  • Keamanan plugin EmDash menggunakan V8 Isolate via Dynamic Workers, bukan container atau VM, sehingga lebih ringan tapi tetap terisolasi.
  • Setiap plugin wajib mendeklarasikan izin akses melalui Capability Manifest, mirip permission system di Android.
  • Konten di EmDash disimpan dalam Portable Text (structured JSON), bukan HTML, sehingga bisa diakses dan dimanipulasi langsung oleh AI agent.
  • MCP Server bawaan memungkinkan AI agent seperti Claude dan Cursor berinteraksi langsung dengan konten, schema, dan media.

Stack Teknologi EmDash: TypeScript, Astro 6.0, dan Kysely

Sebelum bicara soal keamanan dan arsitektur, ada baiknya kita lihat dulu tumpukan teknologi yang jadi fondasi EmDash.

EmDash dibangun di atas Astro 6.0, di-deploy ke Cloudflare Workers, menggunakan SQLite secara lokal dan Cloudflare D1 di produksi, dengan penyimpanan gambar bisa di disk lokal atau R2/S3. Berikut stack lengkapnya:

LayerTeknologiKeterangan
BahasaTypeScriptEnd-to-end typed, tidak ada JavaScript murni
Framework renderingAstro 6.0Island architecture, minimal JavaScript di client
Database lokalSQLiteUntuk development dan self-hosting
Database produksiCloudflare D1SQLite-compatible, distributed edge
Query builderKyselyType-safe SQL query builder untuk TypeScript
Object storageCloudflare R2 / Amazon S3Untuk media dan file
RuntimeCloudflare WorkersEdge serverless execution
Editor teksTinyMCEPilihan yang cukup kontroversial, dibahas lebih lanjut
Format kontenPortable TextStructured JSON, bukan HTML

Satu hal yang langsung menarik perhatian adalah pilihan TinyMCE sebagai editor. Pilihan arsitekturnya benar, tapi pilihan editornya dipertanyakan banyak developer. TinyMCE adalah editor yang sudah sangat lama dan terasa tidak selaras dengan kesan “modern” yang ingin disampaikan EmDash. Ini bukan blocker, tapi worth dicatat.

Pilihan per-post-type database tables juga menarik. Alih-alih menyimpan semua tipe konten dalam satu tabel besar seperti WordPress (wp_posts), EmDash membuat tabel terpisah untuk setiap tipe konten. Ini memberikan performa query yang lebih baik dan schema yang lebih clean, meski tradeoff-nya adalah migrasi schema yang lebih kompleks saat ada perubahan tipe konten.

Sandboxed Plugin: V8 Isolate dan Dynamic Workers

Ini adalah bagian yang paling sering diklaim sebagai keunggulan teknis arsitektur EmDash, dan memang secara arsitektur cukup solid.

Di WordPress, setiap plugin berjalan dalam proses PHP yang sama dengan core WordPress. Ini berarti plugin punya akses ke seluruh global state, bisa memodifikasi database sesuka hati, dan bisa mengeksekusi kode di konteks yang sama dengan kode inti. Satu plugin yang disusupi attacker bisa membaca semua data, memodifikasi semua file, dan mengeksfiltrasi credential.

EmDash mengambil pendekatan yang berbeda secara fundamental

EmDash berjalan di Cloudflare Workers dan mengisolasi plugin dalam sandbox yang aman menggunakan Dynamic Workers dengan izin eksplisit. Teknologi di baliknya adalah V8 Isolate, mekanisme isolasi yang sama yang digunakan Chrome untuk mengisolasi tab satu sama lain.

Cara kerjanya seperti ini: ketika sebuah plugin dipanggil, EmDash membuat V8 Isolate baru yang terisolasi dari isolate plugin lain dan dari core CMS. Plugin hanya bisa berkomunikasi dengan dunia luar melalui API yang sudah didefinisikan oleh EmDash, bukan melalui akses langsung ke memori atau sistem file.

Keuntungan V8 Isolate dibanding pendekatan containerisasi biasa

  • Startup time sangat cepat, diukur dalam milidetik, bukan detik seperti container
  • Memory footprint lebih kecil, bisa menjalankan ribuan isolate bersamaan
  • Tidak butuh OS-level virtualization, sehingga overhead jauh lebih rendah

Tradeoff yang perlu dipahami: V8 Isolate bukan pengganti container untuk semua use case. Isolate tidak memberikan isolasi jaringan atau filesystem yang sesungguhnya di luar lingkungan Cloudflare Workers. Tingkat portabilitas EmDash sangat bergantung pada seberapa banyak value yang kamu ambil dari model runtime Cloudflare. Di luar Cloudflare, sandboxing ini tidak bekerja dengan cara yang sama.

Capability Manifest: Deklarasi Izin Eksplisit

Model keamanan EmDash mengadopsi prinsip least privilege melalui apa yang disebut Capability Manifest.

Setiap plugin EmDash wajib mendeklarasikan secara eksplisit kapabilitas apa yang dibutuhkannya dalam file manifest. Ini mirip dengan permission system di Android atau iOS: sebelum aplikasi bisa mengakses kamera atau lokasi, ia harus mendeklarasikannya dan pengguna harus menyetujuinya.

Contoh capability yang bisa dideklarasikan plugin EmDash:

{
  "capabilities": {
    "storage": {
      "read": ["posts", "media"],
      "write": ["posts"]
    },
    "network": {
      "outbound": ["api.example.com"]
    },
    "auth": false,
    "admin": false
  }
}

Plugin yang mendeklarasikan akses read ke tabel posts tidak bisa mengakses tabel users. Plugin yang tidak mendeklarasikan akses jaringan tidak bisa membuat outbound request apapun. Ini adalah perbedaan yang sangat signifikan dibanding model WordPress di mana plugin bisa melakukan database query apapun selama tahu nama tabelnya.

Implikasinya untuk keamanan: bahkan jika sebuah plugin berhasil disusupi attacker, blast radius-nya terbatas pada kapabilitas yang sudah dideklarasikan. Plugin SEO yang disusupi tidak bisa mengakses data transaksi WooCommerce karena tidak memiliki kapabilitas untuk itu.

Passkey-First Authentication dan WebAuthn

EmDash menggunakan passkey sebagai metode autentikasi utama, bukan sebagai fitur opsional. Ini adalah implementasi standar WebAuthn (Web Authentication) yang sudah menjadi standar W3C.

Cara kerjanya: saat pertama kali setup, EmDash generate pasangan kunci public-private yang disimpan di perangkat kamu (hardware security key, TPM, atau secure enclave di smartphone). Private key tidak pernah meninggalkan perangkat. Saat login, server mengirim challenge yang harus ditandatangani menggunakan private key tersebut.

Implikasi keamanan yang langsung terasa:

  • Tidak ada password yang bisa dicuri dari database karena tidak ada password yang disimpan di server
  • Phishing tidak efektif karena passkey terikat ke domain spesifik, kamu tidak bisa “tertipu” memasukkan passkey ke domain palsu
  • Brute force tidak relevan karena tidak ada credential berbasis string yang bisa ditebak

Tradeoff: pengguna yang belum familiar dengan passkey mungkin mengalami friction di awal. Recovery jika kehilangan semua perangkat juga perlu dipikirkan dengan baik saat setup awal.

Portable Text vs HTML: Kenapa Konten Tidak Disimpan sebagai HTML

Ini adalah keputusan arsitektur yang paling menarik dan paling berdampak jangka panjang.

EmDash menggeser konten dari rendered document ke structured data model. EmDash berfungsi sebagai grounding-enabling system dengan menyediakan konten terstruktur yang bisa langsung diinterpretasikan oleh large language model. Pemisahan konten dari rendering di EmDash berarti lapisan konten machine-readable by design, bukan sebagai afterthought.

Di WordPress, konten disimpan sebagai HTML di kolom post_content. Ini simple, tapi punya beberapa masalah:

  • HTML tidak semantic untuk mesin, hanya untuk browser
  • Parsing HTML untuk dimanipulasi AI atau dikonversi ke format lain rawan error
  • Shortcode dan block markup Gutenberg membuat HTML makin tidak clean
  • Satu format konten tidak bisa dengan mudah di-render di berbagai platform

EmDash memilih Portable Text, format konten berbasis JSON yang dikembangkan oleh Sanity. Contoh sederhana bagaimana konten tersimpan:

{
  "_type": "block",
  "style": "h2",
  "children": [
    {
      "_type": "span",
      "text": "Judul Artikel",
      "marks": []
    }
  ]
}

Dan paragraf dengan teks bold:

{
  "_type": "block",
  "style": "normal",
  "children": [
    {
      "_type": "span",
      "text": "Ini teks biasa dan ",
      "marks": []
    },
    {
      "_type": "span",
      "text": "ini teks bold",
      "marks": ["strong"]
    }
  ]
}

Konten disimpan sebagai portable text, structured JSON bukan HTML string, yang berarti agent bisa membaca, memodifikasi, dan menghasilkan konten tanpa perlu parsing markup.

Keuntungan praktisnya: konten yang sama bisa di-render menjadi HTML untuk web, Markdown untuk dokumen, atau format lain sesuai kebutuhan tanpa mengubah data sumbernya. Ini sangat relevan untuk omnichannel publishing.

Tradeoff: ada learning curve untuk developer yang terbiasa dengan HTML. Ekosistem tooling untuk Portable Text masih jauh lebih kecil dibanding ekosistem HTML.

Live Collections: Konten Berubah Tanpa Rebuild

Astro dikenal sebagai static site generator yang membutuhkan rebuild setiap kali konten berubah. EmDash mengatasi masalah ini melalui Live Collections, fitur yang diperkenalkan di Astro 6.0.

EmDash menggunakan serverless execution model di mana kode hanya berjalan saat ada request. Alih-alih mengandalkan server yang terus berjalan, ia mengeksekusi logika melalui Cloudflare Workers di edge, memproses request, dan mengembalikan respons secara instan.

Secara teknis, Live Collections memungkinkan Astro mengambil data dari database secara dinamis saat request masuk, mirip dengan Server-Side Rendering, tapi dengan keuntungan edge deployment. Konten yang berubah di CMS langsung tercermin tanpa rebuild, sementara halaman yang tidak berubah tetap di-serve dari cache edge.

Ini menghilangkan salah satu friction terbesar dari static site approach: pengguna non-teknis tidak perlu tahu atau peduli soal “build process” setiap kali mempublikasikan konten.

Database dan Storage Backend yang Fleksibel

EmDash dirancang untuk tidak terikat ke satu vendor storage, meski memang dioptimasi untuk Cloudflare.

Database options:

  • SQLite untuk development lokal, zero configuration
  • Cloudflare D1 untuk produksi di Cloudflare Workers, SQLite-compatible dengan distribusi global
  • Turso sebagai alternatif D1, libSQL-based dengan kemampuan multi-region replication
  • PostgreSQL untuk self-hosted atau deployment di lingkungan non-Cloudflare

Object Storage:

  • Disk lokal untuk development
  • Cloudflare R2 untuk produksi di Cloudflare, S3-compatible tanpa egress fee
  • Amazon S3 dan S3-compatible storage lainnya

Fleksibilitas ini penting untuk adopsi enterprise yang tidak bisa atau tidak mau bergantung pada Cloudflare sebagai single vendor. Namun perlu dicatat: semakin jauh dari Cloudflare Workers, semakin banyak fitur keamanan plugin yang tidak bisa dimanfaatkan sepenuhnya.

EmDash sebagai AI-Native CMS: MCP Server dan Agent Skills

MCP server memungkinkan AI agent seperti Claude, Cursor, dan tool serupa berinteraksi langsung dengan CMS: membuat konten, mengelola schema, mengupload media, dan mencari konten yang ada. EmDash menyediakan CLI yang menghasilkan JSON untuk programmatic access. EmDash juga menyertakan Agent Skills, modul dokumentasi terstruktur yang memandu AI agent dalam menjalankan tugas seperti pembuatan plugin dan porting tema WordPress.

Implementasi MCP (Model Context Protocol) di EmDash bukan sekadar fitur tempel. Beberapa hal yang bisa dilakukan AI agent via MCP:

# Contoh interaksi agent via MCP
agent: "Buat artikel baru dengan judul 'Tutorial Docker' dan jadwalkan untuk besok pukul 09:00"
emdash-mcp: -> create_content(type: "post", title: "Tutorial Docker", scheduled: "2026-09-01T09:00:00")

agent: "Tampilkan semua artikel yang belum dipublikasikan"
emdash-mcp: -> query_content(status: "draft", type: "post")

agent: "Ubah schema tipe konten 'product' dengan menambahkan field 'sku'"
emdash-mcp: -> update_schema(content_type: "product", add_field: {name: "sku", type: "string"})

Arsitektur EmDash sepertinya dibuat dengan satu pertanyaan yang sama: “Bagaimana jika AI agent yang perlu melakukan ini?” Kamu bisa mengarahkan Claude ke EmDash dan berkata “buatkan saya sebuah tema”, dan dokumentasi terstruktur, typed API, serta MCP server membuat ini benar-benar bisa dilakukan.

Agent Skills adalah konsep menarik: EmDash menyertakan modul dokumentasi terstruktur yang secara khusus dirancang untuk dikonsumsi AI agent, bukan manusia. Modul ini berisi instruksi step-by-step yang bisa diikuti agent untuk menyelesaikan tugas kompleks seperti membuat plugin baru atau mengonversi tema WordPress.

Cara Migrasi dari WordPress ke EmDash

Migrasi konten dari WordPress ke EmDash didukung melalui dua jalur yang bisa dikombinasikan.

Jalur 1: WXR Import

WordPress Export (WXR) adalah format XML standar yang sudah lama ada. EmDash memiliki importer yang membaca file WXR dan mengonversi konten ke Portable Text. Proses dasarnya:

  1. Di WordPress: Tools > Export > All content > Download Export File
  2. Di EmDash: gunakan wizard import yang ada di dashboard
  3. EmDash mengonversi HTML dari WordPress ke Portable Text
  4. Review hasil konversi, terutama untuk konten dengan shortcode atau Gutenberg blocks yang kompleks

Jalur 2: EmDash Exporter Plugin

Untuk migrasi yang lebih presisi, ada plugin WordPress bernama EmDash Exporter yang bisa diinstal di situs WordPress sumber. Plugin ini mengekspor konten dalam format yang lebih ramah untuk EmDash dibanding WXR standar, dengan handling yang lebih baik untuk media dan metadata kustom.

Yang tidak bisa dimigrasi otomatis:

  • Plugin WordPress tidak ada padanannya di EmDash
  • Tema WordPress tidak kompatibel, harus buat tema Astro dari nol atau port secara manual
  • Custom post types dengan field kompleks butuh penyesuaian manual di schema EmDash
  • Shortcode dan custom Gutenberg blocks memerlukan konversi manual

Limitasi yang perlu diketahui: konverter Gutenberg di EmDash masih dalam tahap awal. Block yang sederhana seperti Paragraph, Heading, dan Image umumnya bisa dikonversi dengan baik, tapi block kompleks dari plugin premium sering memerlukan intervensi manual.

Biaya Hosting EmDash: Cloudflare Workers vs Self-Hosted vs VPS

Ini adalah pertimbangan praktis yang sering luput dari pembahasan teknis.

Pilihan HostingBiayaSandboxed PluginCocok Untuk
Cloudflare Workers Free TierGratisTidak tersediaEksperimen dan development
Cloudflare Workers Paid ($5/bulan)$5/bulanTersedia penuhProduksi skala kecil-menengah
Self-hosted di VPSBiaya VPSTidak tersediaTim yang ingin kontrol penuh
Node.js deploymentBiaya serverTerbatasLingkungan non-Cloudflare

Poin krusial yang sering tidak disebutkan: fitur sandboxed plugin yang jadi keunggulan utama EmDash hanya tersedia di Cloudflare Workers berbayar. Di free tier dan di luar Cloudflare, plugin tidak berjalan dalam V8 Isolate yang sesungguhnya. Ini bukan berarti EmDash tidak berguna di luar Cloudflare, tapi klaim keamanan utamanya memerlukan paket berbayar untuk berlaku sepenuhnya.

Untuk self-hosting di VPS, EmDash tetap bisa berjalan dengan baik menggunakan SQLite atau PostgreSQL sebagai database. Ini adalah pilihan yang masuk akal untuk tim yang punya alasan untuk tidak bergantung pada Cloudflare, baik karena regulasi data, kontrol infrastruktur, atau preferensi vendor.

Limitasi dan Hal yang Perlu Diperhatikan Sebelum Deploy

Setelah semua yang terdengar menjanjikan, ada beberapa hal yang harus jadi pertimbangan serius sebelum kamu commit menggunakan EmDash untuk produksi.

  • Status beta yang berarti sungguh-sungguh
    Arsitekturnya benar, kematangannya belum sampai. Gap itu tertutup satu kuartal demi satu kuartal. Ini bukan “beta” sebagai label marketing. EmDash v0.1.0 masih mengalami breaking changes antar versi. Jangan deploy ke produksi yang mission-critical sampai setidaknya versi 1.0 stabil.
  • Potensi vendor lock-in ke Cloudflare
    Meski EmDash open-source dan secara teknis bisa berjalan di VPS, praktisnya banyak keunggulan teknis EmDash sangat bergantung pada ekosistem Cloudflare: D1, R2, Workers, dan Dynamic Workers untuk sandboxing. Evaluasi seberapa jauh kamu nyaman dengan ketergantungan ini sebelum mulai.
  • Ekosistem plugin masih kosong
    Tidak ada plugin SEO, tidak ada e-commerce, tidak ada form builder, tidak ada analytics, tidak ada membership system. Kamu harus membangun sendiri atau menunggu ekosistem tumbuh. Untuk proyek yang butuh banyak fungsionalitas sekarang, ini blocker yang nyata.
  • TinyMCE sebagai editor adalah tradeoff
    Untuk pengguna non-teknis yang terbiasa dengan editor modern, TinyMCE mungkin terasa dated. Ini bukan blocker teknis tapi bisa menjadi friction dalam adopsi jika audiensmu adalah content editor yang terbiasa dengan Notion atau bahkan Gutenberg.
  • Tidak ada padanan WooCommerce
    Kalau proyek kamu butuh e-commerce sekarang, EmDash bukan jawabannya.

FAQ

Berikut adalah beberapa pertanyaan popular tentang Arsitektur EmDash CMS.

Apakah sandboxed plugin EmDash benar-benar lebih aman dari model plugin WordPress?

Secara arsitektur, ya. V8 Isolate memberikan isolasi memori yang nyata antar plugin dan membatasi akses melalui Capability Manifest. Namun perlu dicatat bahwa isolasi ini hanya berlaku penuh di lingkungan Cloudflare Workers berbayar. Di self-hosting di luar Cloudflare, level isolasinya berbeda dan tidak sekuat implementasi di Workers. Selain itu, keamanan tetap bergantung pada implementasi Capability Manifest yang benar dari setiap plugin.


Apakah EmDash bisa digunakan tanpa Cloudflare?

Bisa, EmDash mendukung deployment via Node.js di VPS atau server manapun. Database bisa menggunakan SQLite untuk lokal atau PostgreSQL untuk produksi. Yang hilang saat di luar Cloudflare adalah fitur sandboxed plugin berbasis V8 Isolate yang jadi keunggulan keamanan utama, serta beberapa optimasi performa dari edge network Cloudflare.


Bagaimana cara AI agent berinteraksi dengan EmDash melalui MCP?

EmDash mengimplementasikan Model Context Protocol (MCP) sebagai built-in server. AI agent yang kompatibel dengan MCP, seperti Claude via Claude Desktop atau Cursor, bisa terhubung ke MCP server EmDash dan menjalankan operasi seperti membuat konten, mengubah schema, mengupload media, dan melakukan query konten melalui interface yang sudah didefinisikan. Konfigurasi dasarnya hanya membutuhkan endpoint URL dan credentials yang ditambahkan ke konfigurasi MCP client.


Kapan waktu yang tepat untuk mulai mengadopsi EmDash untuk proyek produksi?

Berdasarkan trajectory perkembangannya, evaluasi ulang EmDash untuk produksi di sekitar pertengahan 2027 ketika diperkirakan sudah mencapai versi yang lebih stabil dan ekosistem plugin mulai terbentuk. Saat ini, gunakan untuk eksperimen, proyek internal, atau proof of concept yang tidak mission-critical. Ikuti GitHub repository EmDash dan changelog-nya untuk memantau progress menuju stabilitas.


Kesimpulan

Untuk pekerjaan klien di 2026, EmDash masih terlalu awal. Untuk greenfield project di 2027, ia mungkin menjadi default untuk project dengan shape yang tepat. Penilaian ini sangat tepat dan bisa jadi pegangan praktis.

Arsitektur EmDash secara teknis sangat solid: V8 Isolate untuk plugin isolation, Capability Manifest untuk least-privilege access, Portable Text untuk content portability, MCP Server untuk AI integration, dan Live Collections untuk dynamic content tanpa rebuild. Ini adalah keputusan desain yang benar dan relevan untuk kebutuhan 2026 ke depan.

Tapi arsitektur yang benar tidak otomatis berarti siap pakai sekarang. Ekosistem yang kosong, status beta yang masih aktif berkembang, dan ketergantungan pada Cloudflare untuk fitur keamanan utamanya adalah hambatan nyata yang perlu dipertimbangkan dengan jujur.

Rekomendasi praktis: mulai eksperimen dengan EmDash sekarang untuk proyek internal atau greenfield yang tidak mission-critical. Ikuti perkembangan ekosistem plugin dan release cycle-nya. Jadikan sebagai kandidat serius untuk proyek baru di pertengahan 2027 ketika ekosistemnya sudah lebih terbentuk.

Untuk menjalankan EmDash di luar Cloudflare dengan kontrol penuh atas infrastruktur, VPS dengan spesifikasi yang tepat adalah fondasi yang paling fleksibel. Layanan VPS KVM Rumahweb Indonesia menyediakan berbagai pilihan spesifikasi dengan akses SSH penuh, pilihan distro Linux yang beragam, dan SSD storage untuk performa EmDash yang optimal, cocok untuk tim yang ingin bereksperimen dengan EmDash dalam lingkungan yang sepenuhnya mereka kontrol.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Related Post