{"id":26797778,"url":"https://github.com/kameshsampath/grpc-todo-app","last_synced_at":"2025-04-22T22:09:37.123Z","repository":{"id":210727984,"uuid":"727286444","full_name":"kameshsampath/grpc-todo-app","owner":"kameshsampath","description":"A demo to show how to get started with building Data Streaming API using https://grpc.de) and https://redpanda.com, and how to add analytics using https://snowflake.com e.g. a https://streamlit.io dashboard.","archived":false,"fork":false,"pushed_at":"2024-04-20T17:09:10.000Z","size":122,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-22T20:02:57.043Z","etag":null,"topics":["demo-app","grpc-client","grpc-go","grpc-golang","grpc-server-streaming","kafka-connector","protobuf3","redpanda","snowflake"],"latest_commit_sha":null,"homepage":"","language":"Go","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/kameshsampath.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}},"created_at":"2023-12-04T15:04:16.000Z","updated_at":"2024-04-16T02:22:07.000Z","dependencies_parsed_at":"2023-12-08T07:41:33.433Z","dependency_job_id":"5da56387-b8d2-4692-8e2a-f41f32667bfe","html_url":"https://github.com/kameshsampath/grpc-todo-app","commit_stats":null,"previous_names":["kameshsampath/grpc-todo-app"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kameshsampath%2Fgrpc-todo-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kameshsampath%2Fgrpc-todo-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kameshsampath%2Fgrpc-todo-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kameshsampath%2Fgrpc-todo-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kameshsampath","download_url":"https://codeload.github.com/kameshsampath/grpc-todo-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246230519,"owners_count":20744349,"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":["demo-app","grpc-client","grpc-go","grpc-golang","grpc-server-streaming","kafka-connector","protobuf3","redpanda","snowflake"],"created_at":"2025-03-29T19:15:48.149Z","updated_at":"2025-03-29T19:15:48.759Z","avatar_url":"https://github.com/kameshsampath.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Get Started with Data Streaming with gRPC\n\nA demo to show how to get started with building Data Streaming API using [gRPC](https://grpc.dev). We will use [Redpanda](https://redpanda.com) as our streaming platform.\n\n## Prerequisites\n\nTo run the demo you need the following tools on your local machine,\n\n- [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n- [Redpanda CLI](https://docs.redpanda.com/current/get-started/rpk/)\n- [gRPC cURL](https://github.com/fullstorydev/grpcurl)\n\n## Data Streaming Platform Setup\n\nThe entire demo is containerized and all the applications could be started using the Docker compose,\n\n```shell\ndocker compose up -d\n```\n\nThe docker compose starts the following services,\n\n- `redpanda-0` - A single node Redpanda server\n- `console` - The Redpanda console\n- `todo-app-server` - The Todo Application gRPC server\n- `todo-list` - The Todo Application client that receives the streaming messages from the gRPC `todo-app-server`\n\nThe `Todo` application runs with the following environment variables defaults, please change them as needed if you deploy without these defaults.\n\n### Todo gRPC Server\n\n```shell\n# gRPC service port\nPORT=9090\n# Redpanda Brokers\nBROKERS=redpanda-0:9092\n# Topic to store the Todo\nTOPICS=todo-list\n# Running environment, typically used for grpcurl\nENV=dev\n# The consumer group used while consuming messages\nCONSUMER_GROUP_ID=grpc-todo-app\n```\n\n### Todo gRPC Client (Todo List)\n\n```shell\nSERVICE_ADDRESS=todo-app-server:9090\n```\n\n**NOTE**:\n\n\u003e The individual application binaries for Todo App gRPC Server and Todo App Client are available on the [application repo](https://github.com/kameshsampath/grpc-todo-app/releases). You can download them and run the application individually.\n\n## Interact With Todo Service\n\n### List Available Services\n\n```shell\ngrpcurl -plaintext \"localhost:$PORT\" list\n```\n\nShould return an output like,\n\n```text\ngrpc.reflection.v1.ServerReflection\ngrpc.reflection.v1alpha.ServerReflection\ntodo.Todo\n```\n\n### List Service Methods\n\n```shell\ngrpcurl -plaintext \"localhost:$PORT\" list todo.Todo\n```\n\nIt should return the following methods,\n\n```text\ntodo.Todo.AddTodo\ntodo.Todo.TodoList\n```\n\n### View List of Todo\n\nOn a new terminal run the following command to view the list of Todos added by earlier steps,\n\n```shell\ndocker compose logs -f todo-list\n```\n\nThe output should be something like,\n\n```shell\ntodo-list  | 2023-12-05T05:20:19.235Z   INFO    client/main.go:44       Task    {\"Title\": \"Finish gRPC Demo README\", \"Description\": \"Complete the README update of the gRPC Data Streaming Demo App.\", \"Completed\": false, \"Last Updated\": \"Thursday, 01-Jan-70 00:00:00 UTC\", \"Partition\": 0, \"Offset\": 0}\ntodo-list  | 2023-12-05T05:20:19.236Z   INFO    client/main.go:44       Task    {\"Title\": \"Finish gRPC Demo README\", \"Description\": \"Complete the README update of the gRPC Data Streaming Demo App.\", \"Completed\": false, \"Last Updated\": \"Thursday, 01-Jan-70 00:00:00 UTC\", \"Partition\": 0, \"Offset\": 1}\n```\n\n**TIP**:\n\n\u003e You can also use\n\u003e\n\u003e ```shell\n\u003e grpcurl -plaintext \"localhost:$PORT\" todo.Todo/TodoList\n\u003e ```\n\n### Add a TODO\n\n```shell\ngrpcurl -plaintext -d @ \"localhost:$PORT\" todo.Todo/AddTodo \u003c\u003cEOM\n{\n  \"task\": {\n    \"title\": \"Finish gRPC Demo README\",\n    \"description\": \"Complete the README update of the gRPC Data Streaming Demo App.\",\n    \"completed\": false\n  }\n}\nEOM\n```\n\nOnce the task is added the terminal running the client should show an output similar to,\n\n```json\n{\n  \"Title\": \"Finish gRPC Demo README\",\n  \"Description\": \"Complete the README update of the gRPC Data Streaming Demo App.\",\n  \"Completed\": false,\n  \"Last Updated\": \"Thursday, 01-Jan-70 00:00:00 UTC\",\n  \"Partition\": 0,\n  \"Offset\": 1\n}\n```\n\n## References\n\nThe demo uses the [protobuf](https://protobuf.dev) definitions from \u003chttps://github.com/kameshsampath/demo-protos\u003e\n\n## Cleanup\n\n```shell\ndocker compose down\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkameshsampath%2Fgrpc-todo-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkameshsampath%2Fgrpc-todo-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkameshsampath%2Fgrpc-todo-app/lists"}