{"id":21121503,"url":"https://github.com/cadence-workflow/cadence-web","last_synced_at":"2025-05-15T16:05:58.471Z","repository":{"id":37385105,"uuid":"112797868","full_name":"cadence-workflow/cadence-web","owner":"cadence-workflow","description":"Web UI for visualizing workflows on Cadence","archived":false,"fork":false,"pushed_at":"2025-05-15T13:13:45.000Z","size":12284,"stargazers_count":409,"open_issues_count":25,"forks_count":112,"subscribers_count":916,"default_branch":"master","last_synced_at":"2025-05-15T13:30:12.737Z","etag":null,"topics":["cadence","mocha","stylus","uber","vuejs2","webpack","workflows"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cadence-workflow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"zenodo":null}},"created_at":"2017-12-01T23:50:17.000Z","updated_at":"2025-05-15T13:13:50.000Z","dependencies_parsed_at":"2023-01-24T14:00:25.994Z","dependency_job_id":"632ff17f-8c28-41a4-beeb-b7907a4f42d4","html_url":"https://github.com/cadence-workflow/cadence-web","commit_stats":{"total_commits":472,"total_committers":20,"mean_commits":23.6,"dds":"0.48305084745762716","last_synced_commit":"a2e4282ef631b88ebccdd38bcb5c5795522d0363"},"previous_names":["cadence-workflow/cadence-web","uber/cadence-web"],"tags_count":119,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadence-workflow%2Fcadence-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadence-workflow%2Fcadence-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadence-workflow%2Fcadence-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadence-workflow%2Fcadence-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cadence-workflow","download_url":"https://codeload.github.com/cadence-workflow/cadence-web/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374461,"owners_count":22060611,"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":["cadence","mocha","stylus","uber","vuejs2","webpack","workflows"],"created_at":"2024-11-20T03:50:56.448Z","updated_at":"2025-05-15T16:05:58.459Z","avatar_url":"https://github.com/cadence-workflow.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Cadence Web UI\n\n[![Build Status](https://github.com/uber/cadence-web/actions/workflows/build.yml/badge.svg)](https://github.com/uber/cadence-web/actions/workflows/build.yml) [![Docker Status](https://github.com/uber/cadence-web/actions/workflows/docker_publish.yml/badge.svg)](https://hub.docker.com/r/ubercadence/web/tags)\n\nCadence is a distributed, scalable, durable, and highly available orchestration engine we developed at Uber Engineering to execute asynchronous long-running business logic in a scalable and resilient way.\n\nThis web UI is used to view workflows from [Cadence][cadence], see what's running, and explore and debug workflow executions.\n\n## Getting Started\n\n### Configuration\n\nSet these environment variables if you need to change their defaults\n\n| Variable                     | Description                                                                   | Default          |\n| ---------------------------- | ----------------------------------------------------------------------------- | ---------------- |\n| CADENCE_GRPC_PEERS           | Comma-delimited list of gRPC peers                                            | 127.0.0.1:7833   |\n| CADENCE_GRPC_SERVICES_NAMES  | Comma-delimited list of gRPC services to call                                 | cadence-frontend |\n| CADENCE_CLUSTERS_NAMES       | Comma-delimited list of cluster names                                         | cluster0         |\n| CADENCE_WEB_PORT             | HTTP port to serve on                                                         | 8088             |\n| CADENCE_WEB_HOSTNAME         | Host name to serve on                                                         | 0.0.0.0          |\n| CADENCE_ADMIN_SECURITY_TOKEN | Admin token for accessing admin methods                                       | ''               |\n| CADENCE_GRPC_TLS_CA_FILE     | Path to root CA certificate file for enabling one-way TLS on gRPC connections | ''               |\n\nNote: To connect `cadence-web` to multiple clusters, you will need to add comma-delimted entries for `CADENCE_GRPC_PEERS`, `CADENCE_GRPC_SERVICES_NAMES` \u0026 `CADENCE_CLUSTERS_NAMES` for each cluster (each cluster values are grouped by their index within the Comma-delimited lists).\n\nExample:\n\n```\nCADENCE_GRPC_PEERS=127.0.0.1:3000,127.0.0.1:5000 \nCADENCE_GRPC_SERVICES_NAMES=cadence-frontend-cluster0,cadence-frontend-cluster1\nCADENCE_CLUSTERS_NAMES=cluster0,cluster1\n```\n\n### Using cadence-web\n\nThe latest version of `cadence-web` is included in the `cadence` composed docker containers in the [main Cadence repository][cadence]. Follow the instructions there to get started.\n\n```\ndocker-compose -f docker/docker-compose.yml up\n```\n\n### Using TLS for gRPC\n\nYou can run cadence-web with secure gRPC TLS communication by passing your CA certificate file to the container and configure the environment variable accordingly.\n\n#### Steps to Pass the Certificate File in Docker\n\n1. **Prepare your CA certificate file:**  \n   Ensure you have the root CA file (e.g., `ca.pem`) accessible on your host machine.\n\n2. **Mount the certificate file into the container:**  \n   Use Docker volume mounting (`-v` or `--volume`) to make the certificate file available inside the container at a known path.\n\n3. **Set the `CADENCE_GRPC_TLS_CA_FILE` environment variable to the mounted certificate path:**  \n\nExample command (for Linux):\n\n```bash\ndocker run -it --rm \\\n  -p 8088:8088  \\\n  -v /path/on/host/ca.pem:/etc/certs/ca.pem:ro \\\n  -e CADENCE_GRPC_TLS_CA_FILE=/etc/certs/ca.pem \\\n  ubercadence/server:master-auto-setup\n```\n\n- Replace `/path/on/host/ca.pem` with the actual location of your CA certificate on the host system.\n- `CADENCE_GRPC_TLS_CA_FILE` must point to the path inside the container where the certificate is mounted.\n\n### Building \u0026 developing cadence-web\n\n`cadence-web` requires node `v18` or greater to be able to run correctly.\n\n#### Creating a production build\n\nTo create a production build, follow these steps:\n\n1. Install npm packages and download idls\n\n```\nnpm install \u0026\u0026 npm run install-idl \u0026\u0026 npm run generate:idl\n```\n\n2. Build the project files\n\n```\nnpm run build\n```\n\n3. After building the code, start the server by running this command from the same directory as the build\n\n```\nnpm start\n```\n\n4. Once the webapp is ready, access it through `localhost:8088` (port can be changed using `CADENCE_WEB_PORT` environment variable)\n\n#### Running development environment\n\nTo run the development server, follow these steps:\n\n1. Install npm packages and download idls\n\n```\nnpm install \u0026\u0026 npm run install-idl \u0026\u0026 npm run generate:idl\n```\n\n2. Run the development server using\n\n```\nnpm run dev\n```\n\n3. Once the webapp is ready, access it through `localhost:8088` (port can be changed using `CADENCE_WEB_PORT` environment variable)\n\nNote: For contribution we recommend using dev containers, check [VSCode Dev Containers](#using-vscode-dev-containers) section for more information\n\n#### Using VSCode Dev Containers\n\n1. Set up the [Remote Containers plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) in VSCode.\n2. Open the cadence-web directory in VSCode.\n3. Make sure to update `CADENCE_GRPC_PEERS` with the correct host. (If you are connecting to a server on a container host machine use `host.docker.internal:7833`, where `7833` is the gRPC port for a running [cadence-frontend](https://github.com/cadence-workflow/cadence/tree/master/service/frontend) service)\n4. Use the Command Palette to select the 'Reopen folder in Container' option\n5. Follow same commands listed in [Running development environment](#running-development-environment) section.\n\n#### Developing cadence-web against cadence composed docker\n\nTo start development against dockerized cadence services, run the following command from the root of the project\n\n```\ndocker-compose -f docker-compose-backend-services.yml up\n```\n\nYou can customize the YAML file or reuse configurations from the [cadence repository](https://github.com/cadence-workflow/cadence/tree/master/docker). (In case of reusing exsisting files: ensure that cadence-web is not included in the composed container services, or just remove it)\n\nAfter running `cadence`, start `cadence-web` for development using one of the previous methods ([Running development environment](#running-development-environment), [VSCode Dev Containers](#using-vscode-dev-containers))\n\n#### NPM scripts\n\n| script            | Description                                                                                     |\n| ----------------- | ----------------------------------------------------------------------------------------------- |\n| build             | Generate a production build                                                                     |\n| start             | Start server for existing production build                                                      |\n| dev               | Run a development server                                                                        |\n| install-idl       | Download idl files required for building/running the project                                    |\n| generate:idl      | Move idl files inside the project and generate typescript types for them                        |\n| test              | Run all test cases. To pass extra jest flags, use environment specific scripts e.g. test:unit:* |\n| test:unit         | Run all unit tests. To pass extra jest flags, use environment specific scripts e.g. test:unit:* |\n| test:unit:browser | Run only browser unit tests                                                                     |\n| test:unit:node    | Run only node unit tests                                                                        |\n| lint              | Run eslint                                                                                      |\n| typecheck         | Run typescript checks                                                                           |\n\n## License\n\nApache 2.0 License, please see [LICENSE](https://github.com/cadence-workflow/cadence-web/blob/master/LICENSE) for details.\n\n[cadence]: https://github.com/cadence-workflow/cadence\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadence-workflow%2Fcadence-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcadence-workflow%2Fcadence-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadence-workflow%2Fcadence-web/lists"}