ariawanui

module
v0.0.0-...-566bdea Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2025 License: MIT, Unlicense

README

AriawanUi

GUI Framework Cross-Platform untuk Developer Indonesia

AriawanUi adalah framework GUI (Graphical User Interface) berbasis Go yang mendukung pengembangan aplikasi desktop dan mobile secara cross-platform. Dibangun dengan fokus pada kemudahan penggunaan, performa tinggi, dan dokumentasi berbahasa Indonesia.

Visi

Menyediakan framework GUI berkualitas tinggi untuk developer Indonesia, dengan:

  • Dokumentasi Bahasa Indonesia - Memudahkan developer lokal untuk belajar dan berkontribusi
  • API Stabil - Tidak ada breaking changes yang membingungkan
  • Cross-Platform - Satu codebase untuk Windows, macOS, Linux, Android, iOS, dan Web
  • Performa Tinggi - GPU-accelerated rendering dengan immediate mode architecture
  • Komponen Siap Pakai - Library komponen UI yang lengkap dan mudah digunakan

Kenapa AriawanUi?

Masalah Solusi AriawanUi
Dokumentasi GUI framework kebanyakan Inggris Dokumentasi Bahasa Indonesia
Breaking changes tiap update bikin repot API stabil, kita kontrol sendiri
Harus belajar banyak bahasa/framework Satu codebase Go untuk semua platform
GUI framework berat dan lambat GPU-accelerated, immediate mode

Platform yang Didukung

Platform Status Graphics Backend
Windows Supported Direct3D 11, OpenGL
macOS Supported Metal, OpenGL
Linux Supported OpenGL, Vulkan
Android Supported OpenGL ES, Vulkan
iOS Supported Metal, OpenGL ES
WebAssembly Experimental WebGL

Instalasi

go get github.com/agungadiariawan/ariawanui@latest

Quick Start

package main

import (
    "os"

    "github.com/agungadiariawan/ariawanui/app"
    "github.com/agungadiariawan/ariawanui/layout"
    "github.com/agungadiariawan/ariawanui/op"
    "github.com/agungadiariawan/ariawanui/widget/material"
    "github.com/agungadiariawan/ariawanui/font/gofont"
    "github.com/agungadiariawan/ariawanui/text"
)

func main() {
    go func() {
        w := new(app.Window)
        th := material.NewTheme()
        th.Shaper = text.NewShaper(text.WithCollection(gofont.Collection()))

        var ops op.Ops

        for {
            switch e := w.Event().(type) {
            case app.DestroyEvent:
                os.Exit(0)
            case app.FrameEvent:
                gtx := app.NewContext(&ops, e)

                layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions {
                    return material.H1(th, "Halo AriawanUi!").Layout(gtx)
                })

                e.Frame(gtx.Ops)
            }
        }
    }()
    app.Main()
}

Struktur Package

github.com/agungadiariawan/ariawanui/
├── app/        # Window management
├── layout/     # Layout system (Flex, Stack, List)
├── widget/     # UI components
│   └── material/   # Material Design theme
├── op/         # Drawing operations
├── io/         # Event system (keyboard, mouse, touch)
├── text/       # Text rendering
├── font/       # Font management
├── gesture/    # Gesture detection
├── unit/       # Device-independent units
├── f32/        # Float32 math utilities
├── gpu/        # GPU rendering backend
└── shader/     # GPU shaders

Contoh Penggunaan

Button dengan Click Handler
var button widget.Clickable
var count int

// Di dalam event loop:
for button.Clicked(gtx) {
    count++
}

material.Button(th, &button, fmt.Sprintf("Klik: %d", count)).Layout(gtx)
Layout Flex
layout.Flex{
    Axis: layout.Vertical,
}.Layout(gtx,
    layout.Rigid(func(gtx layout.Context) layout.Dimensions {
        return material.H2(th, "Judul").Layout(gtx)
    }),
    layout.Flexed(1, func(gtx layout.Context) layout.Dimensions {
        return material.Body1(th, "Konten...").Layout(gtx)
    }),
)
Text Input
var editor widget.Editor

material.Editor(th, &editor, "Masukkan nama...").Layout(gtx)

Roadmap

Komponen UI (Planned)
  • Button variants (primary, secondary, outline)
  • Form components (checkbox, radio, select)
  • Data table
  • Modal/Dialog
  • Toast notifications
  • Navigation components (navbar, sidebar, tabs)
Example Projects (Planned)
  • Terminal emulator
  • Admin dashboard
  • File manager
  • Code editor
Dokumentasi (Planned)
  • Tutorial lengkap Bahasa Indonesia
  • Video tutorial
  • Best practices guide

Kontribusi

Kontribusi dari komunitas sangat diterima! Berikut cara berkontribusi:

Cara Berkontribusi
  1. Fork - Klik tombol Fork di kanan atas halaman repo ini
  2. Clone - Clone repo hasil fork ke komputer Anda
    git clone https://github.com/USERNAME_ANDA/ariawanui.git
    
  3. Branch - Buat branch baru untuk fitur/perbaikan Anda
    git checkout -b fitur-baru
    
  4. Code - Tulis kode Anda
  5. Test - Pastikan build sukses
    go build ./...
    
  6. Commit - Commit dengan pesan yang jelas
    git commit -m "Tambah fitur: deskripsi singkat"
    
  7. Push - Push ke repo fork Anda
    git push origin fitur-baru
    
  8. Pull Request - Buat Pull Request di GitHub
Apa yang Bisa Dikontribusikan?
Jenis Contoh
Bug fix Perbaiki error, crash, atau perilaku tidak sesuai
Fitur baru Tambah komponen UI, utilitas, dll
Dokumentasi Tulis/perbaiki dokumentasi, tambah contoh
Terjemahan Bantu terjemahkan dokumentasi ke Bahasa Indonesia
Testing Tambah unit test, integration test
Example Buat contoh aplikasi menggunakan AriawanUi
Proses Review
Anda buat Pull Request
        ↓
Maintainer review code Anda
        ↓
   ┌────┴────┐
   ↓         ↓
Feedback   Approved
(Revisi)   (Merge)
  • Setiap PR akan di-review oleh maintainer
  • Maintainer mungkin minta revisi atau klarifikasi
  • Setelah approved, PR akan di-merge ke main branch
  • Kontributor akan tercatat di contributors list
Code of Conduct
  • Gunakan Bahasa Indonesia atau Inggris yang sopan
  • Hormati pendapat dan kontribusi orang lain
  • Fokus pada kualitas code dan dokumentasi
  • Bantu sesama developer Indonesia berkembang

Lisensi

AriawanUi dilisensikan di bawah MIT License / Unlicense (dual license) - Anda bebas menggunakan untuk proyek personal maupun komersial. Lihat file LICENSE untuk detail.

Credits

AriawanUi dibangun di atas Gio, sebuah framework GUI open source yang luar biasa. Terima kasih kepada:

  • Elias Naur - Creator Gio
  • Gio Contributors - Semua kontributor Gio
  • Komunitas Go Indonesia - Inspirasi dan dukungan

Kontak & Komunitas

Punya pertanyaan? Buat issue di GitHub atau hubungi langsung!


Dibuat dengan semangat untuk Developer Indonesia

Mari bersama membangun ekosistem GUI development di Indonesia!

Directories

Path Synopsis
app
Package app provides a platform-independent interface to operating system functionality for running graphical user interfaces.
Package app provides a platform-independent interface to operating system functionality for running graphical user interfaces.
internal/xkb
Package xkb implements a Go interface for the X Keyboard Extension library.
Package xkb implements a Go interface for the X Keyboard Extension library.
permission
Package permission includes sub-packages that should be imported by a Gio program or by one of its dependencies to indicate that specific operating-system permissions are required.
Package permission includes sub-packages that should be imported by a Gio program or by one of its dependencies to indicate that specific operating-system permissions are required.
permission/bluetooth
Package bluetooth implements permissions to access Bluetooth and Bluetooth Low Energy hardware, including the ability to discover and pair devices.
Package bluetooth implements permissions to access Bluetooth and Bluetooth Low Energy hardware, including the ability to discover and pair devices.
permission/camera
Package camera implements permissions to access camera hardware.
Package camera implements permissions to access camera hardware.
permission/networkstate
Package networkstate implements permissions to access network connectivity information.
Package networkstate implements permissions to access network connectivity information.
permission/storage
Package storage implements read and write storage permissions on mobile devices.
Package storage implements read and write storage permissions on mobile devices.
permission/wakelock
Package wakelock implements permission to acquire locks that keep the system from suspending.
Package wakelock implements permission to acquire locks that keep the system from suspending.
Package f32 is a float32 implementation of package image's Point and affine transformations.
Package f32 is a float32 implementation of package image's Point and affine transformations.
Package font provides type describing font faces attributes.
Package font provides type describing font faces attributes.
gofont
Package gofont exports the Go fonts as a text.Collection.
Package gofont exports the Go fonts as a text.Collection.
opentype
Package opentype implements text layout and shaping for OpenType files.
Package opentype implements text layout and shaping for OpenType files.
Package gesture implements common pointer gestures.
Package gesture implements common pointer gestures.
gpu
Package gpu implements the rendering of Gio drawing operations.
Package gpu implements the rendering of Gio drawing operations.
headless
Package headless implements headless windows for rendering an operation list to an image.
Package headless implements headless windows for rendering an operation list to an image.
internal/rendertest
Package rendertest is intended for testing of drawing ops only.
Package rendertest is intended for testing of drawing ops only.
internal
byteslice
Package byteslice provides byte slice views of other Go values such as slices and structs.
Package byteslice provides byte slice views of other Go values such as slices and structs.
cocoainit
Package cocoainit initializes support for multithreaded programs in Cocoa.
Package cocoainit initializes support for multithreaded programs in Cocoa.
debug
Package debug provides general debug feature management for Gio, including the ability to toggle debug features using the GIODEBUG environment variable.
Package debug provides general debug feature management for Gio, including the ability to toggle debug features using the GIODEBUG environment variable.
egl
f32
Package f32 is an internal version of the public package f32 with extra types for internal use.
Package f32 is an internal version of the public package f32 with extra types for internal use.
gl
ops
scene
Package scene encodes and decodes graphics commands in the format used by the compute renderer.
Package scene encodes and decodes graphics commands in the format used by the compute renderer.
stroke
Package stroke implements conversion of strokes to filled outlines.
Package stroke implements conversion of strokes to filled outlines.
vk
io
event
Package event contains types for event handling.
Package event contains types for event handling.
input
Package input implements input routing and tracking of interface state for a window.
Package input implements input routing and tracking of interface state for a window.
key
Package key implements key and text events and operations.
Package key implements key and text events and operations.
pointer
Package pointer implements pointer events and operations.
Package pointer implements pointer events and operations.
semantic
Package semantic provides operations for semantic descriptions of a user interface, to facilitate presentation and interaction in external software such as screen readers.
Package semantic provides operations for semantic descriptions of a user interface, to facilitate presentation and interaction in external software such as screen readers.
transfer
Package transfer contains operations and events for brokering data transfers.
Package transfer contains operations and events for brokering data transfers.
Package layout implements layouts common to GUI programs.
Package layout implements layouts common to GUI programs.
op
Package op implements operations for updating a user interface.
Package op implements operations for updating a user interface.
clip
Package clip provides operations for defining areas that applies to operations such as paints and pointer handlers.
Package clip provides operations for defining areas that applies to operations such as paints and pointer handlers.
paint
Package paint provides drawing operations for 2D graphics.
Package paint provides drawing operations for 2D graphics.
gio
Package unit implements device independent units.
Package unit implements device independent units.
Package widget implements state tracking and event handling of common user interface controls.
Package widget implements state tracking and event handling of common user interface controls.
material
Package material implements the Material design.
Package material implements the Material design.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL