| .github | ||
| .vscode | ||
| data | ||
| src | ||
| .gitignore | ||
| Cargo.toml | ||
| io.github.yggverse.Yoda.yaml | ||
| LICENSE | ||
| README.md | ||
Yoda - Browser for Gemini protocol
Privacy-oriented GTK 4 / Libadwaita client written in Rust.
The term Privacy-oriented means that Yoda complies to the Gemini protocol specification and excludes third-party connections, that making it safe to use in combination with I2P. The Yoda browser also includes useful tools, such as flexible proxy configuration, out of the box for use with mesh networks like Yggdrasil, Mycelium, CJDNS, and others. Additionally, it prevents auto-follow external redirection by default and requires manual confirmation, which is currently not clearly specified.
Yoda browser is primarily designed by and for experienced network users who care about their network fingerprints and prefer to control every action manually. It does not run background connections, does not incorporate web-like media preloading without user initiation (unlike some other clients), nor does it automatically check for updates from unexpected network-related servers.
The Gemini protocol was designed as a simple, private alternative to the Web, and Yoda follows this philosophy by providing a graphical user interface (GUI) for seamless navigation in Geminispace, partially inspired by the Firefox UI.
Important
Project in development, for stable version use checkpoint releases!
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