Membuat aplikasi web biasanya identik dengan belajar HTML, CSS, dan JavaScript. Namun dengan Streamlit, kamu bisa mengubah skrip Python biasa menjadi aplikasi web interaktif — lengkap dengan tombol, slider, grafik, dan tabel — hanya dalam hitungan menit. Streamlit adalah framework open-source yang sangat populer di kalangan data scientist dan engineer untuk membangun dashboard, alat eksplorasi data, hingga prototipe aplikasi machine learning. Di tutorial ini, kita akan membangun semuanya dari nol, langkah demi langkah.
Apa Itu Streamlit?
Streamlit adalah framework Python yang dirancang khusus untuk membangun aplikasi data dan machine learning dengan cepat. Konsep utamanya sederhana: kamu menulis skrip Python seperti biasa, dan Streamlit otomatis mengubahnya menjadi antarmuka web yang interaktif. Setiap kali pengguna mengubah nilai sebuah widget, seluruh skrip dieksekusi ulang dari atas ke bawah, lalu tampilan diperbarui. Inilah yang membuat pengembangan terasa sangat cepat karena tidak ada pemisahan antara frontend dan backend.
Beberapa hal yang bisa kamu bangun dengan Streamlit antara lain: dashboard analisis data, alat eksplorasi dataset, antarmuka untuk model machine learning, hingga aplikasi internal tim. Streamlit kini dikelola oleh Snowflake dan dipakai luas di industri untuk mempercepat pengembangan produk data.
Instalasi Streamlit
Langkah pertama adalah menginstal Streamlit. Sebaiknya gunakan virtual environment agar dependensi proyek tidak tercampur dengan paket global. Jalankan perintah berikut di terminal:
# Buat dan aktifkan virtual environment (opsional tapi disarankan)
python -m venv venv
source venv/bin/activate # Linux / macOS
# venv\Scripts\activate # Windows
# Install Streamlit
pip install streamlit
# Cek versi yang terpasang
streamlit --version
Jika kamu ingin proses instalasi yang lebih cepat dan rapi, coba uv, package manager Python modern yang bisa menggantikan pip dan venv sekaligus.
Aplikasi Pertama: Halo, Streamlit!
Buat file baru bernama app.py lalu tulis kode berikut:
# app.py
import streamlit as st
st.title("Halo, Streamlit! 👋")
st.write("Aplikasi web pertamaku, ditulis murni dengan Python.")
st.write("Tanpa HTML, tanpa CSS, tanpa JavaScript.")
Jalankan aplikasinya dengan perintah berikut di terminal:
streamlit run app.py
Browser akan terbuka otomatis di alamat http://localhost:8501 dan menampilkan aplikasi pertamamu. Selamat — kamu baru saja membuat aplikasi web dengan Python murni!
Streamlit memiliki fitur auto-reload: setiap kali kamu menyimpan perubahan pada app.py, halaman akan otomatis diperbarui. Kamu tidak perlu me-restart server secara manual.
Komponen Teks Dasar
Streamlit menyediakan banyak fungsi untuk menampilkan teks dengan berbagai gaya. Berikut ringkasannya:
import streamlit as st
st.title("Judul Besar")
st.header("Ini Header")
st.subheader("Ini Subheader")
st.markdown("Teks dengan **Markdown** dan *italic*.")
st.write("st.write bisa menampilkan hampir semua tipe data.")
st.text("Teks polos tanpa format.")
st.caption("Keterangan kecil di bawah elemen.")
st.code("print('Halo Dunia')", language="python")
Perbedaan utamanya ada pada ukuran dan format. Gunakan st.title untuk judul halaman, st.header dan st.subheader untuk membagi bagian, serta st.write sebagai fungsi serba guna yang otomatis menyesuaikan format berdasarkan tipe data yang diberikan.
Widget Input untuk Aplikasi Interaktif
Inilah kekuatan utama Streamlit: widget. Widget memungkinkan pengguna berinteraksi dengan aplikasi — mengisi teks, menggeser slider, memilih opsi, atau menekan tombol. Nilai widget langsung bisa dipakai di dalam skrip.
import streamlit as st
nama = st.text_input("Siapa namamu?")
umur = st.slider("Berapa umurmu?", 0, 100, 25)
bahasa = st.selectbox("Bahasa favorit:", ["Python", "JavaScript", "Go", "Rust"])
suka_ngoding = st.checkbox("Saya suka ngoding")
tombol = st.button("Kirim")
if tombol:
st.write(f"Halo {nama}, kamu {umur} tahun dan suka {bahasa}.")
if suka_ngoding:
st.success("Mantap! Terus semangat ngoding 🚀")
else:
st.warning("Coba deh mulai dari Python, dijamin seru!")
Ingat prinsip utama Streamlit: skrip dijalankan ulang dari atas ke bawah setiap kali widget berubah. Jadi susun kode dengan urutan yang logis, dan gunakan st.session_state jika kamu perlu menyimpan nilai antar-eksekusi.
Menampilkan Data: DataFrame dan Chart
Streamlit terintegrasi sangat baik dengan Pandas. Kamu bisa menampilkan DataFrame secara interaktif (bisa di-scroll dan diurutkan) maupun sebagai tabel statis. Jika belum familiar dengan Pandas, baca dulu Pandas untuk Analisis Data dengan Python.
import streamlit as st
import pandas as pd
import numpy as np
# Data contoh
df = pd.DataFrame(
np.random.default_rng(42).normal(size=(50, 3)),
columns=["Penjualan", "Pengunjung", "Konversi"],
)
st.subheader("DataFrame interaktif")
st.dataframe(df) # bisa di-scroll & diurutkan
st.table(df.head(10)) # tabel statis
st.subheader("Chart instan")
st.line_chart(df)
st.bar_chart(df[["Penjualan"]])
st.area_chart(df)
Selain chart bawaan Streamlit, kamu juga bisa menampilkan grafik buatan Matplotlib lewat st.pyplot. Jika ingin memperdalam visualisasi data, kunjungi tutorial Belajar Matplotlib dengan Python.
import streamlit as st
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 40], marker="o")
ax.set_title("Grafik Matplotlib")
ax.set_xlabel("Bulan")
ax.set_ylabel("Penjualan")
st.pyplot(fig)
Studi Kasus: Dashboard Analisis Penjualan
Sekarang mari gabungkan semuanya menjadi satu dashboard nyata. Kita akan membangun dashboard penjualan dengan filter di sidebar, kartu metrik (KPI), dan grafik batang — semuanya dalam satu file.
# dashboard.py
import streamlit as st
import pandas as pd
import numpy as np
# 1) Muat data (dicache agar tidak diproses ulang tiap interaksi)
@st.cache_data
def load_data():
rng = np.random.default_rng(42)
n = 1000
return pd.DataFrame({
"tanggal": pd.date_range("2024-01-01", periods=n, freq="D"),
"kategori": rng.choice(["Elektronik", "Pakaian", "Makanan", "Buku"], n),
"penjualan": rng.integers(50_000, 5_000_000, n),
"unit": rng.integers(1, 100, n),
})
df = load_data()
st.title("📊 Dashboard Penjualan")
st.caption("Contoh dashboard interaktif dengan Streamlit")
# 2) Filter di sidebar
st.sidebar.header("Filter")
kategori = st.sidebar.multiselect(
"Pilih kategori",
options=df["kategori"].unique(),
default=list(df["kategori"].unique()),
)
rentang = st.sidebar.slider("Rentang baris", 0, len(df) - 1, (0, len(df) - 1))
# 3) Terapkan filter
filtered = df[df["kategori"].isin(kategori)].iloc[rentang[0]:rentang[1] + 1]
# 4) Kartu KPI
total = filtered["penjualan"].sum()
total_unit = filtered["unit"].sum()
rata = filtered["penjualan"].mean()
c1, c2, c3 = st.columns(3)
c1.metric("Total Penjualan", f"Rp {total:,.0f}")
c2.metric("Unit Terjual", f"{total_unit:,}")
c3.metric("Rata-rata", f"Rp {rata:,.0f}")
# 5) Visualisasi
st.subheader("Penjualan per kategori")
st.bar_chart(filtered.groupby("kategori")["penjualan"].sum())
st.subheader("Data mentah")
st.dataframe(filtered, use_container_width=True)
Jalankan dengan streamlit run dashboard.py. Kamu akan melihat kartu metrik yang berubah otomatis saat filter di sidebar diubah — tanpa satu baris JavaScript pun. Inilah keajaiban Streamlit untuk tim data.
Men-deploy Model Machine Learning ke Streamlit
Streamlit juga sangat populer untuk membuat antarmuka model machine learning. Jika kamu sudah punya model terlatih (misalnya dari tutorial Membuat Model Klasifikasi Pertama dengan Python (Scikit-learn)), kamu bisa langsung menyajikannya sebagai aplikasi interaktif.
# ml_app.py
import streamlit as st
import joblib
# Cache model agar hanya dimuat sekali, tidak setiap interaksi
@st.cache_resource
def load_model():
return joblib.load("model_iris.pkl")
model = load_model()
st.title("🌷 Klasifikasi Bunga Iris")
sepal_panjang = st.slider("Panjang sepal (cm)", 4.0, 8.0, 5.8)
sepal_lebar = st.slider("Lebar sepal (cm)", 2.0, 4.5, 3.0)
petal_panjang = st.slider("Panjang petal (cm)", 1.0, 7.0, 4.4)
petal_lebar = st.slider("Lebar petal (cm)", 0.1, 2.5, 1.4)
if st.button("Prediksi"):
hasil = model.predict(
[[sepal_panjang, sepal_lebar, petal_panjang, petal_lebar]]
)[0]
nama = ["Setosa", "Versicolor", "Virginica"][hasil]
st.success(f"Prediksi: **{nama}**")
Gunakan @st.cache_resource untuk objek yang tidak bisa di-serialize seperti model ML, dan @st.cache_data untuk data (DataFrame, list, dict). Salah memilih decorator bisa menyebabkan error saat cache dibaca ulang.
Caching agar Aplikasi Tetap Cepat
Karena skrip dijalankan ulang setiap interaksi, fungsi yang berat (load data, train model) sebaiknya di-cache. Streamlit menyediakan dua decorator caching:
import streamlit as st
import time
# cache_data untuk hasil fungsi (data)
@st.cache_data
def proses_lambat(n):
time.sleep(3) # simulasi proses berat
return n * n
st.write("Hasil:", proses_lambat(21))
# Eksekusi pertama menunggu 3 detik; eksekusi berikutnya langsung
Layout: Sidebar, Columns, dan Tabs
Untuk menyusun antarmuka yang rapi, Streamlit menyediakan st.sidebar (panel samping), st.columns (kolom sejajar), st.tabs (tab), dan st.expander (konten lipat).
import streamlit as st
tab1, tab2, tab3 = st.tabs(["Data", "Chart", "Info"])
with tab1:
st.write("Konten tab Data")
with tab2:
st.line_chart([1, 2, 3, 4, 5])
with tab3:
st.info("Konten tab Info")
with st.expander("Klik untuk melihat detail"):
st.write("Konten tersembunyi di dalam expander.")
Deploy ke Streamlit Community Cloud
Setelah aplikasi jadi, kamu bisa mempublikasikannya secara gratis lewat Streamlit Community Cloud. Langkah-langkahnya:
1. Buat file requirements.txt berisi seluruh dependensi aplikasi.
2. Push kode ke repository GitHub.
3. Buka share.streamlit.io, klik New app, lalu hubungkan repository dan file utama kamu.
4. Aplikasi langsung ter-deploy dan mendapat URL publik.
streamlit
pandas
numpy
scikit-learn
joblib
Pastikan nama file utama adalah app.py (atau sesuaikan di pengaturan deploy), dan semua dependensi tercantum di requirements.txt agar Cloud bisa menginstalnya otomatis.
Kesimpulan
Streamlit memungkinkan siapa pun yang menguasai Python untuk membangun aplikasi web data yang interaktif dan profesional tanpa menyentuh frontend. Dari dashboard penjualan, alat eksplorasi data, hingga antarmuka model machine learning — semuanya bisa dibuat dalam hitungan menit. Mulailah dari aplikasi kecil, pahami alur eksekusi dan caching-nya, lalu publikasikan karyamu ke Streamlit Community Cloud untuk portofolio. Selamat membangun!
Apakah saya harus menguasai HTML, CSS, dan JavaScript untuk memakai Streamlit?
Tidak. Streamlit dirancang agar kamu bisa membangun aplikasi web hanya dengan Python. Semua antarmuka — tombol, slider, tabel, grafik — dibuat otomatis dari kode Python. Pemahaman HTML/CSS tetap berguna untuk kustomisasi tingkat lanjut, tetapi bukan syarat untuk memulai.
Apa bedanya Streamlit dengan Flask atau FastAPI?
Flask dan FastAPI adalah framework web umum untuk membangun API dan situs lengkap dengan kontrol penuh atas frontend. Streamlit lebih spesifik: fokus pada aplikasi data dan prototipe cepat. Pilih Streamlit untuk dashboard dan alat data internal; pilih Flask atau FastAPI untuk API produksi atau aplikasi web berskala besar.
Apakah aplikasi Streamlit bisa di-deploy secara gratis?
Bisa. Streamlit Community Cloud menyediakan hosting gratis untuk aplikasi publik. Kamu cukup menghubungkan repository GitHub dan aplikasi akan ter-deploy otomatis. Ada batasan sumber daya, tetapi sangat cukup untuk belajar, portofolio, dan prototipe.
Apakah Streamlit cocok untuk aplikasi produksi berskala besar?
Streamlit bisa dipakai di produksi, tetapi perlu perhatian pada manajemen session state, caching, dan autentikasi karena model eksekusinya (rerun seluruh skrip) berbeda dari framework web konvensional. Untuk aplikasi data internal atau alat tim, Streamlit sangat andal; untuk aplikasi publik dengan banyak pengguna, pertimbangkan arsitektur yang lebih lengkap.