mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
Browser for Gemini Protocol
https://crates.io/crates/Yoda
19001965browserclientflatpakgeminigemini-protocolggeminiggemtextgtklibadwaitamarkdownmaxmindnexnex-protocolrustsourceviewsqlitesyntecttitan
| .github | ||
| .vscode | ||
| data | ||
| src | ||
| .gitignore | ||
| Cargo.toml | ||
| io.github.yggverse.Yoda.yaml | ||
| LICENSE | ||
| README.md | ||
Yoda - Browser for Gemini protocol
GTK 4 / Libadwaita client written in Rust
Important
Project in development, for stable version use release!
Features
Interface
- Multi-tab
- Hotkeys
- Bookmarks
- Build-in multimedia support
- Certificates
- Server
- The TOFU validation
- Client
- Generate new identity
- Select for path
- Export to PEM
- Import from PEM
- Delete
- Server
- Custom search providers
- Downloads
- Browser window
- Save page as file
- Unsupported content type downloads
- History
- Recently visited
- Recently closed
- Proxy (by SimpleProxyResolver)
- Multiple regex rules by the priority
- Custom ignored hosts
- UI indication with the accent colors
- Session
- Window
- Size
- Tabs
- Pin
- Page
- Content (cache)
- Meta
- Title
- Navigation
- Request
- History
- Window
- User settings
Protocols
- Gemini
- Status code
- Success
20
- Input
10Input11Sensitive input
- Redirection
30Temporary31Permanent
- Temporary failure
40Unspecified condition41Server unavailable42CGI error43Proxy error44Slow down
- Permanent failure
50General51Not found52Gone53Proxy request refused59Bad request
- Client certificates
60Certificate requested61Certificate not authorized62Certificate not valid
- Success
- Gemtext (by ggemtext)
- Code (inline/multiline)
- Inline
- Multiline
- Alt
- Syntax highlight* (by syntect)
- Terminal emulation* (by ansi-parser)
- foreground
- background
- intensity
- italic
- underline
- blink
- reversed
- strikethrough
- Header
- H1
- H2
- H3
- Link
- Address
- Date
- Alt
- List
- Quote
- Code (inline/multiline)
- Gemfeed
- by headers
- by links
- by content hash*
- Titan
- Binary data (file uploads)
- Text input
- Header options
- MIME
- Token
- Status code
- NEX - useful for networks with build-in encryption (e.g. Yggdrasil or Mycelium)
- System
file://- local files browser
- Request prefix
download:- save location to filesource:- source viewer (by sourceview5)
Media types
Text
text/geminitext/plaintext/nex
Images
image/gifimage/jpegimage/pngimage/webpimage/svg+xml
Audio
audio/flacaudio/mpegaudio/ogg
Video
Build
Requirements
- Cairo
1.18 - GdkPixBuf
2.42 - Glib
2.80 - Gtk
4.14 - GtkSourceView
5.14 - libadwaita
1.5(Ubuntu 24.04+) - libspelling
0.1
Debian
sudo apt install git curl build-essential\
libgtk-4-dev libgtksourceview-5-dev libglib2.0-dev libadwaita-1-dev libspelling-1-dev\
libsqlite3-dev libssl-dev
Fedora
sudo dnf install git curl gcc\
gtk4-devel gtksourceview5-devel glib2-devel libadwaita-devel libspelling-devel\
sqlite-devel openssl-devel
Rust
Use rustup installer to setup latest Rust compiler and Cargo package manager:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Install
Stable
cargo install Yoda
- run
Yoda
Repository
git clone https://github.com/YGGverse/Yoda.git
cd Yoda
cargo build --release
- run
target/release/Yoda
Flatpak
git clone https://github.com/YGGverse/Yoda.git
cd Yoda
flatpak-builder --force-clean build\
--install-deps-from=flathub\
--install --repo=repo --user\
io.github.yggverse.Yoda.yaml
- launch:
flatpak run io.github.yggverse.Yoda - bundle:
flatpak build-bundle repo Yoda.flatpak io.github.yggverse.Yoda
Development
Contribution
- Before commit, please make sure:
- new branch created for every new PR
git checkout -b 'contribution-name' - new code follows common rustfmt style
cargo fmt --check - run
cargo clippyfor final optimization
- new branch created for every new PR
Contributors
Localization
UI localization planed as Crowdin repository, but it is not implemented yet.
To install new spell dictionaries in Fedora, use sudo dnf install hunspell-CODE
- just replace
CODEwith the locale code you want
Geo-location
To enable geo-location features, get official IP database from MaxMind
then copy following files into the config folder (available from menu)
GeoLite2-Country.mmdbGeoLite2-City.mmdb(not implemented yet)
Releases
- Package version in repository increase after crates.io release
- Until DB migration not implemented, application will create new profile on every
CARGO_PKG_VERSION_MAJOR.CARGO_PKG_VERSION_MINORchange
See also
- ggemtext - Glib-oriented Gemtext API
- ggemini - Glib-oriented client for Gemini protocol