{"id":48356690,"url":"https://github.com/decentralised-dataexchange/data-space-backend","last_synced_at":"2026-04-05T11:33:28.846Z","repository":{"id":231173500,"uuid":"777094502","full_name":"decentralised-dataexchange/data-space-backend","owner":"decentralised-dataexchange","description":"This repository hosts the source code for the reference implementation of the CRANE dHDSI backend. The backend provides REST APIs for managing agreements, credentials, organisations, services, and B2B connections within the CRANE dHDSI ecosystem.","archived":false,"fork":false,"pushed_at":"2026-03-13T14:33:45.000Z","size":1229,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-14T02:18:19.559Z","etag":null,"topics":[],"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/decentralised-dataexchange.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":"governance/__init__.py","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-03-25T07:29:36.000Z","updated_at":"2026-03-13T14:33:49.000Z","dependencies_parsed_at":"2024-04-02T21:23:53.674Z","dependency_job_id":"62add41d-0478-49a5-9b43-2e7080e0676f","html_url":"https://github.com/decentralised-dataexchange/data-space-backend","commit_stats":null,"previous_names":["decentralised-dataexchange/data-space-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/decentralised-dataexchange/data-space-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fdata-space-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fdata-space-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fdata-space-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fdata-space-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/decentralised-dataexchange","download_url":"https://codeload.github.com/decentralised-dataexchange/data-space-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decentralised-dataexchange%2Fdata-space-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31434624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T08:13:15.228Z","status":"ssl_error","status_checked_at":"2026-04-05T08:13:11.839Z","response_time":75,"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":[],"created_at":"2026-04-05T11:33:28.707Z","updated_at":"2026-04-05T11:33:28.813Z","avatar_url":"https://github.com/decentralised-dataexchange.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    iGrant.io Dataspace Backend\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"/../../commits/\" title=\"Last Commit\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/decentralised-dataexchange/data-space-backend?style=flat\"\u003e\u003c/a\u003e\n    \u003ca href=\"/../../issues\" title=\"Open Issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/decentralised-dataexchange/data-space-backend?style=flat\"\u003e\u003c/a\u003e\n    \u003ca href=\"./LICENSE\" title=\"License\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-yellowgreen?style=flat\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#about\"\u003eAbout\u003c/a\u003e •\n  \u003ca href=\"#tech-stack\"\u003eTech Stack\u003c/a\u003e •\n  \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e •\n  \u003ca href=\"#development\"\u003eDevelopment\u003c/a\u003e •\n  \u003ca href=\"#deployment\"\u003eDeployment\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#licensing\"\u003eLicensing\u003c/a\u003e\n\u003c/p\u003e\n\n## About\n\nThis repository hosts the source code for the reference implementation of the iGrant.io Dataspace Backend. The backend provides REST APIs for managing agreements, credentials, organisations, services, and B2B connections within the iGrant.io ecosystem.\n\n## Tech Stack\n\n| Technology | Version | Purpose |\n|------------|---------|---------|\n| [Python](https://www.python.org/) | 3.8+ | Programming language |\n| [Django](https://www.djangoproject.com/) | 3.0.x | Web framework |\n| [Django REST Framework](https://www.django-rest-framework.org/) | 3.13.x | REST API toolkit |\n| [SimpleJWT](https://django-rest-framework-simplejwt.readthedocs.io/) | 4.3.x | JWT authentication |\n| [Poetry](https://python-poetry.org/) | 1.x | Dependency management |\n| [Gunicorn](https://gunicorn.org/) | 20.x | WSGI HTTP server |\n| [PostgreSQL](https://www.postgresql.org/) | - | Production database |\n| [SQLite](https://www.sqlite.org/) | - | Development database |\n| [Ruff](https://docs.astral.sh/ruff/) | 0.11.x | Linter and formatter |\n\n## Getting Started\n\n### Prerequisites\n\n- Python 3.8 or higher\n- Docker (recommended for development)\n- Poetry (for local development without Docker)\n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/decentralised-dataexchange/data-space-backend.git\n   cd data-space-backend\n   ```\n\n2. Build the Docker image:\n   ```bash\n   make build\n   ```\n\n3. Run the development server:\n   ```bash\n   make run\n   ```\n\n4. Open [http://localhost:8000](http://localhost:8000) in your browser.\n\n### Admin Dashboard\n\nDjango admin dashboard is accessible at [http://localhost:8000/admin/](http://localhost:8000/admin/) with default credentials:\n\n| Field | Value |\n|-------|-------|\n| Email | admin@example.com |\n| Password | admin |\n\n## Development\n\n### Available Commands\n\n| Command | Description |\n|---------|-------------|\n| `make` | Show all available commands |\n| `make build` | Build the Docker image |\n| `make run` | Run backend locally for development |\n| `make build/docker/deployable` | Build deployable Docker image for staging/production |\n| `make publish` | Publish Docker image to registry |\n| `make deploy/staging` | Deploy to staging K8s cluster |\n| `make docs/run` | Run OpenAPI documentation |\n| `make docs/bundle` | Bundle OpenAPI documentation |\n\n### Project Structure\n\n```\ndata-space-backend/\n├── authorization/              # Authorization and permissions\n├── b2b_connection/             # B2B connection management\n├── config/                     # Application configuration\n├── connection/                 # Connection handling\n├── customadminsite/            # Custom Django admin site\n├── data_disclosure_agreement/  # Data Disclosure Agreement templates\n├── data_disclosure_agreement_record/  # DDA records\n├── dataspace_backend/          # Main Django project settings\n├── discovery/                  # Discovery services\n├── notification/               # Notification system\n├── oAuth2Clients/              # OAuth2 client management\n├── onboard/                    # User onboarding and authentication\n├── openapi/                    # OpenAPI documentation\n├── organisation/               # Organisation management\n├── resources/                  # Docker and deployment resources\n├── service/                    # Service management\n├── software_statement/         # Software statement handling\n├── webhook/                    # Webhook integrations\n├── Makefile                    # Build and development commands\n├── manage.py                   # Django management script\n└── pyproject.toml              # Python dependencies and tools config\n```\n\n## Configuration\n\n### Environment Variables\n\nWhen `POSTGRES_HOST` is set, the backend uses PostgreSQL; otherwise it defaults to SQLite (zero-config local development).\n\n| Variable | Description |\n|----------|-------------|\n| `POSTGRES_HOST` | PostgreSQL host address (enables PostgreSQL when set) |\n| `POSTGRES_NAME` | PostgreSQL database name |\n| `POSTGRES_USER` | PostgreSQL username |\n| `POSTGRES_PASSWORD` | PostgreSQL password |\n| `POSTGRES_PORT` | PostgreSQL port (default: `5432`) |\n\n### Local Development (Without Docker)\n\n1. Install Poetry:\n   ```bash\n   pip install poetry\n   ```\n\n2. Install dependencies:\n   ```bash\n   poetry install\n   ```\n\n3. Run migrations:\n   ```bash\n   poetry run python manage.py migrate\n   ```\n\n4. Create a superuser:\n   ```bash\n   poetry run python manage.py createsuperuser\n   ```\n\n5. Start the development server:\n   ```bash\n   poetry run python manage.py runserver\n   ```\n\n## Deployment\n\n### Docker Deployment\n\n1. Build the deployable image:\n   ```bash\n   make build/docker/deployable\n   ```\n\n2. Publish to registry:\n   ```bash\n   make publish\n   ```\n\n3. Deploy to staging:\n   ```bash\n   make deploy/staging\n   ```\n\n## Contributing\n\nWe welcome contributions! Here's how you can help:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\nIf you find any problems, please [create an issue](https://github.com/decentralised-dataexchange/data-space-backend/issues) in this repository.\n\n## Licensing\n\nCopyright (c) 2023-25 LCubed AB (iGrant.io), Sweden\n\nLicensed under the Apache 2.0 License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the [LICENSE](./LICENSE) for the specific language governing permissions and limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecentralised-dataexchange%2Fdata-space-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdecentralised-dataexchange%2Fdata-space-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecentralised-dataexchange%2Fdata-space-backend/lists"}