Mempersiapkan Lingkungan Pengembangan Elixir
Belajar Elixir
Apa itu asdf version manager?#

Erlang dan Elixir bisa diinstal langsung lewat panduan pada halaman unduh Erlang/OTP ↗ dan situs resmi Elixir ↗. Namun, metode ini memiliki keterbatasan dalam konteks pengembangan: sistem hanya bisa menangani satu versi runtime dalam satu waktu. Jika kita ingin menggunakan versi lain, besar kemungkinan akan terjadi konflik, atau sistem akan meminta kita menimpa versi yang sudah terinstal.
Untuk mengatasi masalah ini, kita bisa menggunakan version manager, yaitu alat yang memungkinkan kita menginstal dan mengelola banyak versi runtime secara berdampingan dalam satu sistem. Dengan pendekatan ini, kita bisa mendukung berbagai proyek yang membutuhkan versi runtime berbeda, serta memudahkan perpindahan antarversi saat dibutuhkan.
Version manager juga membantu menjaga konsistensi lingkungan pengembangan dalam satu tim, sehingga seluruh anggota menggunakan versi runtime yang sama dan terhindar dari masalah kompatibilitas.
Dalam tulisan ini, kita akan menggunakan version manager bernama asdf-vm ↗, atau cukup disebut asdf.
Mengapa Memilih asdf?#
Dalam proyek perangkat lunak modern, sering kali kita membutuhkan lebih dari satu runtime. Misalnya, sebuah aplikasi Elixir mungkin menggunakan kerl untuk manajemen versi Erlang, kiex untuk Elixir, dan nvm untuk Node.js. Jika setiap runtime dikelola dengan alat yang berbeda, pengelolaan lingkungan pengembangan menjadi lebih rumit dan menambah beban kognitif bagi programmer.
asdf menyederhanakan hal ini dengan menyediakan satu antarmuka terpadu untuk mengelola berbagai runtime melalui sistem plugin. Dengan asdf, kita bisa memasang dan beralih antarversi Erlang, Elixir, Node.js, dan puluhan runtime lainnya hanya dengan satu alat dan pola perintah yang sama.
Keunggulan utama asdf antara lain:
- Antarmuka tunggal dan seragam, jadi kita tidak perlu mempelajari cara kerja berbeda untuk setiap runtime.
- Dukungan plugin yang luas, termasuk plugin resmi (first-party) untuk Erlang dan Elixir.
- Konsistensi lintas proyek dan tim, melalui file konfigurasi
.tool-versionsyang mendeklarasikan versi setiap runtime secara spesifik.
Saat ini tersedia hampir 100 plugin ↗ yang dikembangkan oleh komunitas asdf. Plugin ini mendukung berbagai bahasa pemrograman, alat basis data, dan toolchain lainnya. Karena plugin untuk Erlang dan Elixir dikembangkan secara resmi, asdf menjadi pilihan yang sangat direkomendasikan untuk pengembangan proyek Elixir.
Instalasi asdf#
Untuk menginstal asdf, terdapat dua metode utama: pertama melalui package manager, dan kedua dengan mengunduh precompiled binary dari GitHub. Metode lain, seperti go install atau membangun langsung dari source code, juga tersedia tetapi tidak akan dibahas di sini. Jika tertarik menggunakan metode tersebut, silakan merujuk ke dokumentasi resmi di halaman ini ↗.
Menggunakan Package Manager#
Ini adalah metode yang direkomendasikan oleh pengembang asdf. Saat ini, ada tiga package manager yang didukung secara langsung: Homebrew (macOS), Zypper (openSUSE Linux), dan Pacman (Arch Linux):
# Untuk Homebrew (macOS)
$ brew install asdf
# Untuk Zypper (openSUSE Linux)
$ zypper install asdf
# Untuk Pacman (Arch Linux via AUR)
$ git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -sishPerintah
sudomungkin diperlukan tergantung pada konfigurasi sistem.
Jika sistem operasi yang digunakan tidak termasuk dalam daftar di atas, metode berikut bisa dijadikan alternatif.
Mengunduh Pre-compiled Binary#
Metode ini memerlukan git. Pastikan git sudah terinstal dengan menjalankan perintah berikut:
$ git --versionshJika versi git ditampilkan, artinya sudah terinstal. Jika belum, instal terlebih dahulu sesuai dengan sistem operasi yang digunakan:
# APT (Ubuntu Linux)
$ apt install git
# DNF (Fedora Linux)
$ dnf install git
# Pacman (Arch Linux)
$ pacman -S git
# Zypper (openSUSE Linux)
$ zypper install git
# Homebrew (macOS)
$ brew install coreutils gitshPerintah
sudomungkin diperlukan tergantung pada konfigurasi sistem.
Setelah git terpasang, buka halaman rilis asdf di GitHub ↗ dan unduh arsip .tar.gz yang sesuai dengan arsitektur sistem yang digunakan.
Ekstrak arsip tersebut ke dalam direktori yang sudah tercantum dalam environment variable $PATH. Untuk melihat daftar direktori dalam $PATH, jalankan:
$ echo $PATH
/home/nama_user_kamu/.local/bin:/usr/local/bin:/usr/bin:/binshDirektori dalam output tersebut dipisahkan dengan tanda titik dua :. Pilih salah satu direktori berikut untuk ekstraksi:
/home/nama_user_kamu/.local/bin- direktori milik pengguna, cocok untuk instalasi tanpa akses root./usr/local/bin- umumnya digunakan untuk perangkat lunak tambahan./usr/bindan/bin- sebaiknya dihindari kecuali benar-benar diperlukan, karena merupakan bagian dari sistem.
Direktori yang paling disarankan adalah /home/nama_user_kamu/.local/bin karena tidak memerlukan akses root dan lebih aman untuk penggunaan sehari-hari.
Verifikasi Lokasi Binary#
Setelah mengekstrak, pastikan asdf dapat dikenali oleh shell dengan menjalankan perintah berikut:
$ type -a asdf
asdf is /home/nama_user_kamu/.local/bin/asdfshJika hasilnya menunjukkan lokasi file asdf, itu berarti asdf sudah dikenali dengan benar. Jika tidak muncul, kemungkinan besar direktori tempat mengekstrak file belum terdaftar dalam $PATH.
Verifikasi Instalasi asdf#
Terakhir, jalankan perintah berikut untuk memastikan instalasi berhasil:
$ asdfshJika instalasi berhasil, kita akan melihat informasi versi dan nama program asdf.

Sekarang, asdf sudah siap digunakan. Selanjutnya, kita akan menginstal plugin untuk Erlang, Elixir, dan Node.js.
Instalasi Plugin di asdf#
asdf menggunakan plugin untuk mengelola berbagai runtime. Sebelum menginstal runtime, kita perlu menambahkan plugin yang sesuai terlebih dahulu.
Dalam tulisan ini, kita akan menginstal tiga runtime utama:
- Erlang - Elixir berjalan di atas BEAM VM, jadi kita memerlukan Erlang agar Elixir bisa berjalan.
- Elixir - Bahasa pemrograman utama yang akan kita pelajari dalam seri ini.
- Node.js (opsional) - Diperlukan jika nanti kita mengelola aset frontend pada Phoenix Framework ↗.
Plugin Erlang#
Langkah pertama adalah menambahkan plugin untuk Erlang, kemudian baru Elixir.
Sebelum menambahkan plugin Erlang, ada beberapa package yang perlu diinstal. Daftar berikut menyesuaikan dengan sistem operasi yang digunakan:
# APT (Ubuntu Linux 24.04)
$ apt install build-essential autoconf m4 libwxgtk3.2-dev libwxgtk-webview3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev unzip
# DNF (Fedora Linux)
$ dnf install gcc g++ automake autoconf ncurses-devel wxGTK-devel wxBase openssl-devel libxslt fop unzip
# Pacman (Arch Linux)
$ pacman -S --needed base-devel ncurses glu mesa wxwidgets-gtk3 libpng libssh unixodbc libxslt fop unzip
# Zypper (openSUSE Linux)
$ zypper install make automake autoconf gcc-c++ ncurses-devel libssh-devel libopenssl-devel wxGTK3-3_2-devel fop libxml2-tools libxslt-tools unzip
# Homebrew (macOS)
$ brew install autoconf openssl@3 wxwidgets libxslt fop unzipshPerintah
sudomungkin diperlukan tergantung pada konfigurasi sistem operasi.
Setelah semua dependensi terinstal, tambahkan plugin Erlang dengan perintah berikut:
$ asdf plugin add erlangshVerifikasi apakah plugin berhasil ditambahkan dengan perintah:
$ asdf plugin list
erlangshJika output menampilkan erlang, berarti plugin telah berhasil ditambahkan dan aktif.
Plugin Elixir#
Setelah menambahkan plugin untuk Erlang, langkah selanjutnya adalah menambahkan plugin untuk Elixir dengan perintah berikut:
$ asdf plugin add elixirshVerifikasi plugin yang sudah ditambahkan dengan perintah:
$ asdf plugin list
elixir
erlangshDengan demikian, plugin elixir dan erlang sudah terdaftar di asdf.
Plugin Node.js (Opsional)#
Plugin Node.js bersifat opsional, tetapi cukup sering digunakan dalam pengembangan aplikasi Elixir, terutama saat bekerja dengan Phoenix Framework ↗, yang melibatkan pengelolaan aset frontend.
Sama seperti plugin Erlang, plugin Node.js juga membutuhkan beberapa package tambahan, sesuai dengan sistem operasi yang digunakan:
# APT (Ubuntu/Debian)
$ apt install dirmngr gnupg curl gawk
# DNF (Fedora/CentOS/RHEL)
$ dnf install dirmngr gnupg2 curl gawk
# Pacman (Arch Linux)
$ pacman -S dirmngr gnupg curl gawk
# Zypper (openSUSE)
$ zypper install dirmngr gpg2 curl gawk
# Homebrew (macOS)
$ brew install dirmngr gpg curl gawkshPerintah
sudomungkin diperlukan tergantung pada konfigurasi sistem operasi.
Setelah dependensi terpasang, tambahkan plugin Node.js dengan perintah:
$ asdf plugin add nodejsshVerifikasi plugin yang sudah terpasang dengan perintah:
$ asdf plugin list
elixir
erlang
nodejsshDengan langkah ini, semua plugin yang dibutuhkan sudah siap. Tahap berikutnya adalah menginstal masing-masing runtime menggunakan asdf.
Instalasi Runtime di asdf#
Untuk instalasi kali ini, kita akan menggunakan versi runtime berikut:
- Erlang - versi 27.3
- Elixir - versi 1.18.3-otp-27
- Node.js - versi terbaru (saat tulisan ini dibuat: 23.10.0)
Sebelum memulai instalasi, perlu diingat bahwa setiap versi Elixir memiliki ketergantungan pada versi Erlang tertentu. Karena Elixir berjalan di atas BEAM VM, kita harus memastikan bahwa versi yang kita pilih saling kompatibel.
Untuk memastikan kompatibilitas, kita bisa merujuk ke dokumentasi resmi Elixir pada bagian Compatibility and Deprecations ↗. Berikut adalah cuplikan tabel kompatibilitas antara Elixir dan Erlang:
| Elixir version | Supported Erlang/OTP versions |
|---|---|
| 1.18 | 25 - 27 |
| 1.17 | 25 - 27 |
| 1.16 | 24 - 26 |
Karena kita menargetkan Elixir versi 1.18, maka kita membutuhkan Erlang versi 25 hingga 27. Dalam tulisan ini, kita akan menggunakan Erlang versi 27.3, yang merupakan versi terbaru dan tetap kompatibel dengan Elixir 1.18.
Menelusuri Versi yang Tersedia#
Sebelum memulai instalasi, kita bisa mengecek daftar versi runtime yang tersedia untuk memastikan bahwa versi yang kita inginkan sudah tersedia di asdf.
Untuk memeriksa semua versi Erlang yang tersedia, jalankan perintah berikut:
$ asdf list all erlangshPerintah ini akan menampilkan daftar semua versi Erlang yang tersedia. Pastikan versi 27.3 tercantum dalam daftar.
Untuk memeriksa versi Elixir yang tersedia, jalankan perintah:
$ asdf list all elixirshPastikan versi 1.18.3-otp-27 muncul dalam daftar.
Untuk Node.js, kita tidak perlu menentukan nomor versi secara spesifik, karena kita akan mencoba menginstal versi terbaru yang tersedia.
Instalasi Erlang#
Langkah pertama adalah menginstal Erlang versi 27.3:
$ asdf install erlang 27.3shProses ini akan mengunduh source code Erlang dan mengkompilasinya, yang dapat memakan waktu beberapa menit tergantung pada kecepatan mesin kita.
Setelah instalasi selesai, kita set versi Erlang 27.3 sebagai versi global:
$ asdf set --home erlang 27.3shPerintah ini akan menambahkan entri erlang 27.3 ke dalam file .tool-versions, yang menandakan bahwa versi ini akan digunakan secara default.
Untuk memverifikasi instalasi, kita dapat memulai Erlang shell dengan perintah:
$ erlshJika instalasi berhasil, terminal akan menampilkan Erlang shell beserta nomor versinya.

Instalasi Elixir#
Setelah Erlang, kita lanjutkan dengan menginstal Elixir versi 1.18.3-otp-27:
$ asdf install elixir 1.18.3-otp-27shElixir biasanya tersedia dalam bentuk precompiled binary, jadi proses instalasinya relatif cepat.
Setelah instalasi selesai, kita set versi Elixir 1.18.3-otp-27 sebagai versi global:
$ asdf set --home elixir 1.18.3-otp-27shPerintah ini akan menambahkan entri elixir 1.18.3-otp-27 ke file .tool-versions, sehingga kita dapat menggunakan versi ini secara default.
Untuk memverifikasi bahwa Elixir sudah terinstal dengan benar, jalankan:
$ iexshJika instalasi berhasil, kita akan masuk ke dalam Elixir Interactive Shell (IEx) dan dapat melihat versi Elixir yang sedang digunakan.

Instalasi Node.js#
Terakhir, kita akan menginstal Node.js. Kali ini kita akan memilih versi terbaru yang tersedia:
$ asdf install nodejs latestshPerintah ini akan mengunduh dan menginstal versi terbaru dari Node.js (saat tulisan ini dibuat: versi 23.10.0).
Setelah selesai, kita set versi Node.js ini sebagai versi default:
$ asdf set --home nodejs 23.10.0shUntuk memverifikasi bahwa Node.js sudah terinstal dengan benar, jalankan:
$ nodeshIni akan membuka Node.js REPL, di mana kita bisa memverifikasi versi Node.js yang sedang digunakan.

Sekarang, semua runtime yang dibutuhkan sudah berhasil diinstal dan dikonfigurasi. Di bagian selanjutnya, kita akan membahas bagaimana mengatur versi runtime secara global dan lokal sesuai dengan kebutuhan proyek.
Mengatur Versi Runtime di asdf#
Setelah menginstal Erlang, Elixir, dan Node.js, kita dapat mengatur versi runtime yang akan digunakan. asdf menyediakan dua cara untuk mengatur versi:
- Versi Global - Berlaku di seluruh sistem.
- Versi Lokal - Berlaku hanya di dalam direktori proyek tertentu.
Kedua cara ini menggunakan file .tool-versions untuk menyimpan konfigurasi, meskipun lokasi file ini berbeda untuk versi global dan lokal.
Mengatur Versi Global#
Versi global adalah versi default yang digunakan di seluruh sistem, kecuali ada versi lokal yang menimpanya. Konfigurasi versi global disimpan di file .tool-versions yang terletak di direktori home (~).
Ketika kita menggunakan perintah asdf set --home, kita sudah mengatur versi global. Namun, jika kita ingin mengaturnya kembali, berikut adalah contoh perintah yang bisa digunakan:
# Set versi global Erlang ke 27.3
$ asdf set --home erlang 27.3
# Set versi global Elixir ke 1.18.3-otp-27
$ asdf set --home elixir 1.18.3-otp-27
# Set versi global Node.js ke 23.10.0
$ asdf set --home nodejs 23.10.0shDengan perintah ini, setiap kali kita menjalankan perintah seperti erl, iex, atau node, versi global yang sudah diatur akan digunakan, di mana pun kita berada di sistem.
Mengatur Versi Lokal di Proyek#
Versi lokal hanya berlaku di dalam direktori proyek tertentu. Konfigurasi ini disimpan dalam file .tool-versions yang ada di root direktori proyek. Selama kita berada dalam direktori proyek (atau subdirektorinya), asdf akan menggunakan versi lokal dan mengabaikan versi global.
Misalnya, kita ingin membuat proyek Elixir baru dan menggunakan versi runtime yang berbeda dari versi global:
# Membuat proyek Elixir hello_world
$ mix new hello_world
# Masuk ke direktori proyek
$ cd hello_worldshDi dalam proyek ini, kita ingin mengatur Erlang ke versi 26.0 dan Elixir ke versi 1.17.0-otp-26:
# Set versi lokal Erlang ke 26.0
$ asdf set erlang 26.0
# Set versi lokal Elixir ke 1.17.0-otp-26
$ asdf set elixir 1.17.0-otp-26shPerintah ini akan menghasilkan file .tool-versions di direktori proyek dengan konfigurasi versi yang telah ditentukan. Berikut adalah contoh file .tool-versions di proyek:

Untuk menginstal semua versi runtime yang tercantum dalam file .tool-versions, jalankan perintah berikut:
$ asdf installshPerintah ini akan membaca isi file .tool-versions, mengunduh, dan menginstal versi-versi yang diperlukan:

Setelah instalasi selesai, kita bisa memverifikasi bahwa versi lokal sudah aktif dengan menjalankan perintah:
# Menjalankan Erlang shell
$ erl
Erlang/OTP 26 [erts-14.0] ...
# Menjalankan Interactive Elixir
$ iex
...
iex(1)> System.version()
"1.17.0"shKita dapat melihat versi Erlang yang digunakan di baris awal saat shell terbuka. Untuk Elixir, kita bisa memanggil fungsi System.version() di dalam iex untuk memastikan versi yang aktif.

ElixirLS: Ekstensi Editor untuk Pengembangan Elixir#
Official Elixir Language Server
Tim pengembang Elixir telah mengumumkan bahwa mereka sedang mengembangkan Elixir Language Server resmi, yang dapat dibaca lebih lanjut di halaman blog ini ↗. Sambil menunggu rilisnya, kita akan menggunakan ElixirLS, proyek yang dikembangkan oleh komunitas melalui elixir-lsp ↗.
ElixirLS adalah ekstensi editor yang mempermudah pengembangan proyek Elixir dengan menyediakan berbagai fitur untuk meningkatkan kenyamanan dan produktivitas. Ada dua komponen utama dalam ElixirLS:
- Language Server: Memungkinkan editor seperti VS Code untuk memahami struktur kode Elixir kita. Fitur seperti code completion, go-to-definition, dan inline documentation.
- Debug Adapter: Memungkinkan kita melakukan step-through debugging, yaitu menelusuri eksekusi program baris demi baris, melihat nilai variabel, dan memahami bagaimana kode dijalankan secara langsung.
Fitur ElixirLS#
Beberapa fitur ElixirLS antara lain:
- Debugger: Fitur step-through debugging untuk menelusuri eksekusi kode secara langsung.
- Automatic, Incremental Dialyzer Analysis: Analisis statis dengan Dialyzer yang memberikan umpan balik bertahap saat menulis kode.
- Automatic
@specSuggestions: Saran type annotations berdasarkan inferensi Dialyzer. - Inline Reporting of Warnings and Errors: Peringatan dan kesalahan kompilasi ditampilkan langsung di editor.
- Documentation Lookup on Hover: Dokumentasi function atau module ditampilkan saat kursor diarahkan ke kode.
- Go-to-Definition: Melompat langsung ke definisi function atau module.
- Code Completion: Saran kode yang muncul saat mengetik.
- Code Formatter: Memformat kode secara otomatis sesuai gaya penulisan standar Elixir.
- Find References: Menemukan semua referensi terhadap function atau module.
- Quick Symbol Lookup in File: Memungkinkan pencarian simbol seperti function atau variabel dalam file aktif.
- Quick Symbol Lookup in Workspace and Stdlib: Memungkinkan pencarian simbol di seluruh proyek dan pustaka standar Elixir/Erlang.
Dengan fitur-fitur tersebut, ElixirLS menjadi alat yang sangat berguna untuk menulis kode Elixir yang lebih rapi, mudah dipahami, dan minim bug.
Langkah-langkah Instalasi ElixirLS di VS Code#
Pada tulisan ini, kita akan menginstal plugin ElixirLS di VS Code. Untuk pengguna editor lain, daftar ekstensi yang tersedia dapat dilihat pada bagian IDE Plugins di README ↗ repositori elixir-lsp.
- Buka menu Extensions dengan menekan
Ctrl+Shift+Xatau klik ikon plugin di Activity Bar. - Ketik
ElixirLSpada kolom pencarian. - Pilih plugin yang muncul, lalu klik Install.

Setelah terinstal, ElixirLS akan membangun PLT cache untuk Dialyzer pada penggunaan pertama. Proses ini dapat memakan waktu sekitar 5 sampai 10 menit, tergantung pada spesifikasi mesin yang kita gunakan. Setelah selesai, semua fitur ElixirLS siap digunakan.

Dengan ini, kita telah menyelesaikan semua tahapan untuk menyiapkan lingkungan pengembangan Elixir, mulai dari instalasi asdf, pengaturan versi runtime, hingga integrasi editor dengan ElixirLS.
Referensi#
- asdf-vm. (2021, August 18). What is asdf? [Documentation]. https://asdf-vm.com/guide/introduction.html ↗
- asdf-vm. (2025, March 21). Getting Started [Documentation]. https://asdf-vm.com/guide/getting-started.html ↗
- asdf-vm. (2025, February 4). Erlang Plugin for asdf [GitHub README]. https://github.com/asdf-vm/asdf-erlang ↗
- asdf-vm. (2025, January 11). Elixir Plugin for asdf [GitHub README]. https://github.com/asdf-vm/asdf-elixir ↗
- Elixir. (2024, December 11). Compatibility and deprecations [Documentation]. https://hexdocs.pm/elixir/compatibility-and-deprecations.html#between-elixir-and-erlang-otp ↗
- elixir-lsp. (2025, March 24). ElixirLS - Elixir Language Server and Debug Adapter [GitHub README]. https://github.com/elixir-lsp/elixir-ls?tab=readme-ov-file#ide-plugins ↗