Daftar Isi
-
Apa itu
asdf
version manager?- Mengapa Memilih
asdf
?
- Mengapa Memilih
-
Instalasi
asdf
- Menggunakan Package Manager
- Mengunduh Pre-compiled Binary
- Verifikasi Lokasi Binary
- Verifikasi Instalasi
asdf
-
Instalasi Plugin di
asdf
- Plugin Erlang
- Plugin Elixir
- Plugin Node.js (Opsional)
-
Instalasi Runtime di
asdf
- Menelusuri Versi yang Tersedia
- Instalasi Erlang
- Instalasi Elixir
- Instalasi Node.js
-
Mengatur Versi Runtime di
asdf
- Mengatur Versi Global
- Mengatur Versi Lokal di Proyek
- ElixirLS: Ekstensi Editor untuk Pengembangan Elixir
- Referensi
Apa itu asdf
version manager?
Erlang dan Elixir bisa diinstal langsung melalui petunjuk pada halaman unduh Erlang/OTP dan halaman resmi Elixir. Namun, cara ini memiliki keterbatasan, yaitu hanya memungkinkan satu versi runtime terpasang dalam satu mesin. Jika ingin menggunakan versi lain, besar kemungkinan akan terjadi konflik atau sistem akan menyarankan untuk menimpa versi yang sudah ada.
Untuk mengatasi masalah tersebut, dapat digunakan version manager, yaitu alat yang memungkinkan instalasi dan pengelolaan beberapa versi runtime dalam satu sistem. Pendekatan ini mendukung kebutuhan proyek yang menggunakan versi berbeda, serta mempermudah perpindahan antarversi.
Version manager juga membantu menjaga konsistensi lingkungan pengembangan dalam tim, sehingga seluruh anggota menggunakan versi runtime yang sama dan menghindari masalah kompatibilitas.
Tulisan ini akan menggunakan version manager bernama asdf-vm, atau cukup disebut asdf.
Mengapa Memilih asdf
?
Dalam proyek perangkat lunak modern, sering kali dibutuhkan lebih dari satu runtime. Misalnya, aplikasi Elixir mungkin menggunakan Node.js untuk assets pipeline, atau PostgreSQL sebagai basis data. Jika setiap runtime dikelola dengan alat yang berbeda, seperti nvm
untuk Node.js, kiex
untuk Elixir, atau alat khusus Erlang, pengelolaan lingkungan menjadi lebih kompleks dan tidak konsisten.
asdf
menyederhanakan hal ini dengan menyediakan satu antarmuka 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 seragam.
Keunggulan utama asdf
adalah:
- Antarmuka tunggal dan konsisten, kita tidak perlu mempelajari cara kerja terpisah 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-versions
yang menyimpan versi setiap runtime secara spesifik.
Saat ini, tersedia hampir 100 plugin yang dikembangkan oleh komunitas, memungkinkan integrasi dengan berbagai bahasa pemrograman, alat basis data, dan toolchain lainnya. Karena plugin untuk Erlang dan Elixir dikembangkan secara resmi, maka asdf
adalah alat rekomendasi untuk pengembangan proyek Elixir.
Instalasi asdf
Untuk menginstal asdf
, terdapat dua metode yang direkomendasikan: 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, yaitu 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 -si
[!info] Perintah sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Jika sistem operasi yang digunakan tidak termasuk dalam daftar di atas, metode berikutnya bisa dijadikan alternatif.
Mengunduh Pre-compiled Binary
Metode ini memerlukan git
. Untuk memastikan git
sudah terinstal, jalankan perintah berikut:
$ git --version
Jika versi git
ditampilkan, artinya sudah terinstal. Jika belum, instal terlebih dahulu sesuai 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 git
[!info] Perintah sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Setelah git
tersedia, buka halaman rilis asdf di GitHub dan unduh arsip .tar.gz
yang sesuai dengan arsitektur sistem yang digunakan.
Ekstrak arsip tersebut ke salah satu direktori yang sudah termasuk dalam environment variable $PATH
. Untuk melihat daftar direktori dalam $PATH
, jalankan:
$ echo $PATH
/home/nama_user_kamu/.local/bin:/usr/local/bin:/usr/bin:/bin
Output tersebut berisi daftar direktori yang dipisahkan dengan titik dua :
. Pilih salah satu direktori berikut sebagai lokasi 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/bin
dan/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 pemakaian sehari-hari.
Verifikasi Lokasi Binary
Setelah mengekstrak, pastikan asdf
dapat dikenali oleh shell:
$ type -a asdf
asdf is /home/nama_user_kamu/.local/bin/asdf
Jika hasilnya menunjukkan lokasi file asdf
, berarti asdf
sudah dikenali dengan benar. Jika tidak muncul, kemungkinan besar direktori tempat ekstraksi belum terdaftar dalam $PATH
.
Verifikasi Instalasi asdf
Terakhir, jalankan perintah berikut untuk memastikan instalasi berhasil:
$ asdf
Jika instalasi berhasil, akan muncul informasi versi serta nama program asdf
.
Sekarang, asdf
sudah siap digunakan. Selanjutnya, kita akan menginstal plugin untuk Erlang, Elixir, dan Node.js.
Instalasi Plugin di asdf
Dalam tulisan ini, kita akan menginstal tiga runtime:
- Erlang – karena Elixir berjalan di atas BEAM VM.
- Elixir – bahasa pemrograman utama yang akan digunakan dan dipelajari.
- Node.js (opsional) – dibutuhkan jika ingin mengelola aset frontend pada Phoenix Framework.
asdf menggunakan plugin untuk mengelola berbagai runtime seperti Erlang, Elixir, atau Node.js. Sebelum menginstal runtime, plugin yang sesuai harus ditambahkan terlebih dahulu.
Plugin Erlang
Langkah pertama adalah menambahkan plugin untuk Erlang, baru kemudian Elixir.
Sebelum menambahkan plugin Erlang, ada beberapa package sistem 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 unzip
[!info] Perintah sudo
mungkin diperlukan tergantung pada konfigurasi sistem operasi.
Setelah semua dependensi tersedia, tambahkan plugin Erlang dengan perintah:
$ asdf plugin add erlang
Verifikasi apakah plugin berhasil ditambahkan:
$ asdf plugin list
erlang
Jika output menampilkan erlang
, berarti plugin telah berhasil ditambahkan dan aktif.
Plugin Elixir
Setelah menambahkan plugin untuk Erlang, langkah selanjutnya adalah menambahkan plugin untuk Elixir:
$ asdf plugin add elixir
Verifikasi plugin yang sudah ditambahkan:
$ asdf plugin list
elixir
erlang
Dengan 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 gawk
[!info] Perintah sudo
mungkin diperlukan tergantung pada konfigurasi sistem operasi.
Setelah dependensi terpasang, tambahkan plugin Node.js:
$ asdf plugin add nodejs
Verifikasi plugin yang sudah terpasang:
$ asdf plugin list
elixir
erlang
nodejs
Dengan langkah ini, semua plugin yang dibutuhkan sudah siap. Tahap berikutnya adalah menginstal masing-masing runtime menggunakan asdf
.
Instalasi Runtime di asdf
Versi runtime yang akan kita instal adalah:
- 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, penting untuk dicatat bahwa setiap versi Elixir memiliki ketergantungan pada versi Erlang tertentu. Karena Elixir berjalan di atas BEAM VM (yang disediakan oleh Erlang), kita perlu memastikan bahwa versi yang kita pilih saling kompatibel.
Untuk memastikan kompatibilitas, kita dapat merujuk ke dokumentasi resmi Elixir, tepatnya 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 target kita adalah Elixir versi 1.18, maka kita membutuhkan Erlang versi 25 hingga 27. Dalam tutorial ini, kita akan menggunakan Erlang versi 27.3 agar mendapatkan versi terbaru yang tetap kompatibel dengan Elixir 1.18.
Menelusuri Versi yang Tersedia
Sebelum instalasi, kita bisa memeriksa daftar versi runtime yang tersedia untuk memastikan versi yang kita inginkan ada:
# Memeriksa daftar versi Erlang
$ asdf list all erlang
...
27.3
# Memeriksa daftar versi Elixir
$ asdf list all elixir
...
1.18.3-otp-27
Pastikan bahwa versi Erlang 27.3 dan Elixir 1.18.3-otp-27 tersedia.
Untuk Node.js, kita akan memilih versi terbaru tanpa menentukan nomor versi secara spesifik.
Instalasi Erlang
Langkah pertama adalah menginstal Erlang versi 27.3:
$ asdf install erlang 27.3
asdf akan mengunduh source code Erlang dan mengkompilasinya. Proses ini bisa memakan waktu beberapa menit, tergantung kecepatan mesin kita.
Setelah selesai, kita set versi ini sebagai versi global:
$ asdf set --home erlang 27.3
Perintah ini akan menuliskan erlang 27.3
ke file .tool-versions
di direktori home, sehingga versi ini akan digunakan secara default.
Untuk memverifikasi, kita bisa masuk ke Erlang shell:
$ erl
Terminal akan menampilkan Erlang shell beserta informasi nomor versinya.
Instalasi Elixir
Setelah Erlang, sekarang kita instal Elixir versi 1.18.3-otp-27:
$ asdf install elixir 1.18.3-otp-27
Elixir biasanya tersedia dalam bentuk precompiled binary, jadi proses instalasinya akan lebih cepat.
Setelah instalasi selesai, set Elixir sebagai versi global:
$ asdf set --home elixir 1.18.3-otp-27
Perintah ini akan menambahkan elixir 1.18.3-otp-27
ke file .tool-versions
, melengkapi entri sebelumnya.
Untuk memastikan Elixir sudah aktif, jalankan:
$ iex
Kita akan masuk ke Elixir interactive shell dan melihat versinya.
Instalasi Node.js
Terakhir, kita instal Node.js. Kali ini kita akan memilih versi terbaru yang tersedia melalui asdf:
$ asdf install nodejs latest
asdf akan secara otomatis memilih dan menginstal versi terbaru (saat tulisan ini dibuat: 23.10.0).
Setelah selesai, kita set versi ini sebagai default:
$ asdf set --home nodejs 23.10.0
Untuk memastikan instalasi berhasil, jalankan:
$ node
Masuk ke Node.js REPL dan lihat versi 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 berhasil menginstal Erlang, Elixir, dan Node.js, saatnya 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.
Keduanya menggunakan file .tool-versions
sebagai sumber konfigurasi, namun berada di lokasi yang berbeda.
Mengatur Versi Global
Versi global adalah versi default yang digunakan di seluruh sistem, kecuali ada versi lokal yang menimpanya. Konfigurasinya disimpan di file .tool-versions
yang berada di direktori home (~
).
Pada saat kita menjalankan perintah asdf set --home
sebelumnya, kita sudah mengatur versi global. Namun, untuk lebih memahaminya, berikut adalah contoh perintah untuk mengaturnya kembali:
# 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.0
Dengan 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 tertentu (biasanya di folder proyek). Konfigurasinya disimpan dalam file .tool-versions
yang terletak di root direktori proyek. Selama kita berada dalam direktori proyek (atau subdirektorinya), asdf
akan menggunakan versi lokal dan mengabaikan versi global.
Untuk contoh, kita akan membuat proyek Elixir baru dan mengatur versi runtime yang berbeda dari versi global:
# Membuat proyek Elixir hello_world
$ mix new hello_world
# Masuk ke direktori proyek
$ cd hello_world
Di dalam proyek ini, kita akan 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-26
Perintah ini akan menghasilkan file .tool-versions
di direktori proyek dengan konfigurasi versi yang telah ditentukan:
Untuk menginstal semua versi runtime yang tercantum dalam file .tool-versions
, jalankan:
$ asdf install
asdf
akan membaca isi file tersebut, mengunduh dan menginstal versi-versi yang diperlukan:
Setelah instalasi selesai, kita dapat 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"
Versi Erlang akan langsung terlihat di baris awal ketika shell terbuka. Untuk Elixir, kita bisa memanggil fungsi System.version()
di dalam iex
.
Secara umum, perbedaan utama antara versi global dan lokal terletak pada cakupan penerapannya:
- Global: Berlaku di seluruh sistem.
-
Lokal: Hanya berlaku di direktori tempat file
.tool-versions
berada.
Dengan memahami konsep ini, kita dapat lebih fleksibel dalam mengelola proyek yang membutuhkan versi runtime yang berbeda-beda.
ElixirLS: Ekstensi Editor untuk Pengembangan Elixir
[!info] 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 yang meningkatkan kenyamanan dan produktivitas. Ada dua komponen utama dalam ElixirLS:
- Language Server, yang memungkinkan editor seperti VS Code untuk memahami struktur kode Elixir kita. Dengan fitur-fitur seperti code completion, go-to-definition, dan inline documentation, pengalaman menulis kode menjadi lebih interaktif.
- Debug Adapter, yang memungkinkan kita melakukan step-through debugging, yaitu menelusuri alur program baris demi baris, melihat nilai variabel, dan memahami bagaimana kode dijalankan secara langsung.
Dengan kedua komponen ini, ElixirLS menghadirkan pengalaman pengembangan modern dan interaktif.
Beberapa fitur unggulan yang dimiliki ElixirLS antara lain:
- Debugger: Fitur step-through debugging untuk menelusuri alur eksekusi kode secara langsung.
- Automatic, Incremental Dialyzer Analysis: Analisis statis dengan Dialyzer yang memberikan umpan balik bertahap saat menulis kode.
-
Automatic
@spec
Suggestions: 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 fungsi atau modul ditampilkan saat kursor diarahkan ke kode.
- Go-to-Definition: Melompat langsung ke definisi fungsi atau modul.
- 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 fungsi atau modul.
- Quick Symbol Lookup in File: Memungkinkan pencarian simbol seperti fungsi 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.
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
.
Langkah-langkah Instalasi ElixirLS di VS Code
- Buka menu Extensions dengan menekan
Ctrl+Shift+X
atau klik ikon plugin di Activity Bar. - Ketik
ElixirLS
pada kolom pencarian. - Pilih plugin yang muncul, lalu klik Install.
Setelah terinstal, ElixirLS akan membangun PLT cache untuk Dialyzer pada pemakaian pertama. Proses ini bisa memakan waktu sekitar 10 menit, tergantung 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