2024-09-18 20:39:03 +03:00
|
|
|
# Yoda - Browser for [Gemini protocol](https://geminiprotocol.net)
|
|
|
|
|
2024-10-11 22:45:00 +03:00
|
|
|
GTK 4 / Libadwaita client written in Rust
|
2024-09-18 20:39:03 +03:00
|
|
|
|
|
|
|
> [!IMPORTANT]
|
|
|
|
> Project in development!
|
2024-09-18 20:51:18 +03:00
|
|
|
>
|
|
|
|
|
2024-10-11 05:21:55 +03:00
|
|
|
![image](https://github.com/user-attachments/assets/cfbbc3fb-61d2-4afd-a21f-8e36ee329941)
|
|
|
|
|
2024-10-30 20:55:32 +02:00
|
|
|
## Features
|
|
|
|
|
2024-10-30 20:56:48 +02:00
|
|
|
### Interface
|
|
|
|
* [x] Multi-tab
|
|
|
|
* [x] Hotkeys
|
|
|
|
* [ ] Bookmarks
|
|
|
|
* [ ] Build-in multimedia support
|
2024-10-30 21:11:15 +02:00
|
|
|
* [x] [Images](#images)
|
|
|
|
* [ ] [Audio](#audio)
|
|
|
|
* [ ] [Video](#video)
|
2024-10-31 15:50:37 +02:00
|
|
|
* [ ] Certificates
|
2024-10-30 20:56:48 +02:00
|
|
|
* [ ] Downloads
|
|
|
|
* [ ] History
|
2024-10-30 21:03:02 +02:00
|
|
|
* [ ] Proxy
|
|
|
|
* [ ] Session
|
2024-10-30 21:18:43 +02:00
|
|
|
* [ ] Window
|
|
|
|
* [x] Size
|
|
|
|
* [x] Tabs
|
2024-10-30 21:21:38 +02:00
|
|
|
* [x] Pin
|
2024-10-30 21:18:43 +02:00
|
|
|
* [x] Page
|
2024-11-03 16:49:57 +02:00
|
|
|
* [ ] Content (cache)
|
|
|
|
* [x] Meta
|
|
|
|
* [x] Title
|
2024-10-30 21:18:43 +02:00
|
|
|
* [ ] Navigation
|
|
|
|
* [x] Request
|
|
|
|
* [ ] History
|
2024-10-30 21:03:02 +02:00
|
|
|
* [ ] User settings
|
|
|
|
|
2024-10-30 21:04:24 +02:00
|
|
|
### Protocols
|
2024-10-30 21:27:21 +02:00
|
|
|
* [ ] [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi)
|
2024-11-05 10:14:29 +02:00
|
|
|
* [ ] [Status code](https://geminiprotocol.net/docs/protocol-specification.gmi#status-codes)
|
2024-10-30 20:56:48 +02:00
|
|
|
* [x] Success
|
2024-10-30 21:05:41 +02:00
|
|
|
* [x] `20`
|
2024-10-30 20:56:48 +02:00
|
|
|
* [x] Input
|
2024-10-30 21:05:41 +02:00
|
|
|
* [x] `10` Input
|
|
|
|
* [x] `11` Sensitive input
|
2024-11-02 21:38:05 +02:00
|
|
|
* [x] Redirection
|
|
|
|
* [x] `30` Temporary
|
|
|
|
* [x] `31` Permanent
|
2024-10-30 21:05:41 +02:00
|
|
|
* [ ] Temporary failure
|
2024-11-01 18:11:01 +02:00
|
|
|
* [ ] `40` Unspecified condition
|
|
|
|
* [ ] `41` Server unavailable
|
|
|
|
* [ ] `42` CGI error
|
|
|
|
* [ ] `43` Proxy error
|
|
|
|
* [ ] `44` Slow down
|
2024-10-30 21:05:41 +02:00
|
|
|
* [ ] Permanent failure
|
2024-11-01 18:11:01 +02:00
|
|
|
* [ ] `50` General
|
|
|
|
* [ ] `51` Not found
|
|
|
|
* [ ] `52` Gone
|
|
|
|
* [ ] `53` Proxy request refused
|
|
|
|
* [ ] `59` Bad request
|
2024-11-21 19:48:31 +02:00
|
|
|
* [x] Client certificates
|
2024-11-20 19:10:22 +02:00
|
|
|
* [x] `60` Certificate requested
|
2024-11-21 19:48:31 +02:00
|
|
|
* [x] `61` Certificate not authorized
|
|
|
|
* [x] `62` Certificate not valid
|
2024-11-05 18:22:23 +02:00
|
|
|
* [x] [Gemtext](https://geminiprotocol.net/docs/gemtext-specification.gmi) (by [ggemtext](https://github.com/YGGverse/ggemtext))
|
|
|
|
* [x] Code (inline/multiline)
|
2024-11-05 18:27:11 +02:00
|
|
|
* [x] Inline
|
|
|
|
* [x] Multiline
|
|
|
|
* [x] Alt
|
2024-11-05 18:29:08 +02:00
|
|
|
* [ ] Terminal emulation*
|
2024-12-03 03:38:29 +02:00
|
|
|
* [x] Syntax highlight* (by [syntect](https://github.com/trishume/syntect))
|
2024-11-05 18:32:19 +02:00
|
|
|
* [x] Header
|
|
|
|
* [x] H1
|
|
|
|
* [x] H2
|
|
|
|
* [x] H3
|
2024-11-05 18:22:23 +02:00
|
|
|
* [x] Link
|
2024-11-05 18:25:49 +02:00
|
|
|
* [x] Address
|
|
|
|
* [x] Date
|
|
|
|
* [x] Alt
|
2024-11-05 18:22:23 +02:00
|
|
|
* [x] List
|
|
|
|
* [x] Quote
|
2024-11-05 10:14:29 +02:00
|
|
|
* [ ] Gemfeed
|
2024-10-31 15:39:24 +02:00
|
|
|
* [ ] Titan
|
2024-11-03 16:24:06 +02:00
|
|
|
* [ ] [NEX](https://nightfall.city/nex/info/specification.txt) - useful for networks with build-in encryption (e.g. [Yggdrasil](https://yggdrasil-network.github.io))
|
2024-10-31 15:39:24 +02:00
|
|
|
* [ ] [NPS](https://nightfall.city/nps/info/specification.txt)
|
2024-12-02 12:37:49 +02:00
|
|
|
* [ ] Localhost
|
2024-12-02 12:37:22 +02:00
|
|
|
* [ ] `file://` - localhost browser
|
|
|
|
* [ ] `config://` - low-level key/value settings editor
|
|
|
|
* [ ] `view-source://` - page source viewer (where supported)
|
2024-10-30 21:03:02 +02:00
|
|
|
|
2024-10-30 20:56:48 +02:00
|
|
|
### Media types
|
2024-10-30 21:03:02 +02:00
|
|
|
|
2024-10-30 21:10:04 +02:00
|
|
|
#### Text
|
2024-10-30 20:56:48 +02:00
|
|
|
* [x] `text/gemini`
|
2024-10-30 21:06:28 +02:00
|
|
|
* [ ] `text/plain`
|
2024-10-30 21:10:04 +02:00
|
|
|
|
|
|
|
#### Images
|
2024-10-30 20:56:48 +02:00
|
|
|
* [x] `image/gif`
|
|
|
|
* [x] `image/jpeg`
|
|
|
|
* [x] `image/png`
|
|
|
|
* [x] `image/webp`
|
2024-11-01 17:47:54 +02:00
|
|
|
* [ ] `image/svg+xml`
|
2024-10-30 21:10:04 +02:00
|
|
|
|
|
|
|
#### Audio
|
2024-10-30 21:31:31 +02:00
|
|
|
* [ ] `audio/flac`
|
2024-10-30 20:56:48 +02:00
|
|
|
* [ ] `audio/mpeg`
|
|
|
|
* [ ] `audio/ogg`
|
2024-10-30 21:10:04 +02:00
|
|
|
|
|
|
|
#### Video
|
2024-10-30 20:55:32 +02:00
|
|
|
|
2024-10-10 16:17:59 +03:00
|
|
|
## Build
|
2024-09-18 20:51:18 +03:00
|
|
|
|
2024-10-12 04:24:17 +03:00
|
|
|
### Requirements
|
2024-10-10 16:17:59 +03:00
|
|
|
|
2024-11-18 23:56:20 +02:00
|
|
|
* Cairo `1.16`
|
2024-11-18 23:57:39 +02:00
|
|
|
* GDK PixBuf `2.42`
|
2024-11-18 23:56:20 +02:00
|
|
|
* Gio `2.82`
|
|
|
|
* Glib `2.56`
|
|
|
|
* GTK `4.16`
|
2024-12-04 05:01:55 +02:00
|
|
|
* Libadwaita `1.5` (Ubuntu 24.04+)
|
2024-10-10 22:26:09 +03:00
|
|
|
|
2024-10-12 04:25:34 +03:00
|
|
|
Use [rustup](https://rustup.rs) installer to setup latest Rust compiler and Cargo package manager:
|
2024-10-10 16:17:59 +03:00
|
|
|
|
|
|
|
``` bash
|
|
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Debian
|
|
|
|
|
2024-12-04 03:01:33 +02:00
|
|
|
``` bash
|
|
|
|
sudo apt install git build-essential\
|
|
|
|
libglib2.0-dev libgtk-4-dev libadwaita-1-dev\
|
|
|
|
libssl-dev
|
|
|
|
```
|
2024-10-10 16:17:59 +03:00
|
|
|
|
|
|
|
#### Fedora
|
|
|
|
|
|
|
|
``` bash
|
|
|
|
sudo dnf install git gcc\
|
|
|
|
cairo-devel glib2-devel gtk4-devel libadwaita-devel pango-devel\
|
|
|
|
sqlite-devel
|
|
|
|
```
|
|
|
|
|
|
|
|
### Install
|
|
|
|
|
|
|
|
#### Stable
|
2024-09-20 17:54:28 +03:00
|
|
|
|
|
|
|
``` bash
|
|
|
|
cargo install Yoda
|
|
|
|
```
|
|
|
|
|
2024-10-10 16:17:59 +03:00
|
|
|
#### Repository
|
2024-09-19 13:23:28 +03:00
|
|
|
|
|
|
|
``` bash
|
|
|
|
git clone https://github.com/YGGverse/Yoda.git
|
|
|
|
cd Yoda
|
2024-10-10 16:17:59 +03:00
|
|
|
cargo build
|
2024-09-19 13:23:28 +03:00
|
|
|
```
|
|
|
|
|
2024-09-23 14:26:24 +03:00
|
|
|
## Development
|
|
|
|
|
|
|
|
### Contribution
|
|
|
|
|
2024-10-08 07:42:10 +03:00
|
|
|
* Before commit, please make sure:
|
2024-09-23 14:26:24 +03:00
|
|
|
* new branch created for every new PR `git checkout -b 'contribution-name'`
|
|
|
|
* new code follows common [rustfmt](https://rust-lang.github.io/rustfmt/) style `cargo fmt --check`
|
2024-11-08 06:03:42 +02:00
|
|
|
* run `cargo clippy` for final optimization
|
2024-09-23 14:26:24 +03:00
|
|
|
|
2024-11-01 01:37:57 +02:00
|
|
|
#### Contributors
|
|
|
|
|
|
|
|
![wakatime](https://wakatime.com/badge/user/0b7fe6c1-b091-4c98-b930-75cfee17c7a5/project/018ebca8-4d22-4f9e-b557-186be6553d9a.svg) ![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)
|
|
|
|
|
2024-10-08 07:42:10 +03:00
|
|
|
### Releases
|
|
|
|
|
2024-11-20 19:20:24 +02:00
|
|
|
* Package version in repository increase after [crates.io](https://crates.io/crates/yoda) release
|
2024-11-20 19:22:24 +02:00
|
|
|
* Until DB migration not implemented, application will create new profile on `CARGO_PKG_VERSION_MAJOR`.`CARGO_PKG_VERSION_MINOR` change
|
2024-10-20 12:50:39 +03:00
|
|
|
|
|
|
|
### See also
|
|
|
|
|
2024-11-05 18:22:23 +02:00
|
|
|
* [ggemtext](https://github.com/YGGverse/ggemtext) - Glib-oriented [Gemtext](https://geminiprotocol.net/docs/gemtext-specification.gmi) API
|
|
|
|
* [ggemini](https://github.com/YGGverse/ggemini) - Glib-oriented client for [Gemini protocol](https://geminiprotocol.net/docs/protocol-specification.gmi)
|