{"id":13616567,"url":"https://github.com/sauljabin/kaskade","last_synced_at":"2025-10-21T04:04:15.656Z","repository":{"id":44421926,"uuid":"406937732","full_name":"sauljabin/kaskade","owner":"sauljabin","description":"kaskade is a kafka text user interface that allows you to interact with kafka and consume topics from your terminal in style!","archived":false,"fork":false,"pushed_at":"2023-12-25T16:17:26.000Z","size":2388,"stargazers_count":91,"open_issues_count":10,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-04-26T03:44:05.928Z","etag":null,"topics":["cli","kafka","kafka-cli","kafka-tools","kafka-tui","kafka-ui","kafka-utils","python","tui"],"latest_commit_sha":null,"homepage":"","language":"Python","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/sauljabin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["sauljabin"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2021-09-15T22:09:16.000Z","updated_at":"2024-08-13T20:00:11.279Z","dependencies_parsed_at":"2023-11-22T18:32:05.476Z","dependency_job_id":"5a2cf9bb-c267-4a0a-aaad-ab5d652b9f95","html_url":"https://github.com/sauljabin/kaskade","commit_stats":{"total_commits":228,"total_committers":2,"mean_commits":114.0,"dds":0.004385964912280715,"last_synced_commit":"b55665344a1ab09d25f744e234d6e0fb5626910e"},"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauljabin%2Fkaskade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauljabin%2Fkaskade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauljabin%2Fkaskade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauljabin%2Fkaskade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sauljabin","download_url":"https://codeload.github.com/sauljabin/kaskade/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223612182,"owners_count":17173590,"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":["cli","kafka","kafka-cli","kafka-tools","kafka-tui","kafka-ui","kafka-utils","python","tui"],"created_at":"2024-08-01T20:01:30.264Z","updated_at":"2025-10-21T04:04:10.601Z","avatar_url":"https://github.com/sauljabin.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/sauljabin/kaskade\"\u003e\u003cimg alt=\"kaskade\" width=\"400\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/banner.png\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/sauljabin/kaskade\"\u003e\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/badge/github-blueviolet?logo=github\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/sponsors/sauljabin\"\u003e\u003cimg alt=\"donate\" src=\"https://img.shields.io/badge/donate-EA4AAA?logo=github-sponsors\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003ca href=\"https://libraries.io/pypi/kaskade\"\u003e\u003cimg alt=\"Libraries.io dependency status for latest release\" src=\"https://img.shields.io/librariesio/release/pypi/kaskade?logo=python\u0026logoColor=white\u0026label=\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/sauljabin/kaskade/blob/main/LICENSE\"\u003e\u003cimg alt=\"MIT License\" src=\"https://img.shields.io/github/license/sauljabin/kaskade\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/kaskade\"\u003e\u003cimg alt=\"Pypi Version\" src=\"https://img.shields.io/pypi/v/kaskade\"\u003e\u003c/a\u003e\n\u003ca href=\"https://formulae.brew.sh/formula/kaskade\"\u003e\u003cimg alt=\"Homebrew Version\" src=\"https://img.shields.io/homebrew/v/kaskade\"\u003e\u003c/a\u003e\n\u003ca href=\"https://hub.docker.com/r/sauljabin/kaskade/tags\"\u003e\u003cimg alt=\"Docker Version\" src=\"https://img.shields.io/docker/v/sauljabin/kaskade?label=dockerhub\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/kaskade\"\u003e\u003cimg alt=\"Platform\" src=\"https://img.shields.io/badge/os-linux%20%7C%20macos-blue\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/kaskade\"\u003e\u003cimg alt=\"Python Versions\" src=\"https://img.shields.io/pypi/pyversions/kaskade?label=python\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Kaskade\n\nKaskade is a text user interface (TUI) for Apache Kafka, built with [Textual](https://github.com/Textualize/textual)\nby [Textualize](https://www.textualize.io/).\n\nIt includes features like:\n\n### Admin\n\n- List topics, partitions, groups and group members.\n- Topic information like lag, replicas and records count.\n- Create, edit and delete topics.\n- Filter topics by name.\n\n### Consumer\n\n- Json, string, integer, long, float, boolean and double deserialization.\n- Filter by key, value, header and/or partition.\n- Schema Registry support for avro and json.\n- Protobuf deserialization support without Schema Registry.\n- Avro deserialization without Schema Registry.\n\n## Limitations\n\nKaskade does not include:\n\n- Schema Registry for protobuf.\n- Runtime auto-refresh.\n\n## Screenshots\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/admin.png\"\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/create-topic.png\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/consumer.png\"\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cimg alt=\"kaskade\" src=\"https://raw.githubusercontent.com/sauljabin/kaskade/main/screenshots/record.png\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Installation\n\n#### Install it with `brew`:\n\n```bash\nbrew install kaskade\n```\n\n[brew installation](https://brew.sh/).\n\n#### Install it with `pipx`:\n\n```bash\npipx install kaskade\n```\n\n[pipx installation](https://pipx.pypa.io/stable/installation/).\n\n## Running kaskade\n\n#### Admin view:\n\n```bash\nkaskade admin -b my-kafka:9092\n```\n\n#### Consumer view:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-topic\n```\n\n## Configuration examples\n\n#### Multiple bootstrap servers:\n\n```bash\nkaskade admin -b my-kafka:9092,my-kafka:9093\n```\n\n#### Consume and deserialize:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-json-topic -k json -v json\n```\n\n\u003e Supported deserializers `[bytes, boolean, string, long, integer, double, float, json, avro, protobuf, registry]`\n\n#### Consuming from the beginning:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-topic --from-beginning\n```\n\n#### Schema registry simple connection deserializer:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-avro-topic \\\n        -k registry -v registry \\\n        --registry url=http://my-schema-registry:8081\n```\n\n\u003e For more information about Schema Registry configurations go\n\u003e to: [Confluent Schema Registry client](https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#schemaregistry-client).\n\n#### Apicurio registry:\n\n```bash\nkaskade consumer -b my-kafka:9092 -t my-avro-topic \\\n        -k registry -v registry \\\n        --registry url=http://my-apicurio-registry:8081/apis/ccompat/v7\n```\n\n\u003e For more about apicurio go to: [Apicurio registry](https://github.com/apicurio/apicurio-registry).\n\n#### SSL encryption example:\n\n```bash\nkaskade admin -b my-kafka:9092 -c security.protocol=SSL\n```\n\n\u003e For more information about SSL encryption and SSL authentication go\n\u003e to: [Configure librdkafka client](https://github.com/edenhill/librdkafka/wiki/Using-SSL-with-librdkafka#configure-librdkafka-client).\n\n#### Confluent cloud admin and consumer:\n\n```bash\nkaskade admin -b ${BOOTSTRAP_SERVERS} \\\n        -c security.protocol=SASL_SSL \\\n        -c sasl.mechanism=PLAIN \\\n        -c sasl.username=${CLUSTER_API_KEY} \\\n        -c sasl.password=${CLUSTER_API_SECRET}\n```\n\n```bash\nkaskade consumer -b ${BOOTSTRAP_SERVERS} -t my-avro-topic \\\n        -k string -v registry \\\n        -c security.protocol=SASL_SSL \\\n        -c sasl.mechanism=PLAIN \\\n        -c sasl.username=${CLUSTER_API_KEY} \\\n        -c sasl.password=${CLUSTER_API_SECRET} \\\n        --registry url=${SCHEMA_REGISTRY_URL} \\\n        --registry basic.auth.user.info=${SR_API_KEY}:${SR_API_SECRET}\n```\n\n\u003e More about confluent cloud configuration\n\u003e at: [Kafka client quick start for Confluent Cloud](https://docs.confluent.io/cloud/current/client-apps/config-client.html).\n\n#### Running with docker:\n\n```bash\ndocker run --rm -it --network my-networtk sauljabin/kaskade:latest \\\n    admin -b my-kafka:9092\n```\n\n```bash\ndocker run --rm -it --network my-networtk sauljabin/kaskade:latest \\\n    consumer -b my-kafka:9092 -t my-topic\n```\n\n#### Avro consumer:\n\nConsume using `my-schema.avsc` file:\n\n```bash\nkaskade consumer -b my-kafka:9092 --from-beginning \\\n        -k string -v avro \\\n        -t my-avro-topic \\\n        --avro value=my-schema.avsc\n```\n\n#### Protobuf consumer:\n\nInstall `protoc` command:\n\n```bash\nbrew install protobuf\n```\n\nGenerate a _Descriptor Set_ file from your `.proto` file:\n\n```bash\nprotoc --include_imports \\\n       --descriptor_set_out=my-descriptor.desc \\\n       --proto_path=${PROTO_PATH} \\\n       ${PROTO_PATH}/my-proto.proto\n```\n\nConsume using `my-descriptor.desc` file:\n\n```bash\nkaskade consumer -b my-kafka:9092 --from-beginning \\\n        -k string -v protobuf \\\n        -t my-protobuf-topic \\\n        --protobuf descriptor=my-descriptor.desc \\\n        --protobuf value=mypackage.MyMessage\n```\n\n\u003e More about protobuf and `FileDescriptorSet` at: [Protocol Buffers documentation](https://protobuf.dev/programming-guides/techniques/#self-description).\n\n## Questions\n\nFor Q\u0026A go to [GitHub Discussions](https://github.com/sauljabin/kaskade/discussions/categories/q-a).\n\n## Development\n\nFor development instructions see [DEVELOPMENT.md](https://github.com/sauljabin/kaskade/blob/main/DEVELOPMENT.md).\n","funding_links":["https://github.com/sponsors/sauljabin"],"categories":["Table of Contents","Python","\u003ca name=\"monitor\"\u003e\u003c/a\u003eSystem monitoring","\u003ca name=\"Python\"\u003e\u003c/a\u003ePython"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauljabin%2Fkaskade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsauljabin%2Fkaskade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauljabin%2Fkaskade/lists"}