PHP-GTK Client for Gemini Protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yggverse 492e3bb2ea draft 31 status code implementation 2 months ago
src draft 31 status code implementation 2 months ago
.gitignore initial commit 2 months ago
Cargo.toml fix keywords limit 2 months ago
LICENSE initial commit 2 months ago
README.md update readme 2 months ago
rustfmt.toml init rustfmt.toml 2 months ago

README.md

Yoda - Browser for Gemini protocol

Rust / GTK 4 implementation

[!IMPORTANT] Project in development!

Install

Stable

cargo install Yoda

Repository

git clone https://github.com/YGGverse/Yoda.git
cd Yoda
git checkout Rust-GTK4
cargo run

Development

Guide and protocol draft

browser

Filesystem

  • Use modern path pattern
  • One module implements one GTK widget, it may include additional helper files in same location (like template, CSS or DB API)
  • For children widget - create children module, located according to hierarchy

Codebase

  • The codebase must be as minimal as possible, separate:
    • different tasks
    • massive structures
    • structures with implementation
  • Every module must:
    • encapsulate it members: compose childs and stay composable for parents
    • access 1 level of childs, never parents (e.g. through super)
    • implement only one struct (same as one file for one class)
      • implementable struct is public, where members - private
    • contain main struct implementation:
      • at least one constructor that must return:
        • unwrapped main Self structure
        • granted ownership for new object created
      • public link getter for privately constructed widget
  • Public API oriented to simple (integer, boolean), standard (std::*) or system-wide (gio, glib, etc) data types usage to reduce internal dependencies from app implementation

GTK

  • Operate with action objects instead of names like win.action. This allows to follow encapsulation, by the our goal, module must know nothing about parent presets. For example, define some action in parent, then delegate object created as construction argument

Contribution

  • before commit, make sure:
    • new branch created for every new PR git checkout -b 'contribution-name'
    • new code follows common rustfmt style cargo fmt --check

See also

  • CPP-GTK4 - C++ / GTK 4 implementation
  • PHP-GTK3 - PHP / GTK 3 experimental branch