{"id":29910298,"url":"https://github.com/MAIF/yozefu","last_synced_at":"2025-08-02T01:07:49.780Z","repository":{"id":267477503,"uuid":"897839639","full_name":"MAIF/yozefu","owner":"MAIF","description":" An interactive terminal user interface (TUI) application for exploring data of a kafka cluster. ","archived":false,"fork":false,"pushed_at":"2025-07-29T19:10:02.000Z","size":18076,"stargazers_count":151,"open_issues_count":6,"forks_count":4,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-29T21:12:32.584Z","etag":null,"topics":["kafka","kafka-consumer","ratatui-rs","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/yozefu/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MAIF.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2024-12-03T10:30:17.000Z","updated_at":"2025-07-24T19:43:18.000Z","dependencies_parsed_at":"2024-12-10T15:37:39.341Z","dependency_job_id":"0edb1038-1120-4b6f-93fe-5ba45a478a4e","html_url":"https://github.com/MAIF/yozefu","commit_stats":null,"previous_names":["maif/yozefu"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/MAIF/yozefu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fyozefu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fyozefu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fyozefu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fyozefu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MAIF","download_url":"https://codeload.github.com/MAIF/yozefu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fyozefu/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267771863,"owners_count":24142081,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["kafka","kafka-consumer","ratatui-rs","rust"],"created_at":"2025-08-02T01:02:24.669Z","updated_at":"2025-08-02T01:07:49.771Z","avatar_url":"https://github.com/MAIF.png","language":"Rust","funding_links":[],"categories":["\u003ca name=\"viewers\"\u003e\u003c/a\u003eViewers","Table of Contents","CLI Tools"],"sub_categories":["Interactive Tools"],"readme":"\u003cp align=\"center\" style=\"width: 150px\"\u003e\n\u003cpicture\u003e\n    \u003csource width=\"150\" media=\"(prefers-color-scheme: dark)\" srcset=\"./docs/assets/logo.svg\"\u003e\n    \u003cimg width=\"150\" alt=\"Logo Yozefu\" src=\"./docs/assets/logo.svg\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://crates.io/crates/yozefu/\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/yozefu?logo=Rust\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.rust-lang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/MSRV-1.85.0+-lightgray.svg?logo=rust\" alt=\"Minimum supported Rust version: 1.85.0 or plus\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/MAIF/yozefu/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache_2.0-blue.svg\" alt=\"Licence\"/\u003e\u003c/a\u003e\n\n\u003c/p\u003e\n\nYōzefu is an interactive terminal user interface (TUI) application for exploring data of a kafka cluster.\nIt is an alternative tool to [AKHQ](https://akhq.io/), [redpanda console](https://www.redpanda.com/redpanda-console-kafka-ui) or [the kafka plugin for JetBrains IDEs](https://plugins.jetbrains.com/plugin/21704-kafka).\n\nThe tool offers the following features:\n - A real-time access to data published to topics.\n - A [search query language](https://github.com/MAIF/yozefu/tree/main/docs/query-language/README.md) inspired from SQL providing a fine-grained way filtering capabilities.\n - Ability to search kafka records across multiple topics.\n - Support for extending the search engine with [user-defined filters](https://github.com/MAIF/yozefu/tree/main/docs/search-filter/README.md) written in WebAssembly ([Extism](https://extism.org/)).\n - The tool can be used as a terminal user interface or a CLI with the `--headless` flag.\n - One keystroke to export kafka records for further analysis.\n - Support for registering multiple kafka clusters, each with specific kafka consumer properties.\n\n\nBy default, [the kafka consumer is configured](https://github.com/MAIF/yozefu/blob/main/crates/command/src/command/main_command.rs#L318-L325) with the property `enable.auto.commit` set to `false`, meaning no kafka consumer offset will be published to kafka.\n\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://vhs.charm.sh/vhs-UpIJD2h92vKkj01XSS0r0.gif\"\u003e\n  \u003cimg alt=\"Demo of Yozefu: The user selects a topic and sees and real time new records published to Kafka.\" src=\"https://vhs.charm.sh/vhs-1oh0ovd0DaUfvKLTx4iZTo.gif\"\u003e\n\u003c/picture\u003e\n\n## Limitations\n\n - The tool is designed only to consume kafka records. There is no feature to produce records or manage a cluster.\n - Serialization formats such as `json`, `xml` or plain text are supported. [Avro](https://avro.apache.org/) support is [experimental for now](https://github.com/MAIF/yozefu/tree/main/docs/schema-registry/README.md). [Protobuf](https://protobuf.dev/) is not supported.\n - The tool uses a ring buffer to store the [last 500 kafka records](https://github.com/MAIF/yozefu/blob/main/crates/tui/src/records_buffer.rs#L17).\n - There is probably room for improvement regarding the throughput (lot of `clone()` and deserialization).\n - Yozefu has been tested on MacOS Silicon but not on Windows or Linux. Feedback or contributions are welcome.\n\n\n## Getting started\n\n\u003c!--\n\u003e [!NOTE]\n\u003e For a better visual experience, I invite you to install [Powerline fonts](https://github.com/powerline/fonts).\n\u003e --\u003e\n\n```bash\ncargo install yozefu\n\n# By default, it starts the TUI. \n# The default registered cluster is localhost\nyozf --cluster localhost\n\n# You can also start the tool in headless mode.\n# It prints the key of each kafka record matching the query in real time\nyozf --cluster localhost               \\\n    --headless                         \\\n    --topics \"public-french-addresses\" \\\n    --format \"json\"                    \\\n    'from begin value.properties.type contains \"street\" and offset \u003c 356_234 limit 10' \\\n  | jq '.key'\n\n\n# Use the `configure` command to define new clusters\nyozf configure\n\n# You can create search filters\nyozf create-filter --language rust key-ends-with\n\n# And import them\nyozf import-filter path/to/key-ends-with.wasm\n```\n\nYou can also download pre-build binaries from the [releases section](https://github.com/MAIF/yozefu/releases). [Attestions](https://github.com/MAIF/yozefu/attestations) are available:\n```bash\ngh attestation verify --repo MAIF/yozefu $(which yozf)\n```\n\n\n## Try it\n\n\u003e [!NOTE]\n\u003e Docker is required to start a single node Kafka cluster on your machine. [JBang](https://www.jbang.dev/) is not required but recommended if you want to produce records with the schema registry.\n\n\n```bash\n# It clones this repository, starts a docker kafka node and produces json records\ncurl -L \"https://raw.githubusercontent.com/MAIF/yozefu/refs/heads/main/docs/try-it.sh\" | bash\n\nyozf -c localhost\n```\n\n\n## Documentation\n\n - [The query language.](https://github.com/MAIF/yozefu/tree/main/docs/query-language/README.md)\n - [Creating a search filter.](https://github.com/MAIF/yozefu/tree/main/docs/search-filter/README.md)\n - [TLS encryption and authentication.](https://github.com/MAIF/yozefu/tree/main/docs/tls/README.md)\n - [URL templates to switch to web applications.](https://github.com/MAIF/yozefu/tree/main/docs/url-templates/README.md)\n - [Schema registry.](https://github.com/MAIF/yozefu/tree/main/docs/schema-registry/README.md)\n - [Themes.](https://github.com/MAIF/yozefu/tree/main/docs/themes/README.md)\n - [Keybindings.](https://github.com/MAIF/yozefu/tree/main/docs/keybindings/README.md)\n - [Releasing a new version.](https://github.com/MAIF/yozefu/tree/main/docs/release/README.md)\n \n\n\n## Screenshots\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"A table listing topics and kafka records\" src=\"https://raw.githubusercontent.com/MAIF/yozefu/refs/heads/main/docs/assets/topics.png\"\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"A table listing kafka records\" src=\"https://raw.githubusercontent.com/MAIF/yozefu/refs/heads/main/docs/assets/records.png\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"View of a selected kafka records\" src=\"https://raw.githubusercontent.com/MAIF/yozefu/refs/heads/main/docs/assets/record.png\"\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"View of the help page\" src=\"https://raw.githubusercontent.com/MAIF/yozefu/refs/heads/main/docs/assets/help.png\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMAIF%2Fyozefu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMAIF%2Fyozefu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMAIF%2Fyozefu/lists"}