{"id":13770170,"url":"https://github.com/YGGverse/Yoda","last_synced_at":"2025-05-11T02:35:15.668Z","repository":{"id":232362984,"uuid":"784071632","full_name":"YGGverse/Yoda","owner":"YGGverse","description":"Browser for Gemini Protocol","archived":false,"fork":false,"pushed_at":"2024-11-14T14:24:50.000Z","size":2084,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-15T06:18:05.825Z","etag":null,"topics":["browser","client","gemini","gemini-protocol","gtk","libadwaita","rust","sqlite"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/Yoda","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YGGverse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-09T06:09:57.000Z","updated_at":"2024-11-14T14:24:53.000Z","dependencies_parsed_at":"2024-08-03T17:03:11.795Z","dependency_job_id":"97c994bf-8c3e-4bd0-98d9-9252a5dd764e","html_url":"https://github.com/YGGverse/Yoda","commit_stats":null,"previous_names":["yggverse/yoda"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YGGverse%2FYoda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YGGverse%2FYoda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YGGverse%2FYoda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YGGverse%2FYoda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YGGverse","download_url":"https://codeload.github.com/YGGverse/Yoda/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224947282,"owners_count":17396767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","client","gemini","gemini-protocol","gtk","libadwaita","rust","sqlite"],"created_at":"2024-08-03T17:00:34.941Z","updated_at":"2025-05-11T02:35:15.655Z","avatar_url":"https://github.com/YGGverse.png","language":"Rust","funding_links":[],"categories":["Clients"],"sub_categories":["Graphical"],"readme":"# Yoda - Browser for [Gemini protocol](https://geminiprotocol.net)\n\nGTK 4 / Libadwaita client written in Rust\n\n\u003e [!IMPORTANT]\n\u003e Project in development, for stable version use crates.io release!\n\u003e\n\n![image](https://github.com/user-attachments/assets/cfbbc3fb-61d2-4afd-a21f-8e36ee329941)\n\n## Features\n\n### Interface\n* [x] Multi-tab\n* [x] Hotkeys\n* [ ] Bookmarks\n  * [ ] Browser window\n  * [x] Recent bookmarks list\n* [ ] Build-in multimedia support\n  * [x] [Images](#images)\n  * [ ] [Audio](#audio)\n  * [ ] [Video](#video)\n* [x] Certificates\n  * [x] Generate new identity\n  * [x] Select for path\n  * [x] Export to PEM\n  * [x] Import from PEM\n  * [x] Delete\n* [x] Custom search providers\n* [ ] Downloads\n  * [ ] Browser window\n  * [x] Save page as file\n  * [x] Unsupported content type downloads\n* [ ] History\n  * [ ] Browser window\n  * [x] Page navigation\n  * [x] Recently visited\n  * [x] Recently closed\n* [ ] Proxy\n* [ ] Session\n  * [ ] Window\n    * [x] Size\n    * [x] Tabs\n      * [x] Pin\n      * [x] Page\n        * [ ] Content (cache)\n        * [x] Meta\n          * [x] Title\n        * [ ] Navigation\n          * [x] Request\n          * [ ] History\n* [ ] User settings\n\n### Protocols\n* [ ] [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi)\n  * [x] [Status code](https://geminiprotocol.net/docs/protocol-specification.gmi#status-codes)\n    * [x] Success\n      * [x] `20`\n    * [x] Input\n      * [x] `10` Input\n      * [x] `11` Sensitive input\n    * [x] Redirection\n      * [x] `30` Temporary\n      * [x] `31` Permanent\n    * [x] Temporary failure\n      * [x] `40` Unspecified condition\n      * [x] `41` Server unavailable\n      * [x] `42` CGI error\n      * [x] `43` Proxy error\n      * [x] `44` Slow down\n    * [x] Permanent failure\n      * [x] `50` General\n      * [x] `51` Not found\n      * [x] `52` Gone\n      * [x] `53` Proxy request refused\n      * [x] `59` Bad request\n    * [x] Client certificates\n      * [x] `60` Certificate requested\n      * [x] `61` Certificate not authorized\n      * [x] `62` Certificate not valid\n  * [x] [Gemtext](https://geminiprotocol.net/docs/gemtext-specification.gmi) (by [ggemtext](https://crates.io/crates/ggemtext))\n    * [x] Code (inline/multiline)\n      * [x] Inline\n      * [x] Multiline\n        * [x] Alt\n      * [x] Syntax highlight* (by [syntect](https://crates.io/crates/syntect))\n      * [ ] Terminal emulation* (by [ansi-parser](https://crates.io/crates/ansi-parser))\n          * [x] foreground\n          * [x] background\n          * [ ] intensity\n          * [ ] italic\n          * [ ] underline\n          * [ ] blink\n          * [ ] reversed\n          * [ ] strikethrough\n    * [x] Header\n      * [x] H1\n      * [x] H2\n      * [x] H3\n    * [x] Link\n      * [x] Address\n      * [x] Date\n      * [x] Alt\n    * [x] List\n    * [x] Quote\n  * [ ] Gemfeed\n    * [ ] by headers\n    * [ ] by links\n    * [ ] by content hash*\n  * [x] [Titan](https://transjovian.org/titan/page/The%20Titan%20Specification)\n    * [x] Binary data (file uploads)\n    * [x] Text input\n    * [x] Header options\n      * [x] MIME\n      * [x] Token\n* [ ] [NEX](https://nightfall.city/nex/info/specification.txt) - useful for networks with build-in encryption (e.g. [Yggdrasil](https://yggdrasil-network.github.io))\n  * [ ] [NPS](https://nightfall.city/nps/info/specification.txt)\n* [x] System\n  * [x] `file://` - local files browser\n* [ ] Request prefix\n  * [ ] `about:`\n    * [ ] `config` - low-level key/value settings editor\n  * [ ] `bookmarks:` - bookmarks browser\n  * [ ] `history:` - history browser\n  * [x] `download:` - save location to file\n  * [x] `source:` - source viewer (by [sourceview5](https://crates.io/crates/sourceview5))\n\n### Media types\n\n#### Text\n  * [x] `text/gemini`\n  * [x] `text/plain`\n\n#### Images\n  * [x] `image/gif`\n  * [x] `image/jpeg`\n  * [x] `image/png`\n  * [x] `image/webp`\n  * [ ] `image/svg+xml`\n\n#### Audio\n  * [ ] `audio/flac`\n  * [ ] `audio/mpeg`\n  * [ ] `audio/ogg`\n\n#### Video\n\n## Build\n\n![Linux](https://github.com/YGGverse/Yoda/actions/workflows/linux.yml/badge.svg)\n[![Dependencies](https://deps.rs/repo/github/YGGverse/Yoda/status.svg)](https://deps.rs/repo/github/YGGverse/Yoda)\n[![crates.io](https://img.shields.io/crates/v/Yoda.svg)](https://crates.io/crates/Yoda)\n\n### Requirements\n\n* Cairo `1.18`\n* GdkPixBuf `2.42`\n* Glib `2.80`\n* Gtk `4.14`\n* GtkSourceView `5.14`\n* libadwaita `1.5` (Ubuntu 24.04+)\n* libspelling `0.1`\n\n#### Debian\n\n``` bash\nsudo apt install git curl build-essential\\\n                 libgtk-4-dev libgtksourceview-5-dev libglib2.0-dev libadwaita-1-dev libspelling-1-dev\\\n                 libsqlite3-dev libssl-dev\n```\n\n#### Fedora\n\n``` bash\nsudo dnf install git curl gcc\\\n                 gtk4-devel gtksourceview5-devel glib2-devel libadwaita-devel libspelling-devel\\\n                 sqlite-devel openssl-devel\n```\n\n#### Rust\n\nUse [rustup](https://rustup.rs) installer to setup latest Rust compiler and Cargo package manager:\n\n``` bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n### Install\n\n#### Stable\n\n``` bash\ncargo install Yoda\n```\n* run `Yoda`\n\n#### Repository\n\n``` bash\ngit clone https://github.com/YGGverse/Yoda.git\ncd Yoda\ncargo build\n```\n* `cargo run`\n\n## Development\n\n### Contribution\n\n* Before commit, please make sure:\n  * new branch created for every new PR `git checkout -b 'contribution-name'`\n  * new code follows common [rustfmt](https://rust-lang.github.io/rustfmt/) style `cargo fmt --check`\n  * run `cargo clippy` for final optimization\n\n#### Contributors\n\n![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)\n\n### Localization\n\nUI localization planed as Crowdin repository, but it is not implemented yet.\n\nTo install new spell dictionaries in Fedora, use `sudo dnf install hunspell-CODE`\n* just replace `CODE` with the locale code you want\n\n### Geo-location\n\nTo enable geo-location features, get official IP database from [MaxMind](https://www.maxmind.com)\\\nthen copy following files into the `config` folder (available from menu)\n\n* `GeoLite2-Country.mmdb`\n* `GeoLite2-City.mmdb` (not implemented yet)\n\n### Releases\n\n* Package version in repository increase after [crates.io](https://crates.io/crates/yoda) release\n* Until DB migration not implemented, application will create new profile on every `CARGO_PKG_VERSION_MAJOR`.`CARGO_PKG_VERSION_MINOR` change\n\n### See also\n\n* [ggemtext](https://github.com/YGGverse/ggemtext) - Glib-oriented [Gemtext](https://geminiprotocol.net/docs/gemtext-specification.gmi) API\n* [ggemini](https://github.com/YGGverse/ggemini) - Glib-oriented client for [Gemini protocol](https://geminiprotocol.net/docs/protocol-specification.gmi)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYGGverse%2FYoda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYGGverse%2FYoda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYGGverse%2FYoda/lists"}