{"id":16202574,"url":"https://github.com/polymeilex/ripewire","last_synced_at":"2026-06-19T23:31:20.997Z","repository":{"id":188789479,"uuid":"634665308","full_name":"PolyMeilex/RipeWire","owner":"PolyMeilex","description":"PipeWire client liblary in idiomatic Rust","archived":false,"fork":false,"pushed_at":"2025-11-12T00:30:33.000Z","size":582,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-26T19:32:57.298Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/PolyMeilex.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}},"created_at":"2023-04-30T21:13:06.000Z","updated_at":"2025-11-12T00:30:38.000Z","dependencies_parsed_at":"2024-12-09T18:23:57.839Z","dependency_job_id":"787ae2cc-6df5-4ea9-82d7-4fb12e5907cb","html_url":"https://github.com/PolyMeilex/RipeWire","commit_stats":{"total_commits":135,"total_committers":1,"mean_commits":135.0,"dds":0.0,"last_synced_commit":"a39502b7c9e17f214b9ee753bcbb2faf48bf0d80"},"previous_names":["polymeilex/ripewire"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PolyMeilex/RipeWire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyMeilex%2FRipeWire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyMeilex%2FRipeWire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyMeilex%2FRipeWire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyMeilex%2FRipeWire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PolyMeilex","download_url":"https://codeload.github.com/PolyMeilex/RipeWire/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PolyMeilex%2FRipeWire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34552295,"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-06-19T02:00:06.005Z","response_time":61,"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":[],"created_at":"2024-10-10T09:48:32.510Z","updated_at":"2026-06-19T23:31:20.972Z","avatar_url":"https://github.com/PolyMeilex.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://i.imgur.com/qk7jHzB.png\" width=\"200\" /\u003e\n \u003ch1 align=\"center\"\u003eRipeWire\u003c/h1\u003e\n \u003ch3 align=\"center\"\u003ePipeWire client library in idiomatic Rust\u003c/h3\u003e\n\u003c/p\u003e\n\n## WIP...\n\n\nReal proof of concept: [helvum ported to RipeWire](https://github.com/PolyMeilex/helvum-ripewire)\n\nAnd simpler example (definitely not final API): \n```rs\n#[derive(Default)]\nstruct State {\n    globals: GlobalList,\n}\n\nimpl State {\n    pub fn core_event(\n        \u0026mut self,\n        context: \u0026mut Context\u003cSelf\u003e,\n        core: PwCore,\n        event: pw_core::Event,\n    ) {\n        match event {\n            pw_core::Event::Done(done) =\u003e {\n                if done.id == 0 \u0026\u0026 done.seq == 0 {\n                    // Let's print globals advertised by the registry\n                    dbg!(\u0026self.globals)\n                }\n            }\n            _ =\u003e {}\n        }\n    }\n\n    pub fn registry_event(\n        \u0026mut self,\n        context: \u0026mut Context\u003cSelf\u003e,\n        registry: PwRegistry,\n        event: pw_registry::Event,\n    ) {\n        self.globals.handle_event(\u0026event);\n    }\n}\n\nlet mut ctx = Context::connect(\"/run/user/1000/pipewire-0\").unwrap();\nlet core = ctx.core();\nlet client = ctx.client();\n\ncore.hello(\u0026mut ctx);\n\nclient.update_properties(\n    \u0026mut ctx,\n    Dictionary::from([\n        (\"application.name\", \"RipeWire\"),\n        (\"application.process.binary\", \"ripewire\"),\n    ]),\n);\n\nlet registry = core.get_registry(\u0026mut ctx);\n\ncore.sync(\u0026mut ctx, 0, 0);\n\nctx.set_object_callback(\u0026core, State::core_event);\nctx.set_object_callback(\u0026registry, State::registry_event);\n\nctx.set_object_callback(\u0026client, |state, client, event| {\n    println!(\"You can use closures as well: {:?}\", event);\n});\n\nlet mut state = State::default();\n\nloop { // any event loop or async runtime of your choice\n    let (messages, fds) = ctx.rcv_msg();\n\n    for msg in messages {\n        ctx.dispatch_event(\u0026mut state, msg, \u0026fds);\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolymeilex%2Fripewire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpolymeilex%2Fripewire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolymeilex%2Fripewire/lists"}