pub.dev adalah pusat distribusi package untuk ekosistem Dart, baik package buatan tim Dart maupun package kontribusi komunitas. Topik ini membahas cara mencari package, struktur halaman package pada situs tersebut, pembacaan tiga dimensi skornya, dan evaluasi kelayakan sebelum sebuah dependensi diikutkan ke dalam proyek. Dua contoh di bagian akhir membaca metadata dan skor package secara langsung melalui API resmi pub.dev, lalu menambahkan package hasil evaluasi ke sebuah proyek dengan dart pub add.
Mencari package di pub.dev#
Pencarian package dimulai dari kotak pencarian pada situs pub.dev. Kata kuncinya dapat berupa nama package, bagian dari namanya, atau istilah yang menggambarkan kebutuhan, misalnya http untuk permintaan HTTP dan intl untuk format tanggal serta angka. Setiap hasil pencarian menampilkan nama, deskripsi singkat, lencana penerbit terverifikasi, bila ada, beserta skor package, sehingga gambaran awal kualitasnya terlihat sebelum halaman package dibuka.
Hasil pencarian juga dapat disaring menurut platform. pub.dev mendeteksi dukungan platform sebuah package dengan menganalisis pustaka inti yang diimpor oleh package tersebut, misalnya package yang mengimpor dart:html dinilai tidak mendukung platform native. Platform yang dikenal mencakup Windows, Linux, macOS, Android, iOS, dan Web, ditambah dua SDK, yaitu Flutter dan Dart. Tag platform yang terdeteksi inilah yang menjadi dasar penyaringan pada halaman pencarian. Dengan menyaring sejak awal, package yang tidak berjalan pada target aplikasi tersingkir sebelum waktu terbuang untuk membaca halamannya. Pencarian yang sama juga dapat dibagikan dalam bentuk tautan, misalnya https://pub.dev/packages?q=http
untuk kata kunci http, sehingga hasil evaluasi mudah dikirimkan kepada rekan kerja.
Struktur halaman package#
Halaman sebuah package di pub.dev tersusun dari bagian-bagian yang masing-masing bersumber dari berkas di dalam package tersebut. Isi utama halaman berasal dari README.md, yaitu berkas yang menjelaskan tujuan package, cara instalasinya, dan contoh penggunaannya. Perubahan antar versi bersumber dari CHANGELOG.md yang mendapat tab tersendiri, sedangkan detail seperti deskripsi dan tautan situs diambil dari pubspec.yaml dan ditampilkan pada sisi kanan halaman. Daftar versi yang pernah dirilis dapat dilihat, dan tab Scores memuat laporan lengkap penilaian package.
Halaman package juga menampilkan tag platform yang terdeteksi dari kode package, sehingga dukungan Windows, Linux, macOS, Android, iOS, atau Web dapat dibaca tanpa membuka kodenya. Selain README, halaman package menyediakan tab Example berisi contoh penggunaan bila package menyediakan folder example, serta tab Installing yang menunjukkan langkah penambahan package pada setiap ekosistem. Tautan repository pada sisi kanan halaman menuju sumber kode aslinya, dan lencana penerbit terverifikasi menandai package yang dikelola oleh sebuah domain yang telah diverifikasi. Dengan membaca README, changelog, daftar versi, dan repository tersebut, asal-usul sebuah package dapat dinilai sebelum package itu diikutkan ke dalam proyek.
Membaca skor package#
pub.dev menampilkan tiga dimensi skor untuk setiap package, yaitu Likes, Pub Points, dan download count. Ketiganya tampil pada hasil pencarian dan bilah samping halaman package, sedangkan rinciannya dapat dibuka pada tab Scores. Likes menghitung jumlah pengembang yang menyukai sebuah package melalui tombol like pada halamannya, sehingga menjadi ukuran sentimen sesama pengembang. Download count mencatat jumlah arsip package yang diunduh dari server, dan Pub Points adalah ukuran kualitas yang dihitung dari beberapa kategori penilaian.
Kategori penilaian Pub Points mencakup kepatuhan pada konvensi berkas Dart, kelengkapan dokumentasi yang mengukur contoh kode dan cakupan dokumentasi API, kebersihan hasil analisis statis, dukungan platform, kemutakhiran dependensi, serta dukungan toolchain modern seperti SwiftPM dan Wasm. Rincian poin per kategori dapat dibuka pada tab Scores untuk melihat poin yang diperoleh dan poin yang hilang. Model penilaiannya terus berkembang, sehingga jumlah kategori dan bobotnya dapat berubah dari waktu ke waktu.
Membaca metadata melalui API publik#
pub.dev menyediakan API resmi yang dapat dipanggil tanpa kredensial. Endpoint https://pub.dev/api/packages/<nama> mengembalikan JSON berisi metadata package, termasuk versi terkini, deskripsi, batasan SDK, topik, dan daftar dependensi. Perintah curl berikut membaca metadata package http dan menyaring bidang utamanya dengan python3.
export PATH=/home/kal/dart-sdk/bin:$PATH
# baca metadata versi terkini package http melalui API publik pub.dev
curl -s https://pub.dev/api/packages/http | python3 -c '
import json, sys
d = json.load(sys.stdin)
latest = d["latest"]["pubspec"]
print("name :", d["name"])
print("version :", d["latest"]["version"])
print("description :", latest["description"])
print("sdk :", latest["environment"]["sdk"])
print("topics :", ", ".join(latest.get("topics", [])))
print("dependencies :", ", ".join(sorted(latest["dependencies"])))
'name : http
version : 1.6.0
description : A composable, multi-platform, Future-based API for HTTP requests.
sdk : ^3.4.0
topics : http, network, protocols
dependencies : async, http_parser, meta, webKeluaran memperlihatkan identitas package dalam bentuk yang ringkas. Bidang version menyatakan versi terkini saat perintah dijalankan, dan angkanya bergerak setiap kali versi baru dirilis. Bidang sdk memuat batasan SDK yang harus dipenuhi proyek konsumen, sedangkan dependencies adalah package yang akan ikut terunduh bersama package utamanya. Bidang topics adalah label tema yang dideklarasikan package itu sendiri untuk pencarian.
Endpoint kedua, https://pub.dev/api/packages/<nama>/score, mengembalikan skor package dalam format JSON. Perintah berikut membaca skor package yang sama dan merapikan tampilannya dengan json.tool.
export PATH=/home/kal/dart-sdk/bin:$PATH
# baca skor package http melalui endpoint skor API pub.dev
curl -s https://pub.dev/api/packages/http/score | python3 -m json.tool{
"grantedPoints": 160,
"maxPoints": 160,
"likeCount": 8480,
"downloadCount30Days": 14793897,
"tags": [
"publisher:dart.dev",
"has:topic",
"sdk:dart",
"sdk:flutter",
"platform:android",
"platform:ios",
"platform:windows",
"platform:linux",
"platform:macos",
"platform:web",
"runtime:native-aot",
"runtime:native-jit",
"runtime:web",
"is:null-safe",
"is:wasm-ready",
"is:dart3-compatible",
"license:bsd-3-clause",
"license:fsf-libre",
"license:osi-approved",
"topic:http",
"topic:network",
"topic:protocols"
]
}Bidang grantedPoints dan maxPoints adalah Pub Points package tersebut, dan keduanya bernilai 160 karena seluruh poin berhasil diperoleh. Bidang likeCount dan downloadCount30Days mencatat popularitas dalam bentuk jumlah like dan jumlah unduhan 30 hari terakhir. Daftar tags mengelompokkan tag menurut awalannya, misalnya sdk: untuk SDK yang didukung, platform: untuk platform yang didukung, license: untuk jenis lisensi, dan publisher: untuk penerbit terverifikasinya. Angka-angka pada keluaran mengikuti keadaan pub.dev saat topik ini ditulis, sehingga angka yang tercetak di lain hari dapat berbeda.
Menambahkan package hasil evaluasi#
Package yang dinilai layak ditambahkan ke proyek dengan dart pub add <nama>. Perintah ini menuliskan batasan versi berbentuk caret dari versi terbaru yang cocok, lalu menyelesaikan seluruh dependensinya dalam satu langkah. Contoh berikut membuat proyek kecil penghitung_kata dari awal, menambahkan package http, dan menampilkan bagian dependencies pada pubspec.yaml.
export PATH=/home/kal/dart-sdk/bin:$PATH
# siapkan proyek aplikasi penghitung kata dari awal
rm -rf ~/contoh/package-dan-pub/pub-dev
mkdir -p ~/contoh/package-dan-pub/pub-dev/penghitung_kata/bin
cd ~/contoh/package-dan-pub/pub-dev/penghitung_kata
cat > pubspec.yaml <<'EOF'
name: penghitung_kata
description: Aplikasi penghitung kata untuk latihan pub.dev.
version: 1.0.0
environment:
sdk: ^3.13.0
EOF
cat > bin/penghitung_kata.dart <<'EOF'
void main() {
print('Penghitung kata siap dijalankan.');
}
EOF
# tambahkan package http sebagai dependensi
dart pub add http
# perlihatkan bagian dependencies pada pubspec.yaml
sed -n '/^dependencies:/,$p' pubspec.yamlResolving dependencies...
Downloading packages...
+ async 2.13.1
+ collection 1.19.1
+ http 1.6.0
+ http_parser 4.1.2
+ meta 1.19.0
+ path 1.9.1
+ source_span 1.10.2
+ string_scanner 1.4.1
+ term_glyph 1.2.2
+ typed_data 1.4.0
+ web 1.1.2
Changed 11 dependencies!
dependencies:
http: ^1.6.0Setiap baris berawalan + adalah package yang baru masuk ke proyek. Package http adalah satu-satunya dependensi langsung, sedangkan sepuluh lainnya adalah dependensi turunan yang dibutuhkan oleh http, misalnya http_parser untuk penguraian pesan HTTP dan web untuk dukungan platform web. Bagian akhir pubspec.yaml memuat entri http: ^1.6.0, yaitu batasan caret yang ditulis otomatis oleh perintah. Pembacaan keluaran seperti ini membentuk kebiasaan yang baik, yaitu membedakan dependensi langsung yang dideklarasikan secara sadar dari dependensi turunan yang sekadar ikut terunduh.
Kesalahan umum#
Kesalahan yang paling mahal adalah memilih package hanya karena namanya cocok dengan kebutuhan. Terdapat package dengan nama serupa untuk fungsi yang berbeda, dan kualitasnya bisa berjauhan. Perbaikannya adalah membuka halaman package terlebih dahulu, memeriksa lencana penerbit, jumlah like, Pub Points, dan tautan repository sebelum menjalankan dart pub add. Evaluasi singkat semacam ini hanya memakan waktu satu menit, sedangkan pergantian dependensi setelah kode ditulis jauh lebih mahal karena impor dan panggilan API perlu disesuaikan ulang.
Kesalahan kedua adalah menjadikan satu skor sebagai keputusan final. Pub Points mengukur kualitas teknis package, bukan kesesuaian fiturnya dengan kebutuhan proyek, dan download count dapat terpengaruh oleh sistem CI sebagaimana dijelaskan di atas. Package berponten tinggi yang tidak menyediakan fitur yang dibutuhkan tetap tidak layak digunakan. Baca README dan CHANGELOG untuk menilai kesesuaian fitur, lalu gunakan skor sebagai penyaring awal dan bukan sebagai vonis akhir.
Kesalahan ketiga adalah menambahkan package tanpa memeriksa batasan SDK-nya. Package yang menuntut versi Dart lebih baru daripada proyek akan menggagalkan resolusi dependensi ketika dart pub get dijalankan, dan errornya baru muncul pada tahap itu. Batasan tersebut tercantum pada bidang Environment di sisi kanan halaman package, sehingga pemeriksaannya hanya memerlukan satu pandangan sebelum dart pub add dieksekusi.
Ringkasan#
- pub.dev menampilkan pencarian package dengan skor dan tag platform, sedangkan halaman package memuat README, CHANGELOG, detail dari pubspec.yaml, daftar versi, dan laporan skor.
- Tiga dimensi skor, yaitu Likes, Pub Points, dan download count, masing-masing mengukur sentimen, kualitas teknis, dan kepopuleran.
- API resmi pub.dev menyediakan metadata versi dan skor package dalam JSON, sehingga evaluasi dapat dilakukan langsung dari terminal.
dart pub addmenuliskan batasan caret dari versi terbaru yang tersedia dan menyelesaikan dependensi turunannya dalam satu langkah.
Referensi#
- How to use packages — dart.dev — Panduan resmi penggunaan package pada Dart, termasuk pencarian di pub.dev.
- Package scores & pub points — pub.dev — Penjelasan Likes, Pub Points, dan download count beserta kategori penilaian Pub Points.
- pub.dev API for developers — pub.dev — Dokumentasi endpoint resmi pub.dev untuk metadata dan skor package.
- Publishing packages — dart.dev — Menjelaskan berkas README, CHANGELOG, dan pubspec yang mengisi halaman package di pub.dev.
- http package — pub.dev — Halaman package contoh yang metadata dan skornya dibaca pada topik ini.