Pustaka vendor (vendor library) adalah pustaka pihak ketiga yang dibundel bersama compiler Odin, sehingga program dapat mengimpornya tanpa memasang apa pun dari luar dan tanpa menyusun sistem build tersendiri. Pustaka tersebut diimpor dengan awalan koleksi vendor:, contohnya import rl "vendor:raylib". Topik ini memperkenalkan isi koleksi vendor pada lini dev-2026-10, cara mengimpor dan mengompilasinya, serta batasan menjalankan program berjendela di lingkungan tanpa tampilan.
Koleksi vendor yang dibundel compiler#
Isi koleksi vendor dapat dilihat langsung pada folder vendor di akar instalasi compiler, yang jalurnya diberikan oleh perintah odin root. Pada lini dev-2026-10, folder tersebut memuat 33 paket, antara lain raylib untuk membuat jendela dan menggambar, glfw untuk pengelolaan jendela dan input, stb untuk pengolahan gambar, font, dan teks, miniaudio untuk suara, nanovg untuk grafika vektor, lua untuk skrip, curl dan zlib untuk jaringan serta kompresi, box2d untuk simulasi fisika, dan sdl2 atau sdl3 sebagai lapisan multimedia lintas platform. Daftar lengkapnya membantu pembaca menemukan pustaka yang tepat sebelum mencari di luar ekosistem.
Pemakaian pustaka vendor mengikuti aturan import biasa dengan awalan vendor:nama. Binding, yaitu deklarasi proc dan tipe yang menjembatani pustaka C-nya, sudah ditulis dan dirawat di dalam repositori Odin, sehingga versi binding selalu cocok dengan compiler yang dirilis bersamanya. Biaya integrasi yang biasanya muncul ketika menautkan pustaka C, mulai dari pilihan versi hingga penulisan berkas build, dihindari seluruhnya karena compiler memuat deklarasi dan berkas pustakanya dari folder vendor.
Mengimpor dan mengonfigurasi raylib#
Program berikut mengimpor vendor:raylib dan membuat jendela 320×240 piksel. Import diberi alias rl sesuai kebiasaan pada contoh resmi, dan pemanggilan InitWindow membuka jendela sebelum CloseWindow menutupnya melalui defer.
package main
import rl "vendor:raylib"
main :: proc() {
rl.InitWindow(320, 240, "Halo Vendor")
defer rl.CloseWindow()
// di komputer dengan tampilan, putaran menggambar ditulis di bagian ini
}Paket vendor juga menyediakan opsi yang dibaca lewat #config. Pada raylib, opsi RAYLIB_SHARED menentukan apakah program ditautkan dengan pustaka statis libraylib.a atau pustaka bersama libraylib.so.600, dan nilai bawaannya adalah statis. Deklarasi penautannya ada di berkas binding vendor/raylib/raylib.odin, yang juga menautkan pustaka sistem dl, pthread, dan X11 pada Linux. Mekanisme foreign import yang dipakai berkas tersebut persis seperti yang dibahas pada modul interop C, hanya saja kali ini seluruh deklarasi sudah disiapkan.
Memeriksa dan membangun program vendor#
Compiler memeriksa program vendor seperti program biasa. Perintah odin check menguji tipe dan pemanggilan binding tanpa menghasilkan berkas, sedangkan odin build melangkah lebih jauh dengan menautkan pustaka statis raylib ke dalam binari.
# periksa tipe dan pemanggilan binding tanpa menghasilkan berkas
odin check .
# bangun binari yang tertaut pustaka statis raylib
odin build . -out:demo-vendorKedua perintah berjalan tanpa pesan dan tanpa error, dan di direktori proyek muncul binari demo-vendor sebesar beberapa megabyte karena pustaka raylib beserta bagian yang dipakai ikut tertanam di dalamnya. Tidak ada langkah instalasi pustaka tambahan, tidak ada variabel lingkungan yang diatur, dan tidak ada berkas build yang ditulis, dan hal itu adalah nilai utama koleksi vendor.
Menjalankan di lingkungan tanpa tampilan#
Program berjendela membutuhkan tampilan. Pada lingkungan tanpa tampilan (headless), seperti mesin server tanpa server grafika, GLFW gagal menginisialisasi karena variabel lingkungan DISPLAY tidak ada. Percobaan berikut dijalankan di sandbox yang tidak memiliki tampilan, dan pesan segmentation fault dari shell disaring karena nomor prosesnya berubah setiap eksekusi.
# jalankan program (butuh tampilan)
odin run . 2>&1 | grep -v "Segmentation fault"INFO: Initializing raylib 6.0
INFO: Platform backend: DESKTOP (GLFW)
INFO: Supported raylib modules:
INFO: > rcore:..... loaded (mandatory)
INFO: > rlgl:...... loaded (mandatory)
INFO: > rshapes:... loaded (optional)
INFO: > rtextures:. loaded (optional)
INFO: > rtext:..... loaded (optional)
INFO: > rmodels:... loaded (optional)
INFO: > raudio:.... loaded (optional)
WARNING: GLFW: Error: 65550 Description: X11: The DISPLAY environment variable is missing
WARNING: GLFW: Failed to initialize GLFW
WARNING: SYSTEM: Failed to initialize platformLog tersebut menunjukkan raylib 6.0 dimuat beserta modulnya, lalu program berhenti pada inisialisasi GLFW dan menjelaskan penyebabnya, yaitu variabel DISPLAY tidak ada. Pada komputer desktop biasa, urutan yang sama berakhir dengan jendela 320×240 terbuka hingga program selesai, tanpa satu pun perubahan kode. Dua jalur perilaku yang berbeda hanya karena lingkungannya berbeda, dan pesan WARNING itulah petunjuk pertama yang dibaca ketika program berjendela tidak muncul di mesin mana pun.
stb, glfw, dan sisa koleksi vendor#
Koleksi stb membundel binding untuk pustaka populer karya Sean Barrett, di antaranya stb/image untuk memuat dan menulis gambar, stb/truetype untuk merender font, stb/vorbis untuk mendekode audio, serta stb/sprintf untuk pemformatan teks gaya C. Bindingnya sudah tersedia sejak awal, sedangkan implementasi C-nya perlu dikompilasi satu kali dengan skrip build_stb.sh pada folder vendor/stb/src sebelum program yang mengimpornya dapat ditautkan. Koleksi glfw menyediakan binding penuh untuk pustaka jendela yang juga menjadi landasan lapisan desktop raylib, sebagaimana terlihat pada baris INFO: Platform backend: DESKTOP (GLFW). Pemilihan antara keduanya adalah soal tingkat kendali, bukan soal perbedaan kelas pustaka.
Sisa koleksi memenuhi kebutuhan yang lazim pada program sistem. miniaudio untuk pemutaran suara, nanovg untuk menggambar vektor, curl dan zlib untuk jaringan serta kompresi, box2d untuk fisika dua dimensi, dan wgpu atau vulkan untuk grafika tingkat rendah semuanya mengikuti pola import yang sama. Pola yang konsisten membuat pengetahuan tentang satu pustaka vendor langsung berlaku ke seluruh koleksi.
Kesalahan umum#
Kesalahan pertama adalah mencari pustaka vendor di tempat lain. Karena koleksinya dibundel, pemasangan lewat manajer paket sistem justru menambah salinan kedua yang versinya bisa berbeda dari binding compiler, dan cara yang benar adalah memakai folder vendor yang jalurnya diberikan oleh odin root.
Kesalahan kedua adalah menjalankan program berjendela di lingkungan tanpa tampilan lalu menyimpulkan bindingnya rusak. Pesan WARNING: GLFW yang menyebut DISPLAY menunjukkan lingkungan yang belum memenuhi syarat, dan program yang sama berjalan utuh pada desktop. Uji cepat untuk memisahkan kesalahan kode dari kesalahan lingkungan adalah memanggil odin check ., karena pemeriksaan tipe tidak menyentuh tampilan sama sekali.
Ringkasan#
- Koleksi
vendor:pada dev-2026-10 membundel 33 pustaka pihak ketiga dengan binding yang dirawat bersama compiler, sehingga import, pemeriksaan, dan build berjalan tanpa instalasi eksternal. #configsepertiRAYLIB_SHAREDmemilih varian penautan, dan deklarasinya dapat dibaca langsung di berkas binding pada folder vendor.- Program berjendela membutuhkan tampilan, dan pesan
WARNING: GLFWtentangDISPLAYadalah petunjuk lingkungan, bukan kesalahan binding. - Koleksi
stbmemerlukan kompilasi C satu kali melaluibuild_stb.sh, sedangkan pustaka vendor lain seperti raylib dan glfw langsung tertaut.
Referensi#
- Overview — Odin Documentation
— Bagian Using a vendor library menjelaskan pola import
vendor:namadan#config. - Odin-lang/Odin — GitHub — Repositori compiler yang memuat folder vendor beserta binding resminya.
- Raylib — raysan5
— Pustaka C yang dibundel sebagai
vendor:raylibbeserta dokumentasinya.