{"id":48833639,"url":"https://github.com/eunomiaupm/ds-agent","last_synced_at":"2026-04-14T22:03:10.425Z","repository":{"id":302806493,"uuid":"810458689","full_name":"EunomiaUPM/ds-agent","owner":"EunomiaUPM","description":"UPM Dataspace Agent","archived":false,"fork":false,"pushed_at":"2026-04-09T08:56:14.000Z","size":18683,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-09T10:27:58.400Z","etag":null,"topics":["data-space-connector","dataspaces","governance"],"latest_commit_sha":null,"homepage":"https://eunomiaupm.github.io/ds-agent/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EunomiaUPM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2024-06-04T18:30:52.000Z","updated_at":"2026-03-20T17:38:51.000Z","dependencies_parsed_at":"2025-08-24T07:15:26.733Z","dependency_job_id":"afef2fb6-3991-4920-a468-854c753d9a37","html_url":"https://github.com/EunomiaUPM/ds-agent","commit_stats":null,"previous_names":["eunomiaupm/rainbow","eunomiaupm/ds-agent"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/EunomiaUPM/ds-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EunomiaUPM%2Fds-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EunomiaUPM%2Fds-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EunomiaUPM%2Fds-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EunomiaUPM%2Fds-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EunomiaUPM","download_url":"https://codeload.github.com/EunomiaUPM/ds-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EunomiaUPM%2Fds-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31817130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"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":["data-space-connector","dataspaces","governance"],"created_at":"2026-04-14T22:03:09.533Z","updated_at":"2026-04-14T22:03:10.358Z","avatar_url":"https://github.com/EunomiaUPM.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rainbow 🌈🌈\u003cbr\u003eDataspace Protocol Agent\n\n![Rainbow front](docs_old/static/img/rainbow.png)\n\n## What is Rainbow\n\nRainbow is a **Dataspace Agent** implementation. \n\nThis implementation has been made by the **GING** (Next Generation Internet Group) research group, part of the DIT (Department of Telematics Engineering) at the Universidad Politécnica de Madrid.\n\n### Key Concepts\n\nRainbow is designed with a **multi-protocol orientation** and a **dynamic stack architecture**, enabling flexible integration across different dataspace ecosystems. It provides a complete end-to-end solution covering:\n\n- 🔐 **SSI Authentication** — Self-Sovereign Identity based authentication using verifiable credentials and decentralized identifiers\n- 📚 **Catalog Management** — DCAT3-compatible catalog system for dataset and data service discovery\n- 🔗 **Datahub Proxy** — Integration layer for external data hubs and repositories\n- 📝 **Contract Negotiation** — Full implementation of the Dataspace Protocol's contract negotiation flow\n- 🚀 **Data Transfer** — Control plane and data plane for secure, policy-compliant data transfers\n\n### What are Dataspaces?\n\nDataspaces are services that allow the sharing of data, or the subscription to data services between entities in an interoperable way and with a decentralized identity. Data spaces need different building blocks for their development, ranging from self-sovereign identity systems, through transfer negotiation protocols, contracts, catalogs, through policy enforcement systems. All this in order to generate the digital trust and security necessary for data sharing and to generate value and a real data economy.\n\nFor more information, we recommend reading the [Technical Convergence of Dataspaces](https://data-spaces-business-alliance.eu/wp-content/uploads/dlm_uploads/Data-Spaces-Business-Alliance-Technical-Convergence-V2.pdf).\n\n### Feature Highlights\n\n- **Rust Native** — Written in Rust from scratch, asynchronously based on Tokio runtime\n- **HTTP APIs** — Built with Axum, SeaORM, and PostgreSQL\n- **gRPC Support** — Protocol buffer definitions for inter-service communication\n- **OpenAPI Integration** — Automatic API documentation with Utoipa-axum\n- **Elegant Error Handling** — Using thiserror and anyhow for robust error management\n- **Low Footprint** — Blazingly fast with minimal memory consumption\n\n---\n\n## Crate Organization\n\nRainbow is organized as a Rust workspace with multiple specialized crates:\n\n### Core Crates\n\n| Crate | Description |\n|-------|-------------|\n| **rainbow-core** | Main binary that orchestrates and runs the entire agent |\n| **rainbow-common** | Shared library with common functionality, types, and utilities |\n| **rainbow-db** | Database layer with SeaORM entities, migrations, and repositories |\n| **rainbow-events** | Event system for inter-module communication |\n\n### Protocol Crates\n\n| Crate | Description |\n|-------|-------------|\n| **rainbow-catalog** | DCAT3-compatible catalog system implementing the Catalog Protocol |\n| **rainbow-contracts** | Contract negotiation protocol implementation (ODRL policies) |\n| **rainbow-transfer** | Transfer Process Protocol implementation for control plane |\n| **rainbow-transfer-agent** | Agent layer for transfer orchestration with gRPC support |\n| **rainbow-dataplane** | Data plane implementations (HTTP, NGSI-LD, future: DeltaSharing, Arrow Flight) |\n\n### Gateway \u0026 Integration Crates\n\n| Crate | Description |\n|-------|-------------|\n| **rainbow-auth** | SSI-based authentication layer with wallet and credential management |\n| **rainbow-authority** | Authority services for trust and credential verification |\n| **rainbow-fe-gateway** | Frontend gateway for UI integration |\n| **rainbow-business-gateway** | Business logic gateway for external integrations |\n| **rainbow-datahub-catalog** | Proxy layer for external datahub catalog synchronization |\n\n---\n\n## Getting Started\n\n### Requirements\n\n- **Docker** and **docker-compose** (or Docker Desktop)\n- Permissions to execute scripts (`chmod +x`)\n\n### External Dependencies\n\nThis project depends on [walt.id](https://walt.id) for the SSI authentication layer. You must download and deploy the walt.id identity services:\n\n```bash\n# Clone the walt.id identity repository\ngit clone https://github.com/walt-id/waltid-identity.git \u0026\u0026 cd waltid-identity\n\n# Deploy all services with docker compose\ncd docker-compose \u0026\u0026 docker compose up\n```\n\n### Quick Start\n\n1. **Grant execution permissions** to the scripts (if needed):\n   ```bash\n   chmod +x scripts/bash/*.sh\n   ```\n\n2. **Prepare the environment** (executes initial configurations):\n   ```bash\n   ./scripts/bash/auto-setup.sh\n   ```\n\n3. **Start the services**:\n   ```bash\n   ./scripts/bash/auto-start.sh\n   ```\n\n4. **Run automatic onboarding** to authenticate actors:\n   ```bash\n   ./scripts/bash/auto-onboarding.sh\n   ```\n\n5. **Stop the services** when done:\n   ```bash\n   ./scripts/bash/auto-stop.sh\n   ```\n\n### Docker (Standalone)\n\nYou can also run Rainbow directly with Docker:\n\n```bash\n# Pull the image\ndocker pull caparicioesd/rainbow\n\n# Start a provider instance\ndocker run caparicioesd/rainbow:latest provider start\n\n# View available options\ndocker run caparicioesd/rainbow:latest provider -h\n```\n\n### Docker Compose\n\nFor more automated deployments, see `/deployment/docker-compose.testing.yaml` for a complete example with databases and migrations.\n\n---\n\n## Testing the Complete Flow\n\nA Jupyter notebook is available to test the complete dataspace workflow interactively.\n\n### Setup\n\n```bash\n# Create and activate virtual environment\npython -m venv .venv\nsource ./.venv/bin/activate\n\n# Install dependencies\npip install -r requirements.txt\n```\n\n### Workflow Overview\n\nThe notebook covers the following flow:\n\n1. **Wallet Setup** — Initialize SSI wallets for participants\n2. **Participant Onboarding** — Register provider and consumer identities\n3. **Catalog Management** — Create catalogs, datasets, data-services, and distributions\n4. **Policy Definition** — Define access policies for datasets\n5. **Contract Negotiation** — Complete negotiation flow:\n   - Request → Offer → Request → Offer → Acceptance → Agreement → Verification → Finalization\n6. **Transfer Negotiation** — Data transfer flow:\n   - Request → Start → Data access via dataplane\n   - Suspension/Resumption → Completion\n\n### API Endpoints Overview\n\n| Category | Endpoints |\n|----------|-----------|\n| **Mates** | `/api/v1/mates/myself`, `/api/v1/mates/all` |\n| **Catalogs** | `/api/v1/catalogs`, `/api/v1/catalogs/{id}/datasets`, `/api/v1/catalogs/{id}/data-services` |\n| **Policies** | `/api/v1/datasets/{id}/policies` |\n| **Negotiations** | `/api/v1/negotiations/rpc/setup-*` (request, offer, acceptance, agreement, verification, finalization) |\n| **Transfers** | `/api/v1/transfers/rpc/setup-*` (request, start, suspension, completion) |\n| **Dataplane** | `/api/v1/dataplane/{transfer_id}` |\n\n---\n\n## Architecture\n\n![arquitectura.png](docs_old/static/img/arquitectura.png)\n\n- **Client** — Any client (machine or human) connecting to a consumer to access the dataspace via the high-level Consumer API\n- **Consumer ↔ Provider** — Communication via the low-level API, an improved implementation of the Dataspace Protocol\n- **Final System** — The backend environment where the provider's data is exposed\n\n---\n\n## Development and Contribution\n\n1. Create a branch for your change:\n   ```bash\n   git checkout -b feature/my-change\n   ```\n\n2. Make clear and descriptive commits\n\n3. Open a pull request against `main`\n\n---\n\n## License\n\nSee [LICENSE.md](./LICENSE.md) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feunomiaupm%2Fds-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feunomiaupm%2Fds-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feunomiaupm%2Fds-agent/lists"}