Linkding adalah sebuah aplikasi bookmark manager berbasis web yang gratis dan open-source. Aplikasi ini dikembangkan untuk membantu pengguna menyimpan, mengelola, serta mengakses tautan favorit mereka dengan mudah dan efisien. Nama “Linkding” berasal dari gabungan kata link (tautan) dan ding (sebuah kata dalam bahasa jerman yang berarti “benda”), yang menggambarkan fungsinya sebagai alat untuk mengorganisasi tautan. Linkding juga mendukung impor dan ekspor bookmark dalam format HTML Netscape, serta bisa diakses melalui ekstensi peramban, bookmarklet, REST API, maupun diinstal sebagai Progressive WebApp (PWA). Linkding menjadi solusi ideal bagi siapa pun yang ingin menjaga koleksi tautan tetap teratur, aman, dan mudah diakses.
- Buka situs railway.com, kemudian tekan Sign In di kanan atas.
- Lakukan Sign In menggunakan akun GitHub atau Email.
- Setelah berhasil masuk, buka Dashboard di kanan atas.
- Tekan tombol Create New Project.
- Pilih opsi Docker Image.
- Masukkan
sissbruecker/linkding:1.44.1-plus-alpinesebagai sumber image Linkding.
-
Tunggu hingga Railway memuat Docker image Linkding.
Isi image yang diunduh terdiri dari:
- Python runtime
- Kode Django Linkding
- Dependency (library Python)
- Entrypoint script (
/entrypoint.sh)
Setelah selesai, Railway akan menjalankan image tersebut di dalam container sandbox miliknya.
-
Setelah image berhasil dimuat, buka tab Variables.
-
Tekan tombol Raw Editor.
-
Masukkan environment variable berikut:
PORT="9090" LD_BIND_ADDRESS="0.0.0.0" LD_PORT="$PORT" LD_SUPERUSER_NAME="kelompok9" LD_SUPERUSER_PASSWORD="987654321"
- Tekan tombol Update Variables (berwarna biru). Railway membuat container baru dari image tersebut dan memasukkan semua environment variables (yang diisi di raw editor dalam env) ke dalam konteks runtime container. Ketika container hidup, docker image akan menjalanka entrypoint. Dalam linkding entrypointnya berisi:
#!/bin/sh
set -e
echo "Running database migrations..."
python manage.py migrate --noinput
echo "Creating initial superuser if not exists..."
python manage.py createinitialsuperuser
echo "Collecting static files..."
python manage.py collectstatic --noinput
echo "Starting application..."
gunicorn linkding.wsgi:application --bind 0.0.0.0:${LD_PORT:-9090}set -e→ menghentikan eksekusi jika ada perintah yang gagal.python manage.py migrate→ menjalankan migrasi database. Ketika migrasi dijalankan, Django membuat tabel seperti ini sebagai database internal linkding sesuai file: linkding/bookmarks/models.pyfrom django.db import models class Bookmark(models.Model): url = models.URLField() title = models.CharField(max_length=255) description = models.TextField(blank=True) date_added = models.DateTimeField(auto_now_add=True)
createinitialsuperuser→ membuat akun admin pertama secara otomatis. Railway akan menjalankan kode dari file: linkding/bookmarks/management/commands/create_initial_superuser.pyfrom django.contrib.auth import get_user_model from django.core.management.base import BaseCommand import os class Command(BaseCommand): def handle(self, *args, **options): User = get_user_model() username = os.getenv('LD_SUPERUSER_NAME') password = os.getenv('LD_SUPERUSER_PASSWORD') if not User.objects.filter(username=username).exists(): User.objects.create_superuser(username=username, password=password) self.stdout.write(f"Superuser {username} created.")
collectstatic→ mengumpulkan file statis Django. Semua file statis (CSS, JS, gambar) dari semua app Django dikumpulkan ke folder /staticfiles. Contoh di kode settings.py:STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
gunicorn ...→ menjalankan server aplikasi Linkding. Setelah setup selesai, image menjalankan server produksi Gunicorn, bukan runserver bawaan Django (yang hanya untuk development). Kode yang dijalankan Gunicorn berasal dari linkding/wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'linkding.settings')
application = get_wsgi_application()Fungsi get_wsgi_application():
- Membuat instance WSGI Application Django (objek Python callable).
- Gunicorn akan memanggil objek ini setiap kali ada request HTTP masuk.
- Setelah di-update, akan muncul notifikasi di kiri atas.
- Tekan tombol Deploy pada notifikasi tersebut untuk menyimpan perubahan.
- Setelah proses deploy selesai, buka tab Settings.
- Pada bagian Networking, tekan tombol Generate Domain untuk membuat link situs.
Railway secara otomatis membaca variabel PORT (atau LD_PORT) dan membuat network mapping: [Public URL] → [Container IP:PORT]
Contoh: https://linkding-production-d3b0.up.railway.app → 172.17.0.3:9090
Railway menggunakan reverse proxy (seperti Nginx internal) untuk meneruskan traffic dari domain ke container Gunicorn. - Link Hosting Linkding berhasil dideploy!
Saat link dibuka:
- Browser mengirimkan HTTP request ke Railway:
GET / HTTP/1.1 Host: linkding-production-d3b0.up.railway.app
- Railway Proxy menerima request itu, lalu meneruskannya ke container aplikasi (port 9090).
- Gunicorn (server WSGI) menerima request dari proxy dan meneruskan ke: linkding.wsgi.application
- Django memproses request: Mengecek urls.py → menemukan bahwa URL / diarahkan ke bookmark_list().
- View Function (views.py) dijalankan: Mengambil semua data dari model Bookmark & mengirim data tersebut ke template bookmarks/bookmark_list.html.
- Template Engine membuat halaman HTML berdasarkan data bookmark.
- Response dikirim kembali ke browser → halaman utama Linkding berisi daftar bookmark muncul.
Pada halaman ini terdapat dua input utama dan satu tombol aksi:
- Username – digunakan untuk memasukkan nama pengguna (contoh: rifat).
- Password – kolom untuk memasukkan kata sandi.
- Tombol Login – mengeksekusi proses autentikasi agar pengguna bisa masuk ke sistem.
“tugassss” dan “nala” adalah dua bookmark yang berhasil ditambahkan oleh pengguna. Masing-masing bookmark memiliki tag berbeda (#2 dan #nala) untuk mengelompokkan topik. Setiap bookmark bisa:
- View: membuka link di tab baru.
- Edit: mengubah judul, tag, atau deskripsi.
- Archive: menandai link agar tidak tampil di daftar utama.
- Remove: menghapus link dari sistem.
Ini menunjukkan bahwa fungsi CRUD (Create, Read, Update, Delete) dalam aplikasi Linkding berjalan normal.
- Kolom pencarian (search)
“Search for words or #tags” disini pengguna bisa mengetik kata kunci atau tag seperti “tugas” atau “#2” untuk memfilter bookmark tertentu. Fitur ini membantu pengguna menemukan link dengan cepat tanpa harus scroll panjang.
- Tags (kanan bawah)
Terdapat dua tag aktif:
- 2
- Nala
Tag ini muncul otomatis dari setiap bookmark yang dibuat. Klik salah satu tag (misalnya “2”), maka aplikasi hanya menampilkan bookmark dengan tag tersebut. Fungsi tag ini mirip seperti “kategori” di aplikasi pencatat atau bookmark online lainnya seperti Pocket atau Raindrop.
- Bundles (kanan atas)
Di sini muncul satu bundle bernama “nala”. Bundle digunakan untuk mengelompokkan beberapa tag menjadi satu grup besar. Contohnya, bundle “Kuliah” bisa berisi tag #tugas, #referensi, dan #deadline. Ini memudahkan pengguna untuk mengelola banyak tag sekaligus.
- Navigasi dan antarmuka
Di bawah daftar bookmark ada navigasi: “Previous | 1 | Next” Menandakan bahwa aplikasi sudah siap menampilkan bookmark dalam jumlah banyak dengan sistem pagination (halaman 1, 2, dst). Tombol di bagian atas:
- Add Bookmark: untuk menambah data baru.
- Settings: mengatur preferensi aplikasi (seperti API key, tampilan, dan backup data).
- Logout: keluar dari akun pengguna.
Halaman ini digunakan untuk menyimpan link atau tautan penting agar mudah diakses kembali di kemudian hari. Fungsinya mirip seperti “Save” atau “Bookmark” di browser, tetapi Linkding menyimpannya dalam satu sistem terorganisir, bisa diberi tag, deskripsi, dan status baca (read/unread).
- URL
Kolom ini untuk menuliskan alamat situs web yang ingin disimpan. Setelah disimpan, Linkding akan menampilkan tautan tersebut di daftar bookmark.
- Tags
Berfungsi memberi kategori atau label pada setiap bookmark. Tag membantu pengguna mengelompokkan dan mencari link dengan cepat. Ditulis tanpa tanda pagar (#), lalu cukup pisahkan dengan spasi.
Contoh: kuliah referensi kdjk
Maka Linkding akan otomatis membuat tag kuliah, referensi, dan kdjk.
- Title
Judul dari link yang disimpan. Bisa otomatis diambil dari situs, atau diketik manual. Judul memudahkan identifikasi isi link tanpa harus membukanya.
- Description
Tempat untuk menuliskan penjelasan singkat tentang isi link atau alasan menyimpannya.
- Notes (opsional)
Dapat digunakan untuk menambahkan catatan pribadi seperti ringkasan atau ide penting dari link tersebut.
- Mark as Unread
Jika dicentang, link akan ditandai sebagai belum dibaca (unread). Linkding menyediakan filter agar pengguna bisa menampilkan hanya link yang belum dibaca.
- Tombol Save & Cancel
- Save → Menyimpan link ke dalam sistem Linkding.
- Cancel → Membatalkan proses penyimpanan dan kembali ke halaman sebelumnya.
berfungsi untuk mengelola dan memfilter tautan (link) yang sudah disimpan oleh pengguna.
- Active
Menampilkan semua bookmark yang masih aktif atau belum diarsipkan. Ini adalah tampilan utama yang biasa digunakan untuk melihat semua link yang masih relevan.
Contoh penggunaan: pengguna baru saja menyimpan artikel penting untuk tugas kuliah, dan ingin melihatnya lagi di daftar utama.
- Archived
Berisi bookmark yang sudah disimpan tetapi tidak lagi dibutuhkan secara aktif. Cocok untuk menjaga tampilan utama tetap rapi tanpa menghapus link lama. Bookmark yang diarsipkan masih bisa dikembalikan ke status aktif jika dibutuhkan.
Contoh penggunaan: Artikel yang sudah selesai dibaca atau digunakan dalam proyek, tetapi tetap ingin disimpan sebagai referensi.
- Unread
Menampilkan bookmark yang sudah disimpan namun belum dibaca atau dibuka oleh pengguna. Fitur ini memudahkan pengguna untuk menyortir link yang perlu ditinjau nanti.
Contoh penggunaan: Pengguna menandai beberapa artikel riset dengan “Mark as unread” supaya mudah ditemukan untuk dibaca nanti.
- Untagged
Menampilkan semua bookmark yang belum memiliki tag (belum dikategorikan). Berguna untuk melakukan pengelolaan ulang agar semua link punya kategori/tag yang sesuai.
Contoh penggunaan: Setelah menyimpan banyak link cepat-cepat, pengguna bisa buka menu ini untuk menambahkan tag pada yang belum dikategorikan.
- Open-source dan gratis – Linkding dapat dimanfaatkan tanpa pembayaran lisensi serta disesuaikan berdasarkan kebutuhan pengguna.
- Ringan dan responsif – Tampilan Linkding yang sederhana membuat kinerjanya optimal bahkan pada server yang kecil.
- Mendukung tagging dan pencarian cepat – Linkding mempermudah dalam mengelompokkan dan mencari bookmark.
- Dapat di-hosting sendiri (self-hosted) – Linkding dapat dihosting oleh masing-masing user sehingga memiliki kontrol penuh atas data tanpa menghadapi risiko privasi dari pihak ketiga.
- Ekstensi browser & API – Linkding mendukung penambahan bookmark secara langsung dari Chrome, Firefox, atau melalui API.
- Mendukung multi-user – Linkding dapat diakses secara bersamaan di satu server dengan akun yang berbeda.
- Proses instalasi cukup rumit – Proses penginstalan Linkding memerlukan pengetahuan dasar mengenai Docker dan Konfigurasi environment.
- Tampilan antarmuka sangat sederhana – Walaupun ringan, Desain Linkding kurang menarik bagi sebagian user.
- Tidak dilengkapi dengan fitur pencadangan otomatis berbasis cloud – Pengguna Linkding diwajibkan untuk melakukan pencadangan secara manual.
- Fitur kolaborasi terbatas – Dalam Linkding tidak terdapat sistem berbagi bookmark secara real-time antara pengguna seperti yang ada dalam aplikasi berbasis cloud.
- Kurang adanya integrasi sosial – Linkding tidak seperti Pocket atau Raindrop. io yang menyediakan opsi untuk berbagi dengan komunitas.
| Aspek | Linkding | Shaarli |
|---|---|---|
| Hosting | Self-hosted berbasis Docker, bisa dijalankan di Railway atau VPS | Self-hosted, sangat ringan dan bisa dijalankan langsung di server kecil |
| Bahasa Pemrograman | Python (Django) | PHP (tanpa framework besar) |
| Kustomisasi | Dapat dimodifikasi, memiliki API dan dukungan ekstensi | Sangat mudah diubah karena struktur kode sederhana |
| Kinerja | Stabil, tapi butuh resource sedikit lebih tinggi | Sangat cepat dan ringan, cocok untuk server kecil |
| Antarmuka (UI) | Minimalis dan modern | Sangat sederhana, fokus pada fungsi dasar |
| Fitur utama | Tagging, pencarian cepat, impor/ekspor bookmark, API | Simpan dan kelola tautan pribadi dengan cepat |
| Fitur kolaborasi | Terbatas (satu pengguna utama) | Tidak mendukung multi-user secara default |
| Dukungan ekstensi browser | Ya, tersedia untuk Chrome & Firefox | Ya, tapi sangat dasar (manual save via bookmarklet) |
Kesimpulan : Shaarli unggul dalam kecepatan dan kesederhanaan, sangat cocok untuk pengguna yang ingin bookmark pribadi tanpa ribet. Namun, Linkding menawarkan pengalaman yang lebih modern dengan fitur tambahan seperti tagging, API, dan antarmuka yang lebih rapi.
| Aspek | Linkding | Linkwarden |
|---|---|---|
| Hosting | Self-hosted, bisa dijalankan via Docker | Self-hosted berbasis Node.js + MongoDB |
| Bahasa Pemrograman | Python (Django) | TypeScript / Next.js |
| Kustomisasi | Cukup fleksibel, open-source | Sangat fleksibel, open-source dan modular |
| Antarmuka (UI) | Sederhana dan minimalis | Lebih modern dan interaktif dengan tampilan bergaya Notion |
| Fitur kolaborasi | Terbatas (single user) | Ada fitur multi-user dan kolaboratif |
| Fitur tambahan | Tagging, impor/ekspor, API sederhana | Simpan snapshot halaman (HTML, PDF, screenshot), anotasi |
| Kinerja | Ringan, cepat pada deployment kecil | Lebih berat karena fitur arsip dan visualisasi konten |
| Privasi & kontrol data | Penuh (karena self-hosted) | Penuh (juga self-hosted) |
| Kemudahan setup | Mudah dengan Docker | Setup lebih kompleks (butuh konfigurasi database dan env) |
Kesimpulan: Linkwarden unggul dalam fitur kolaboratif dan kemampuan arsip halaman (menyimpan konten, bukan hanya link). Namun, Linkding lebih ringan dan mudah dijalankan, cocok bagi pengguna yang menginginkan bookmark manager pribadi tanpa kompleksitas tambahan.
Proyek ini berhasil mendemonstrasikan bagaimana aplikasi Linkding dapat di-deploy dan dijalankan melalui platform Railway sebagai solusi manajemen bookmark berbasis web yang ringan, cepat, dan mudah digunakan. Linkding menghadirkan keseimbangan antara kesederhanaan dan fungsionalitas, dengan kemampuan untuk menyimpan, menandai (tagging), dan mencari tautan secara efisien. Selama proses implementasi, terbukti bahwa Linkding dapat berjalan dengan baik meskipun tanpa konfigurasi database kompleks, menjadikannya cocok untuk kebutuhan personal maupun kelompok kecil. Aplikasi ini juga menunjukkan keunggulan dalam hal kontrol data pribadi, karena pengguna dapat melakukan self-hosting dan sepenuhnya memiliki kendali atas datanya sendiri.
Dari sisi perbandingan, hasil analisis menunjukkan bahwa:
- Dibandingkan dengan Shaarli, Linkding lebih modern dan kaya fitur meskipun sedikit lebih berat.
- Dibandingkan dengan Linkwarden, Linkding lebih ringan dan mudah di-deploy, walaupun tidak sekompleks Linkwarden yang memiliki fitur kolaboratif dan arsip halaman.
Secara keseluruhan, Linkding merupakan pilihan ideal bagi pengguna yang ingin memiliki sistem manajemen bookmark mandiri, aman, dan efisien tanpa ketergantungan pada layanan pihak ketiga. Walaupun memiliki keterbatasan pada sisi tampilan dan kolaborasi, Linkding menawarkan fondasi kuat untuk pengelolaan tautan berbasis privasi dan fleksibilitas penuh dalam pengembangan.
https://hub.docker.com/r/sissbruecker/linkding