55 poin oleh GN⁺ 2025-09-11 | 9 komentar | Bagikan ke WhatsApp
  • Program CLI untuk Linux yang memungkinkan menjalankan aplikasi GUI langsung dari terminal
  • Menggunakan kompositor Wayland buatannya sendiri untuk mengirim output GUI ke terminal alih-alih ke monitor
  • Dapat dijalankan juga di lingkungan ssh, dan browser web, file manager, bahkan game Doom bisa dijalankan di dalam terminal
  • Kualitas output bergantung pada resolusi terminal (jumlah baris·kolom), dan pada terminal dengan dukungan gambar seperti iTerm2·kitty juga mendukung rendering resolusi penuh
  • Dikembangkan berbasis Typescript dan bun dengan sebagian kode C++, saat ini baru mendukung sebagian aplikasi tetapi sedang diperluas dengan tujuan “Term everything❗”

Pentingnya proyek dan keunggulan perbandingan

  • Berbeda dari penampil file terminal atau alat output gambar sederhana yang sudah ada, Term.everything dapat menjalankan aplikasi GUI “apa pun” di dalam terminal
  • Antarmuka GUI tetap dapat digunakan bahkan di lingkungan jaringan termasuk SSH, sehingga unggul untuk administrasi server dan pengembangan jarak jauh
  • Memanfaatkan semaksimal mungkin fitur gambar pada terminal modern seperti kitty dan iterm2, serta menyediakan opsi peningkatan resolusi dan frame rate

Ikhtisar

  • Term.everything adalah program CLI Linux, dengan ciri utama mampu menjalankan jendela GUI langsung di terminal
  • Inti teknologinya adalah kompositor berbasis Wayland yang dikembangkan sendiri, yang merender GUI ke terminal alih-alih ke monitor biasa
  • Mendukung lingkungan berbasis x11 maupun Wayland, dan bisa digunakan dari jarak jauh melalui ssh
  • Jumlah baris/kolom terminal yang terbatas memengaruhi kualitas jendela, dan kualitas dapat ditingkatkan dengan menaikkan resolusi terminal (meski ada kemungkinan penurunan performa)

Contoh penggunaan utama

  • Menjalankan game: dapat menjalankan game seperti Fontemon atau Doom (episode shareware) di dalam terminal
  • Memutar video: memutar film Wing It!, dengan pengaturan keseimbangan frame rate dan kualitas gambar melalui penyesuaian resolusi
  • Menjalankan browser: di lingkungan iTerm2 + ssh, dapat terhubung ke Ubuntu dan menjalankan Firefox
  • Pengganti penampil file: tanpa perlu membuat penampil file khusus terminal, file manager GUI yang sudah ada bisa langsung digunakan di terminal
  • Eksekusi rekursif: menjalankan terminal lain di dalam terminal, yaitu "terminal in a terminal"

Cara kerja dan informasi pengembangan

  • Konsep dasar

    • Di masa lalu, agar program dapat menggambar sesuatu ke layar, program bisa menulis langsung ke area tertentu di RAM
    • Pada sistem modern, display server mengelola input/output dan mengoordinasikan input seperti mouse/keyboard serta output grafis/gambar
    • Di lingkungan Linux, yang umum digunakan adalah protokol Wayland atau X11, dan Term.everything beroperasi berbasis Wayland
  • Protokol Wayland

    • Wayland bukan display server itu sendiri, melainkan protokol yang mendefinisikan komunikasi antara server dan program
    • Program mengirim hasil render yang dibuatnya sendiri ke display server, lalu server menampilkannya ke layar
    • Poin pentingnya adalah model rendering tidak dipaksakan → program dapat menggambar dengan cara yang diinginkan
    • Berkat itu, hasil output dapat dikirim ke tempat lain selain layar (misalnya terminal)
  • Pemrosesan output di Term.everything

    • Menerima gambar yang digambar oleh klien Wayland (aplikasi GUI yang dijalankan), lalu mengubahnya menjadi output karakter terminal
    • Proses konversi:
      • 1. Menerima data gambar yang dikirim klien
      • 2. Mengubahnya menjadi karakter UTF-8 + kode escape ANSI
      • 3. Dalam konversi ini digunakan library chafa untuk memetakan piksel ke karakter terminal
    • Untuk input, event keyboard dan mouse yang diteruskan melalui stdin dikirim ke klien Wayland
  • Implementasi nyata

    • Ide intinya sederhana, tetapi implementasi nyatanya memerlukan sekitar sepuluh ribu baris kode
    • Ditulis dengan Typescript (berbasis bun) dan sebagian C++, serta berperan sebagai display server Wayland kustom
    • Kode sumber dapat dilihat di direktori src/
  • Potensi pengembangan

    • Term.everything tidak hanya menargetkan menjalankan GUI di terminal semata
    • Dengan display server kustom berbasis Wayland, ada kemungkinan untuk mewujudkan ide-ide eksperimental lain juga
    • Contoh: menghubungkan perangkat output bukan ke terminal, melainkan ke media yang sama sekali berbeda (misalnya printer, karya seni fisik, dll.)

9 komentar

 
iolothebard 2025-09-14

lapisan berlapis

 
ifmkl 2025-09-11

Ini yang benar-benar geek banget ya, haha

 
hybridego 2025-09-11

Kenapa saya cuma melihat logo dan tidak berjalan ya??

 
bus710 2025-09-11

Saya menggunakan Synergy untuk mengendalikan Mac pribadi dari Mac kantor. Sekarang karena saya sudah melepas Mac pribadi dan hanya memakai Linux, alur kerja saya jadi lebih merepotkan.

Tapi kalau memakai alat ini, berarti saya bisa terhubung dari terminal Mac kantor ke desktop Linux pribadi dan bebas melakukan macam-macam pekerjaan di sana, ya?

Sepertinya tim keamanan tidak akan menyukainya.

 
coremaker 2025-09-11

Mungkin saya saja yang sudah terlalu lama berkecimpung, tapi apakah ini memang perlu?

 
cgl00 2025-09-11

Sepertinya ini akan berguna saat melakukan eksperimen terkait web di server (via localhost).

 
coremaker 2025-09-11

Maksud Anda ketika ingin menyelesaikannya secara lokal dan mengujinya sebelum deployment, bukan?
Bekerja dari jarak jauh, saat sulit mengakses jaringan internal dan berada di lingkungan yang terbatas...

 
t7vonn 2025-09-11

Kalau membuka iTerm di dalam iTerm dengan term.everything.. apakah bisa?

 
GN⁺ 2025-09-11
Komentar Hacker News
  • Menurut saya ini proyek yang benar-benar tidak berguna tapi keren, berdiri di batas antara pemrograman dan seni, saya yakin proyek ini adalah pengalaman belajar yang sangat menyenangkan, dan saya benar-benar ingin bilang kerjanya luar biasa
    • Sepertinya tidak 100% tidak berguna, saya rasa ini bisa bermanfaat untuk aplikasi yang berjalan di dalam container Docker, biasanya memang ada cara untuk menampilkan aplikasi GUI di dalam container, tapi ini mungkin lebih mudah, meski menjalankan aplikasi GUI di Docker ternyata lebih mudah dari yang saya kira, saya akan menguji panduan ini besok dan penasaran apakah ini juga bekerja di Windows
    • Sulit menjelaskan kenapa proyek ini membuat saya begitu bahagia, tapi meski sepertinya saya tidak akan sering memakainya, memikirkannya saja sudah membuat senyum bodoh muncul di wajah saya
  • Ini proyek yang membuat batas kemungkinan terasa tidak ada, benar-benar hasil yang keren dan ingin dibanggakan tanpa henti, saya merasa ini luar biasa dan jadi berpikir bagaimana tim kami seharusnya mengimplementasikan VDI ke depannya, rasanya seperti memberi makna baru pada istilah ghost in the shell, dan ngomong-ngomong saya jadi penasaran apakah doom juga bisa dijalankan
    • Kalau penasaran, Anda bisa melihat doom yang sedang berjalan, term.everything hanya menerima input dari stdin jadi saya mengubah beberapa baris agar bisa berfungsi, kompatibilitasnya tinggi di berbagai terminal melalui ssh
      1. Tombol Control dipetakan ke tombol lain (karena aslinya dipakai untuk mengirim sinyal)
      2. Timeout input juga perlu disesuaikan. Input berbasis stdin hanya menerima event keydown dan tidak menghasilkan event keyup, jadi kita harus menebak kapan pengguna melepaskan tombol, biasanya keyup bisa langsung dikirim, tetapi di doom karena ada penanganan debounce tombol saya harus menunggu sekitar 50~100ms, biasanya untuk bergerak maju di game cukup menahan tombol panah atas, tetapi dengan cara ini harus ditekan berulang kali jadi agak kurang nyaman, namun tetap bisa dijalankan dan dimainkan
    • aaquake adalah game yang bahkan sebelum proyek seperti ini sudah pernah dijalankan di lingkungan terminal ASCII
  • Menurut saya proyek ini benar-benar keren, secara pribadi saya rasa akan ada lebih banyak use case menarik seperti ini berbasis Wayland, saya juga tertarik dengan proyek greenfield
  • Dulu saya sangat bersemangat saat melihat proyek carbonyl menjalankan chromium di terminal (lihat di sini), tetapi sekarang sudah tidak dipelihara, proyek kali ini terasa seperti satu langkah lebih maju dari ide itu, menurut saya ini hasil yang sungguh keren
  • Saya pikir bash_completion harus dibuat benar-benar mudah digunakan, padahal kenyataannya menulisnya lebih sulit dari perkiraan, bahkan sekadar copy-paste pun merepotkan, pengembang yang pintar sejak awal membuat aplikasi yang cocok dengan bash_completion, misalnya jika argumen inti pertama ramah untuk bash, struktur seperti mycli myfunc ... saja sudah cukup untuk mengetahui semua fungsi langsung dengan sekali tekan tab, fitur baru juga tidak perlu diiklankan, kalau hanya dihapus dari completion maka skrip lama tidak akan rusak sambil tetap memungkinkan fitur dipensiunkan secara alami, pada akhirnya semua hal jadi masuk ke CLI berkat seseorang yang sudah menyiapkannya lebih dulu
  • Bagi orang seperti saya yang kadang perlu mengakses desktop atau browser secara langsung di mesin build, VNC atau metode berbagi desktop lain tidak praktis atau punya masalah keamanan, saya rasa proyek ini akan sangat membantu dalam situasi seperti itu
  • Saya rasa ini proyek yang benar-benar berguna, cocok untuk pekerjaan satu kali dari jarak jauh, saya belum yakin soal kemampuan menempel ke program yang sedang berjalan dari jarak jauh lalu melepaskannya lagi, atau soal mirroring layar, tapi kalau bisa masuk ke desktop lewat SSH lalu mengendalikan klien seperti Discord yang sudah berjalan, itu akan sangat praktis, sebagai referensi saya juga ingin melihat fitur RDP terkait menjalankan aplikasi jarak jauh
    • Anda juga bisa saja memakai klien Discord untuk CLI, atau menjalankan klien IRC yang terhubung ke server Bitlbee
  • Saya harus mencatat bagian <i>di terminal</i>, agar mengingatkan diri sendiri bahwa ini sepertinya tidak akan bekerja dalam mode teks
    • Tapi bukankah contoh pertama (contoh komik) itu mode teks?
  • Saya berharap proyek ini terus berkembang dan tidak pernah berhenti
  • Saya rasa ini benar-benar luar biasa! Pasti tiap orang punya use case unik masing-masing, tetapi bagi saya yang paling saya nantikan adalah menjalankan VSCode di iPad, semoga suatu hari nanti iPadOS juga bisa didukung
    • Untuk pengembangan jarak jauh, saya biasanya merasa code-server sudah cukup
    • Karena ada klien ssh untuk iPad, saya rasa ini mungkin dilakukan, saya berencana langsung mencobanya sekarang juga