{"id":25895443,"url":"https://github.com/diamondlightsource/blueapi","last_synced_at":"2026-02-18T17:03:43.650Z","repository":{"id":56864889,"uuid":"471306201","full_name":"DiamondLightSource/blueapi","owner":"DiamondLightSource","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-27T15:29:05.000Z","size":173547,"stargazers_count":6,"open_issues_count":153,"forks_count":7,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-02-27T22:05:35.020Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/DiamondLightSource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/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}},"created_at":"2022-03-18T09:25:21.000Z","updated_at":"2025-02-21T15:43:11.000Z","dependencies_parsed_at":"2023-10-12T23:57:20.702Z","dependency_job_id":"1ba28aeb-3201-4ea0-807d-9dd21b8acef7","html_url":"https://github.com/DiamondLightSource/blueapi","commit_stats":null,"previous_names":[],"tags_count":96,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fblueapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fblueapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fblueapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiamondLightSource%2Fblueapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DiamondLightSource","download_url":"https://codeload.github.com/DiamondLightSource/blueapi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241582513,"owners_count":19985845,"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":[],"created_at":"2025-03-02T22:31:24.740Z","updated_at":"2026-01-20T13:06:58.090Z","avatar_url":"https://github.com/DiamondLightSource.png","language":"Python","readme":"\u003cimg src=\"https://raw.githubusercontent.com/DiamondLightSource/blueapi/main/docs/images/blueapi-logo.svg\"\n     style=\"background: none\" width=\"120px\" height=\"120px\" align=\"right\"\u003e\n\n[![CI](https://github.com/DiamondLightSource/blueapi/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamondLightSource/blueapi/actions/workflows/ci.yml)\n[![Coverage](https://codecov.io/gh/DiamondLightSource/blueapi/branch/main/graph/badge.svg)](https://codecov.io/gh/DiamondLightSource/blueapi)\n[![PyPI](https://img.shields.io/pypi/v/blueapi.svg)](https://pypi.org/project/blueapi)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n# blueapi\n\nLightweight bluesky-as-a-service wrapper application. Also usable as a library.\n\nSource          | \u003chttps://github.com/DiamondLightSource/blueapi\u003e\n:---:           | :---:\nPyPI            | `pip install blueapi`\nDocker          | `docker run ghcr.io/diamondlightsource/blueapi:latest`\nDocumentation   | \u003chttps://diamondlightsource.github.io/blueapi\u003e\nReleases        | \u003chttps://github.com/DiamondLightSource/blueapi/releases\u003e\n\nThis module wraps [bluesky](https://blueskyproject.io/bluesky) plans and devices\ninside a server and exposes endpoints to send commands/receive data. Useful for\ninstallation at labs where multiple people may control equipment, possibly from\nremote locations.\n\nThe main premise of blueapi is to minimize the boilerplate required to get plans\nand devices up and running by generating an API for your lab out of\ntype-annotated plans. For example, take the following plan:\n\n```python\nimport bluesky.plans as bp\nfrom blueapi.core import MsgGenerator\n\ndef my_plan(foo: str, bar: int) -\u003e MsgGenerator:\n    yield from bp.scan(...)\n```\n\nBlueapi's job is to detect this plan and automatically add it to the lab's API\nso it can be invoked easily with a few REST calls. \n\n\u003c!-- README only content. Anything below this line won't be included in index.md --\u003e\n\nSee https://diamondlightsource.github.io/blueapi for more detailed documentation.\n\n[concept]: https://raw.githubusercontent.com/DiamondLightSource/blueapi/main/docs/images/blueapi.png\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiamondlightsource%2Fblueapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiamondlightsource%2Fblueapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiamondlightsource%2Fblueapi/lists"}