{"id":51687839,"url":"https://github.com/flarebyte/beaming_yggdrasil","last_synced_at":"2026-07-15T22:35:18.925Z","repository":{"id":314867639,"uuid":"1055414344","full_name":"flarebyte/beaming_yggdrasil","owner":"flarebyte","description":"Pure Dart client primitives for a Yggdrasil-style service","archived":false,"fork":false,"pushed_at":"2026-05-25T08:32:53.000Z","size":322,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T10:26:06.616Z","etag":null,"topics":["client","dart","flutter","yggdrasil"],"latest_commit_sha":null,"homepage":"https://github.com/flarebyte/beaming_yggdrasil","language":"Dart","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/flarebyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2025-09-12T08:27:36.000Z","updated_at":"2026-05-25T08:24:30.000Z","dependencies_parsed_at":"2025-09-15T10:26:45.378Z","dependency_job_id":"95c90a46-230e-4528-bf0d-304c9c4966b9","html_url":"https://github.com/flarebyte/beaming_yggdrasil","commit_stats":null,"previous_names":["flarebyte/beaming-yggdrasil","flarebyte/beaming_yggdrasil"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flarebyte/beaming_yggdrasil","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flarebyte%2Fbeaming_yggdrasil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flarebyte%2Fbeaming_yggdrasil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flarebyte%2Fbeaming_yggdrasil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flarebyte%2Fbeaming_yggdrasil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flarebyte","download_url":"https://codeload.github.com/flarebyte/beaming_yggdrasil/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flarebyte%2Fbeaming_yggdrasil/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35523587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["client","dart","flutter","yggdrasil"],"created_at":"2026-07-15T22:35:18.167Z","updated_at":"2026-07-15T22:35:18.920Z","avatar_url":"https://github.com/flarebyte.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# beaming_yggdrasil\n\n![Experimental](https://img.shields.io/badge/status-experimental-blue)\n\n![beaming_yggdrasil illustration](https://raw.githubusercontent.com/flarebyte/beaming_yggdrasil/main/doc/beaming-yggdrasil.jpeg)\n\nPure Dart client primitives for a Yggdrasil-style service, designed to embed\ncleanly inside Flutter applications.\n\nThis package is currently best understood as a spec-aligned client foundation:\nit provides immutable models, typed wire DTOs, an optional Rx adapter, and a\ntesting-only snapshot control surface. It does not yet ship production HTTP or\nWebSocket transport implementations.\n\nThe package currently provides:\n\n- immutable client-side key, value, result, and event models\n- a classic `Future` and `Stream` client surface\n- an optional Rx-friendly adapter layered on top of the classic client\n- a separate testing client for snapshot seeding in tests\n- typed REST and light WebSocket DTOs\n\nThe package does not currently provide:\n\n- a production HTTP implementation\n- a production WebSocket transport\n- an offline cache engine\n- Flutter widgets or `BuildContext` integrations\n\n## Package Scope\n\n- pure Dart library, intended to run inside Flutter apps\n- current value payload contract is string-only\n- recovery and diagnostics are explicit hooks, not hidden framework behavior\n- snapshot replacement is testing-only and not part of the real client API\n\n## Flutter-Friendly Usage\n\nThe core library stays pure Dart, so a Flutter app can wrap it in its own\ncontroller, view model, or state-management layer.\n\n```dart\nimport 'dart:async';\n\nimport 'package:beaming_yggdrasil/beaming_yggdrasil.dart';\n\nclass TreeController {\n  final BeamingYggdrasilClient client;\n\n  StreamSubscription\u003cBeamingEvent\u003e? _subscription;\n  List\u003cBeamingValue\u003e snapshot = const [];\n\n  TreeController(this.client);\n\n  Future\u003cvoid\u003e load(String rootKeyId) async {\n    snapshot = await client.getSnapshot(rootKeyId);\n  }\n\n  Future\u003cvoid\u003e startWatching(String rootKeyId) async {\n    await _subscription?.cancel();\n    _subscription = client.watch([rootKeyId]).listen((event) {\n      if (event is BeamingSetEvent) {\n        _applyValue(event.keyValue);\n      }\n    });\n  }\n\n  Future\u003cvoid\u003e dispose() async {\n    await _subscription?.cancel();\n  }\n\n  void _applyValue(BeamingValue nextValue) {\n    final current = snapshot.toList();\n    final index = current.indexWhere(\n      (value) =\u003e value.key.keyId == nextValue.key.keyId,\n    );\n    if (index == -1) {\n      current.add(nextValue);\n    } else {\n      current[index] = nextValue;\n    }\n    snapshot = List\u003cBeamingValue\u003e.unmodifiable(current);\n  }\n}\n```\n\n## Local Example\n\nSee `example/example.dart` for a complete example showing:\n\n- snapshot bootstrap\n- watch subscription\n- create flow\n- the optional Rx adapter\n\nThe example uses a local support harness outside `lib/`. That harness is not\npart of the published runtime API.\n\n## Public API Overview\n\n- `BeamingYggdrasilClient`\n  Main consumer surface using `Future` and `Stream`.\n- `BeamingYggdrasilRxClient`\n  Optional adapter for Rx-style composition over the classic client.\n- `BeamingYggdrasilTestingClient`\n  Testing-only snapshot seeding surface.\n- `BeamingRestEnvelope` and related DTOs\n  Typed REST request and response models.\n- `BeamingServerMessage` and related DTOs\n  Typed light WebSocket protocol models.\n- `BeamingRecoveryExecutor`\n  Explicit recovery-policy boundary for refresh and resubscribe flows.\n\n## Development\n\nUseful commands:\n\n- `make format-dart`\n- `make analyze`\n- `make test-unit`\n- `make test-e2e`\n- `make package-check`\n- `make publish-dry-run`\n- `make publish-check`\n\n`make test-e2e` expects the sibling mock-server repo at `../chatty-ratatoskr`.\n\n## License\n\n`beaming_yggdrasil` is available under the [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflarebyte%2Fbeaming_yggdrasil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflarebyte%2Fbeaming_yggdrasil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflarebyte%2Fbeaming_yggdrasil/lists"}