{"id":41922877,"url":"https://github.com/pfrederiksen/blast-radius","last_synced_at":"2026-01-25T17:04:25.264Z","repository":{"id":332633733,"uuid":"1134447378","full_name":"pfrederiksen/blast-radius","owner":"pfrederiksen","description":"Local-first AWS dependency graph CLI to understand blast radius before changes","archived":false,"fork":false,"pushed_at":"2026-01-14T22:48:33.000Z","size":70,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-14T22:54:30.506Z","etag":null,"topics":["aws","aws-sdk-go-v2","cli","cloudops","devops","golang","observability","sre"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/pfrederiksen.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-14T18:23:46.000Z","updated_at":"2026-01-14T22:43:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pfrederiksen/blast-radius","commit_stats":null,"previous_names":["pfrederiksen/blast-radius"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/pfrederiksen/blast-radius","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfrederiksen%2Fblast-radius","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfrederiksen%2Fblast-radius/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfrederiksen%2Fblast-radius/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfrederiksen%2Fblast-radius/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pfrederiksen","download_url":"https://codeload.github.com/pfrederiksen/blast-radius/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfrederiksen%2Fblast-radius/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T16:32:25.380Z","status":"ssl_error","status_checked_at":"2026-01-25T16:32:09.189Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["aws","aws-sdk-go-v2","cli","cloudops","devops","golang","observability","sre"],"created_at":"2026-01-25T17:04:24.704Z","updated_at":"2026-01-25T17:04:25.255Z","avatar_url":"https://github.com/pfrederiksen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blast-radius\n\n[![CI](https://github.com/pfrederiksen/blast-radius/actions/workflows/pr.yml/badge.svg)](https://github.com/pfrederiksen/blast-radius/actions/workflows/pr.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/pfrederiksen/blast-radius)](https://goreportcard.com/report/github.com/pfrederiksen/blast-radius)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nLocal-first AWS dependency graph CLI to understand blast radius before changes.\n\n## Overview\n\n`blast-radius` is a command-line tool that, given an AWS resource identifier (ARN, ID, or name), discovers related dependencies and produces a dependency graph. This helps operators answer the critical question: **\"What will break if I touch this?\"**\n\n## Features\n\n- **Local-first**: No backend required, uses your existing AWS credentials\n- **Multi-resource support**: ALB/NLB, ECS services, Lambda functions, RDS instances/clusters, and more\n- **Flexible output formats**: Human-friendly tree view (default), Graphviz DOT, or JSON\n- **Permission-resilient**: Missing permissions won't crash the tool; they're annotated and discovery continues\n- **Depth control**: Configure how deep to traverse the dependency graph\n- **AWS SSO friendly**: Uses the default AWS credential chain\n\n## Installation\n\n### Homebrew (macOS/Linux)\n\n```bash\nbrew install pfrederiksen/tap/blast-radius\n```\n\n### Go Install\n\n```bash\ngo install github.com/pfrederiksen/blast-radius@latest\n```\n\n### Binary Download\n\nDownload the latest release from the [releases page](https://github.com/pfrederiksen/blast-radius/releases).\n\n## Quick Start\n\n```bash\n# Analyze an ALB by ARN\nblast-radius arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/1234567890abcdef\n\n# Analyze an ECS service\nblast-radius arn:aws:ecs:us-east-1:123456789012:service/my-cluster/my-service\n\n# Use a specific AWS profile and region\nblast-radius my-load-balancer --profile prod --region us-west-2\n\n# Output as Graphviz DOT for visualization\nblast-radius arn:aws:lambda:us-east-1:123456789012:function:my-function --format dot\n\n# Control traversal depth\nblast-radius my-rds-instance --depth 3\n\n# Enable debug logging\nblast-radius my-resource --debug\n```\n\n## Usage\n\n```\nUsage:\n  blast-radius [resource-identifier] [flags]\n\nFlags:\n      --depth int          Maximum traversal depth (default: 2)\n      --format string      Output format: tree, dot, json (default: \"tree\")\n      --profile string     AWS profile to use\n      --region string      AWS region (default: from config/environment)\n      --max-nodes int      Maximum nodes to discover (default: 250)\n      --debug              Enable debug logging\n  -h, --help              help for blast-radius\n```\n\n## Supported Resources\n\n### Application/Network Load Balancers (ALB/NLB) ✅\n**Status: Fully implemented**\n- Listeners and listener rules\n- Target groups and registered targets (EC2 instances, IP targets, Lambda functions)\n- Security groups and VPC/subnets\n- Upstream Route 53 alias records (discovers DNS records pointing to the load balancer)\n- Target health status\n\n**Resolution methods:**\n- By ARN: `arn:aws:elasticloadbalancing:region:account:loadbalancer/app/name/id`\n- By name: `my-load-balancer`\n\n### ECS Services ✅\n**Status: Fully implemented**\n- Task definitions with container information\n- Load balancers and target groups (bidirectional discovery with ALB)\n- IAM roles (task role, execution role)\n- Security groups and VPC/subnets (from awsvpc network mode)\n- Application Auto Scaling policies (target tracking, step scaling)\n- Cluster membership\n\n**Resolution methods:**\n- By ARN: `arn:aws:ecs:region:account:service/cluster-name/service-name`\n- By cluster/service: `cluster-name/service-name`\n\n### Lambda Functions ✅\n**Status: Fully implemented**\n- IAM execution role\n- Event source mappings (SQS, DynamoDB streams, Kinesis streams, Kafka)\n- Event source mapping destinations (OnFailure)\n- Function event invoke config destinations (OnSuccess, OnFailure)\n- Dead letter queue configuration\n- VPC configuration (security groups, subnets)\n- Function metadata (runtime, handler, memory, timeout, layers)\n\n**Resolution methods:**\n- By ARN: `arn:aws:lambda:region:account:function:function-name`\n- By name: `function-name`\n\n### RDS Instances/Clusters ✅\n**Status: Fully implemented**\n- DB instances and Aurora clusters\n- Subnet groups and VPC with individual subnets\n- Security groups with status\n- Parameter groups (instance and cluster-level)\n- Cluster membership (instances in clusters, and vice versa)\n- Complete instance and cluster metadata (engine, version, storage, multi-AZ, endpoints)\n- Heuristic-based upstream discovery (experimental, with `--heuristics rds-endpoint`)\n\n**Resolution methods:**\n- Instance by identifier: `my-database-instance`\n- Cluster by identifier: `my-aurora-cluster`\n- By ARN: `arn:aws:rds:region:account:db:instance-name`\n- By ARN: `arn:aws:rds:region:account:cluster:cluster-name`\n\n## Architecture\n\n`blast-radius` uses a breadth-first traversal algorithm to discover dependencies:\n\n1. **Resource Identification**: Parses input (ARN or name) and determines resource type\n2. **Graph Building**: Uses AWS SDK v2 to query related resources\n3. **BFS Traversal**: Expands outward from the starting resource up to specified depth\n4. **Output Formatting**: Renders the dependency graph in the requested format\n\nEach node in the graph contains:\n- ID, type, ARN, name\n- Region and account\n- Tags and metadata\n\nEach edge contains:\n- Source and target nodes\n- Relationship type\n- Evidence (API call and key fields)\n\n### Discovery Implementation\n\n**ALB/NLB Discovery:**\n- Resolves load balancers by name or ARN\n- Discovers listeners via `DescribeListeners` (with pagination)\n- Discovers listener rules via `DescribeRules` (with pagination)\n- Discovers target groups via `DescribeTargetGroups`\n- Discovers target health and registered targets via `DescribeTargetHealth`\n- Maps targets to EC2 instances, IP addresses, or Lambda functions based on target type\n- Discovers security groups and subnets from load balancer configuration\n- Discovers upstream Route 53 alias records by:\n  - Listing all hosted zones via `ListHostedZones`\n  - Searching each zone for alias records via `ListResourceRecordSets`\n  - Matching alias target DNS names to load balancer DNS names\n\n**Permission Requirements:**\n- `elasticloadbalancing:DescribeLoadBalancers`\n- `elasticloadbalancing:DescribeListeners`\n- `elasticloadbalancing:DescribeRules`\n- `elasticloadbalancing:DescribeTargetGroups`\n- `elasticloadbalancing:DescribeTargetHealth`\n- `route53:ListHostedZones`\n- `route53:ListResourceRecordSets`\n\n**ECS Service Discovery:**\n- Resolves services by ARN or cluster/service name via `DescribeServices`\n- Discovers task definitions via `DescribeTaskDefinition`\n- Extracts container definitions with CPU/memory allocation\n- Discovers IAM roles (task role and execution role) from task definition\n- Discovers security groups and subnets from awsvpc network configuration\n- Links to target groups (bidirectional discovery with ALB)\n- Discovers Application Auto Scaling policies via:\n  - `DescribeScalableTargets` to find auto-scaling configuration\n  - `DescribeScalingPolicies` to get scaling policies (target tracking, step scaling)\n- Discovers cluster membership\n\n**Permission Requirements:**\n- `ecs:DescribeServices`\n- `ecs:DescribeTaskDefinition`\n- `application-autoscaling:DescribeScalableTargets`\n- `application-autoscaling:DescribeScalingPolicies`\n\n**Lambda Function Discovery:**\n- Resolves functions by name or ARN via `GetFunction`\n- Discovers IAM execution role from function configuration\n- Discovers VPC configuration (security groups and subnets) if configured\n- Discovers dead letter queue (DLQ) from function configuration\n- Discovers event source mappings via `ListEventSourceMappings` (with pagination):\n  - Identifies source type from ARN (SQS, DynamoDB, Kinesis, Kafka)\n  - Tracks mapping state and batch size\n  - Discovers OnFailure destinations for event source mappings\n- Discovers function event invoke config destinations via `GetFunctionEventInvokeConfig`:\n  - OnSuccess destinations (SNS, SQS, Lambda, EventBridge)\n  - OnFailure destinations (SNS, SQS, Lambda, EventBridge)\n- Extracts function metadata: runtime, handler, memory, timeout, code size, layers\n\n**Permission Requirements:**\n- `lambda:GetFunction`\n- `lambda:ListEventSourceMappings`\n- `lambda:GetFunctionEventInvokeConfig`\n\n**RDS Instance/Cluster Discovery:**\n- Resolves instances by identifier or ARN via `DescribeDBInstances`\n- Resolves clusters by identifier or ARN via `DescribeDBClusters`\n- Discovers subnet groups and individual subnets from DB configuration\n- Discovers security groups with status from VPC configuration\n- Discovers parameter groups (instance and cluster-level) with apply status\n- Discovers cluster membership:\n  - For instances: identifies parent cluster if instance is part of Aurora cluster\n  - For clusters: lists all member instances with writer/reader role\n- Extracts complete metadata: engine, version, storage, multi-AZ, endpoints (including reader endpoint for clusters)\n- Heuristic-based upstream discovery (experimental):\n  - When `--heuristics rds-endpoint` flag is enabled\n  - Attempts to find Lambda functions and ECS services that connect to RDS endpoint\n  - Marks connections with `Heuristic: true` in evidence\n\n**Permission Requirements:**\n- `rds:DescribeDBInstances`\n- `rds:DescribeDBClusters`\n\nMissing permissions will be logged as warnings and discovery will continue with available data.\n\n## Examples\n\n### Real-World Scenarios\n\n#### 1. Understanding Load Balancer Impact\n\nBefore making changes to a load balancer, understand its full dependency graph:\n\n```bash\n# Analyze by ALB name\nblast-radius my-production-alb\n\n# Analyze by ARN with increased depth\nblast-radius arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/abc123 --depth 3\n\n# Output as visualization\nblast-radius my-production-alb --format dot | dot -Tpng -o alb-dependencies.png\n```\n\n**Example output:**\n```\n[Level 0] Root\n└─ LoadBalancer: my-production-alb (arn:aws:elasticloadbalancing:...)\n   Tags: Environment=production, Team=platform\n\n[Level 1] Direct Dependencies\n├─ Listener: HTTPS:443 (arn:aws:elasticloadbalancing:...)\n│  DefaultAction: forward\n├─ Listener: HTTP:80 (arn:aws:elasticloadbalancing:...)\n│  DefaultAction: redirect to HTTPS\n├─ SecurityGroup: alb-sg (sg-abc123)\n└─ Route53Record: api.example.com (A ALIAS)\n\n[Level 2] Transitive Dependencies\n├─ TargetGroup: api-tg-blue\n│  ├─ ECSService: prod-cluster/api-service\n│  ├─ Instance: i-0a1b2c3d (healthy, t3.large)\n│  └─ Instance: i-4e5f6g7h (healthy, t3.large)\n└─ TargetGroup: api-tg-green\n   └─ ECSService: prod-cluster/api-service-canary\n```\n\n#### 2. ECS Service Dependency Analysis\n\nUnderstanding what an ECS service depends on before scaling or updating:\n\n```bash\n# Analyze ECS service\nblast-radius prod-cluster/api-service\n\n# Use specific region and profile\nblast-radius prod-cluster/api-service --region us-west-2 --profile production\n```\n\n**Example output:**\n```\n[Level 0] Root\n└─ ECSService: prod-cluster/api-service\n   DesiredCount: 4, RunningCount: 4\n\n[Level 1] Direct Dependencies\n├─ ECSTaskDefinition: api-service:42\n│  CPU: 512, Memory: 1024\n│  Containers: api-app, datadog-agent\n├─ IAMRole: ecs-task-execution-role\n├─ IAMRole: api-service-task-role\n├─ TargetGroup: api-tg-blue (arn:aws:elasticloadbalancing:...)\n├─ SecurityGroup: ecs-service-sg (sg-xyz789)\n├─ Subnet: subnet-1a2b3c4d (us-east-1a)\n├─ Subnet: subnet-5e6f7g8h (us-east-1b)\n└─ ScalingPolicy: target-tracking-cpu\n\n[Level 2] Transitive Dependencies\n└─ LoadBalancer: my-production-alb\n   └─ Route53Record: api.example.com\n```\n\n#### 3. Lambda Function Analysis\n\nDiscover what triggers a Lambda function and what it connects to:\n\n```bash\n# Analyze Lambda function\nblast-radius my-data-processor\n\n# Find all dependencies including event sources\nblast-radius arn:aws:lambda:us-east-1:123456789012:function:my-data-processor --depth 2\n```\n\n**Example output:**\n```\n[Level 0] Root\n└─ Lambda: my-data-processor\n   Runtime: python3.11, Memory: 512MB, Timeout: 30s\n\n[Level 1] Direct Dependencies\n├─ IAMRole: lambda-execution-role\n├─ SQSQueue: data-ingestion-queue\n│  Trigger: EventSourceMapping (BatchSize: 10)\n├─ EventDestination: dead-letter-queue (OnFailure)\n├─ SecurityGroup: lambda-sg (sg-def456)\n└─ Subnet: subnet-9i0j1k2l (us-east-1a)\n\n[Level 2] Transitive Dependencies\n└─ VPC: vpc-main\n```\n\n#### 4. RDS Database Impact Assessment\n\nBefore migrating or modifying a database, see what depends on it:\n\n```bash\n# Analyze RDS instance\nblast-radius my-production-db\n\n# Analyze Aurora cluster\nblast-radius my-aurora-cluster --heuristics rds-endpoint\n```\n\n**Example output:**\n```\n[Level 0] Root\n└─ RDSInstance: my-production-db\n   Engine: postgres 14.7, Class: db.r5.xlarge\n   MultiAZ: true, Endpoint: my-production-db.abc.us-east-1.rds.amazonaws.com\n\n[Level 1] Direct Dependencies\n├─ DBSubnetGroup: prod-db-subnet-group\n│  ├─ Subnet: subnet-db-1a (us-east-1a)\n│  ├─ Subnet: subnet-db-1b (us-east-1b)\n│  └─ Subnet: subnet-db-1c (us-east-1c)\n├─ SecurityGroup: rds-sg (sg-rds123)\n│  Status: active\n├─ DBParameterGroup: postgres14-custom\n│  Status: in-sync\n└─ RDSCluster: my-aurora-cluster\n   (if instance is part of a cluster)\n```\n\n#### 5. Analyzing Aurora Clusters\n\n```bash\n# Discover all instances in a cluster\nblast-radius my-aurora-cluster --depth 2\n```\n\n**Example output:**\n```\n[Level 0] Root\n└─ RDSCluster: my-aurora-cluster\n   Engine: aurora-postgresql 14.7\n   Endpoint: cluster-endpoint.us-east-1.rds.amazonaws.com\n   ReaderEndpoint: cluster-ro-endpoint.us-east-1.rds.amazonaws.com\n\n[Level 1] Direct Dependencies\n├─ RDSInstance: my-aurora-cluster-instance-1\n│  IsClusterWriter: true, Class: db.r5.large\n├─ RDSInstance: my-aurora-cluster-instance-2\n│  IsClusterWriter: false, Class: db.r5.large\n├─ RDSInstance: my-aurora-cluster-instance-3\n│  IsClusterWriter: false, Class: db.r5.large\n├─ DBSubnetGroup: aurora-subnet-group\n├─ SecurityGroup: aurora-sg (sg-aurora123)\n└─ DBClusterParameterGroup: aurora-pg14-custom\n```\n\n### Output Formats\n\n#### Tree (Default) - Human-Friendly\n\n```bash\nblast-radius my-resource\n```\n\nBest for: Quick analysis, terminal output, understanding dependency hierarchy\n\n#### DOT - Graphviz Visualization\n\n```bash\n# Generate PNG\nblast-radius my-alb --format dot | dot -Tpng -o graph.png\n\n# Generate SVG (better for large graphs)\nblast-radius my-alb --format dot | dot -Tsvg -o graph.svg\n\n# Generate PDF\nblast-radius my-alb --format dot | dot -Tpdf -o graph.pdf\n```\n\nBest for: Documentation, presentations, visual analysis\n\n#### JSON - Machine-Readable\n\n```bash\n# Full graph as JSON\nblast-radius my-resource --format json\n\n# Filter specific resource types\nblast-radius my-alb --format json | jq '.nodes[] | select(.type == \"ECSService\")'\n\n# Extract all security groups\nblast-radius my-resource --format json | jq '.nodes[] | select(.type == \"SecurityGroup\") | .name'\n\n# Find all resources in a specific region\nblast-radius my-resource --format json | jq '.nodes[] | select(.region == \"us-east-1\")'\n\n# Count dependencies by type\nblast-radius my-resource --format json | jq '.nodes | group_by(.type) | map({type: .[0].type, count: length})'\n```\n\nBest for: Automation, CI/CD integration, custom processing\n\n### Common Workflows\n\n#### Pre-Deployment Safety Check\n\n```bash\n#!/bin/bash\n# Check if critical resources will be affected by changes\n\nRESOURCE=$1\nMAX_NODES=100\n\necho \"Analyzing blast radius for: $RESOURCE\"\nblast-radius \"$RESOURCE\" --max-nodes $MAX_NODES --format json \u003e blast-radius.json\n\n# Check if any production resources are affected\nPROD_COUNT=$(jq '.nodes[] | select(.tags.Environment == \"production\") | .id' blast-radius.json | wc -l)\n\nif [ \"$PROD_COUNT\" -gt 0 ]; then\n    echo \"WARNING: $PROD_COUNT production resources will be affected!\"\n    echo \"Manual approval required.\"\n    exit 1\nfi\n```\n\n#### Document Infrastructure Dependencies\n\n```bash\n#!/bin/bash\n# Generate documentation for all critical services\n\nSERVICES=(\"my-alb\" \"api-service\" \"data-processor\" \"production-db\")\n\nfor service in \"${SERVICES[@]}\"; do\n    echo \"Documenting: $service\"\n    blast-radius \"$service\" --format dot | dot -Tpng -o \"docs/${service}-dependencies.png\"\n    blast-radius \"$service\" \u003e \"docs/${service}-dependencies.txt\"\ndone\n```\n\n#### Multi-Region Analysis\n\n```bash\n#!/bin/bash\n# Analyze the same resource across multiple regions\n\nRESOURCE=\"my-service\"\nREGIONS=(\"us-east-1\" \"us-west-2\" \"eu-west-1\")\n\nfor region in \"${REGIONS[@]}\"; do\n    echo \"=== $region ===\"\n    blast-radius \"$RESOURCE\" --region \"$region\" --profile prod\n    echo \"\"\ndone\n```\n\n## Development\n\n### Prerequisites\n\n- Go 1.22+\n- AWS credentials configured\n\n### Build\n\n```bash\ngo build -o blast-radius\n```\n\n### Test\n\n```bash\ngo test ./...\n```\n\n### Lint\n\n```bash\ngolangci-lint run\n```\n\n### Test Coverage\n\n```bash\ngo test ./... -coverprofile=coverage.out\ngo tool cover -html=coverage.out\n```\n\n### CI/CD\n\nThe project uses GitHub Actions for:\n- **PR Checks**: Automated testing, linting, and build verification on every pull request\n- **Releases**: Automated binary builds for multiple platforms and Homebrew tap updates on version tags\n\nTo create a release:\n```bash\ngit tag -a v0.1.0 -m \"Release v0.1.0\"\ngit push origin v0.1.0\n```\n\n## Contributing\n\nContributions welcome! Please open an issue or submit a pull request.\n\n## License\n\nApache-2.0. See [LICENSE](LICENSE) for details.\n\n## Acknowledgments\n\nBuilt with:\n- [AWS SDK for Go v2](https://github.com/aws/aws-sdk-go-v2)\n- [Cobra](https://github.com/spf13/cobra)\n- [Viper](https://github.com/spf13/viper)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfrederiksen%2Fblast-radius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpfrederiksen%2Fblast-radius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfrederiksen%2Fblast-radius/lists"}