{"id":14641190,"url":"https://github.com/xplpc/xplpc","last_synced_at":"2025-09-07T10:31:51.099Z","repository":{"id":65591875,"uuid":"593964596","full_name":"xplpc/xplpc","owner":"xplpc","description":"Cross Platform Lite Procedure Call - Support Linux, macOS, Windows, iOS, Android, Web Assembly, Flutter, Kotlin, Python and More","archived":false,"fork":false,"pushed_at":"2024-12-13T16:02:00.000Z","size":8142,"stargazers_count":38,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-13T16:12:15.197Z","etag":null,"topics":["cross-platform","cxx","javascript","jni","kotlin","mobile","procedure-call","python","rpc","swift","typescript","webassembly"],"latest_commit_sha":null,"homepage":"https://xplpc.github.io","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/xplpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"paulocoutinhox","ko_fi":"paulocoutinho"}},"created_at":"2023-01-27T09:11:06.000Z","updated_at":"2024-12-13T16:02:03.000Z","dependencies_parsed_at":"2023-10-02T23:20:08.400Z","dependency_job_id":"476481d8-7000-47a0-9085-0769886dc2f6","html_url":"https://github.com/xplpc/xplpc","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplpc%2Fxplpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplpc%2Fxplpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplpc%2Fxplpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplpc%2Fxplpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xplpc","download_url":"https://codeload.github.com/xplpc/xplpc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232202469,"owners_count":18487901,"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":["cross-platform","cxx","javascript","jni","kotlin","mobile","procedure-call","python","rpc","swift","typescript","webassembly"],"created_at":"2024-09-10T08:01:09.014Z","updated_at":"2025-09-07T10:31:51.063Z","avatar_url":"https://github.com/xplpc.png","language":"Python","funding_links":["https://github.com/sponsors/paulocoutinhox","https://ko-fi.com/paulocoutinho"],"categories":["Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n        \u003cimg width=\"250\" src=\"extras/images/logo.png\" alt=\"XPLPC Logo\"\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    XPLPC - Cross Platform Lite Procedure Call\n    \u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/c.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/c.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/cxx.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/cxx.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/kotlin-desktop.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/kotlin-desktop.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/kotlin-android.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/kotlin-android.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/swift.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/swift.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/wasm.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/wasm.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/flutter.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/flutter.yml/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc/actions/workflows/python.yml\"\u003e\u003cimg src=\"https://github.com/xplpc/xplpc/actions/workflows/python.yml/badge.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.codacy.com/gh/xplpc/xplpc/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=xplpc/xplpc\u0026amp;utm_campaign=Badge_Grade\"\u003e\u003cimg src=\"https://app.codacy.com/project/badge/Grade/aaff32bd69594525a289545c56324801\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Project\n\nThe XPLPC project connects languages and platforms, allowing for the transfer of serialized data between them. This is achieved without the need for a server, but instead by utilizing device memory. This approach is known as Lite Procedure Call.\n\nThe Platform Proxy class plays a crucial role in this process by connecting both languages and platforms, and facilitating the transfer of data using device memory instead of the HTTP protocol. This allows for a more efficient and streamlined communication process.\n\nFor example, you can call a procedure written in C++ code from a mobile application, or vice versa, with ease. This opens up a wide range of possibilities for developers and allows for a more seamless integration of different languages and platforms.\n\nThe XPLPC project is also highly user-friendly, as it does not require the use of generators or additional tools. This means that the generated library can be added to your existing project without the need for any rewriting of code. This plug-and-play feature allows for full code reuse and makes the integration process smooth and hassle-free.\n\n## Workflow\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/xplpc/xplpc\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n        \u003cimg src=\"extras/images/how-it-works.png\" alt=\"XPLPC How It Works\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## How to use\n\nUsing C++ code:\n\n```cpp\nauto request = Request{\n    \"sample.login\",\n    Param\u003cstd::string\u003e{\"username\", \"paulo\"},\n    Param\u003cstd::string\u003e{\"password\", \"123456\"},\n    Param\u003cbool\u003e{\"remember\", true},\n};\n\nClient::call\u003cstd::string\u003e(request, [](const auto \u0026response) {\n    std::cout \u003c\u003c \"Returned Value: \" \u003c\u003c (response ? response.value() : \"Empty\") \u003c\u003c std::endl;\n});\n```\n\nUsing Kotlin code:\n\n```kotlin\nval request = Request(\n    \"sample.login\",\n    Param(\"username\", \"paulo\"),\n    Param(\"password\", \"123456\"),\n    Param(\"remember\", true)\n)\n\nClient.call\u003cString\u003e(request) { response -\u003e\n    println(\"Returned Value: $response\")\n}\n```\n\nUsing Swift code:\n\n```swift\nlet request = Request(\n    \"sample.login\",\n    Param(\"username\", \"paulo\"),\n    Param(\"password\", \"123456\"),\n    Param(\"remember\", true)\n)\n\nClient.call(request) { (response: String?) in\n    print(\"Returned Value: \\(response)\")\n}\n```\n\nUsing WASM with Typescript:\n\n```typescript\nconst request = new XRequest(\n    \"sample.login\",\n    new XParam(\"username\", \"paulo\"),\n    new XParam(\"password\", \"123456\"),\n    new XParam(\"remember\", true),\n);\n\nXClient.call\u003cstring\u003e(request).then((response : string | undefined) =\u003e {\n    console.log(\"Returned Value: \" + response);\n});\n```\n\nUsing Flutter with Dart:\n\n```dart\nvar request = Request(\"sample.login\", [\n    Param(\"username\", \"paulo\"),\n    Param(\"password\", \"123456\"),\n    Param(\"remember\", true),\n]);\n\nClient.call\u003cString\u003e(request, (response) {\n    print(response);\n});\n```\n\nUsing Python code:\n\n```python\nrequest = Request(\n    \"sample.login\",\n    [\n        Param(\"username\", \"paulo\"),\n        Param(\"password\", \"123456\"),\n        Param(\"remember\", True),\n    ],\n)\n\nresponse = Client.call(request)\nprint(response)\n```\n\nObs: There are syntax suggar for async/await/future calls, see the documentation about each language/platform.\n\n## Supported languages and platforms\n\n*   C\n*   C++\n*   Kotlin (Android, Desktop)\n*   Swift (iOS, macOS, tvOS, watchOS, Catalyst)\n*   WebAssembly\n*   Flutter (iOS, Android, Desktop)\n*   Python\n\n## Documentation\n\n*   [General](docs/general.md)\n*   [C](docs/c.md)\n*   [C++](docs/cxx.md)\n*   [Kotlin](docs/kotlin.md)\n*   [Swift](docs/swift.md)\n*   [WebAssembly](docs/wasm.md)\n*   [Flutter](docs/flutter.md)\n*   [Python](docs/python.md)\n*   [Dependency Manager](docs/dependency-manager.md)\n*   [Contribution](docs/contribution.md)\n*   [Purpose](docs/purpose.md)\n\n## License\n\n[MIT](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2022-2025, Paulo Coutinho\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxplpc%2Fxplpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxplpc%2Fxplpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxplpc%2Fxplpc/lists"}