{"id":37189024,"url":"https://github.com/cacsjep/goxis","last_synced_at":"2026-01-14T21:59:32.561Z","repository":{"id":230512355,"uuid":"772053793","full_name":"Cacsjep/goxis","owner":"Cacsjep","description":"Golang Axis ACAP Wrappers","archived":false,"fork":false,"pushed_at":"2025-10-16T10:43:30.000Z","size":23766,"stargazers_count":9,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-17T13:06:31.224Z","etag":null,"topics":["acap","axis","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cacsjep.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-14T12:56:53.000Z","updated_at":"2025-04-09T09:25:39.000Z","dependencies_parsed_at":"2025-01-22T13:47:20.475Z","dependency_job_id":"53d3712c-2777-46c4-9f2c-8c1fc6482c74","html_url":"https://github.com/Cacsjep/goxis","commit_stats":null,"previous_names":["cacsjep/goxis"],"tags_count":98,"template":false,"template_full_name":null,"purl":"pkg:github/Cacsjep/goxis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cacsjep%2Fgoxis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cacsjep%2Fgoxis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cacsjep%2Fgoxis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cacsjep%2Fgoxis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cacsjep","download_url":"https://codeload.github.com/Cacsjep/goxis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cacsjep%2Fgoxis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["acap","axis","golang"],"created_at":"2026-01-14T21:59:32.060Z","updated_at":"2026-01-14T21:59:32.550Z","avatar_url":"https://github.com/Cacsjep.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# About\n\nGoxis is a library designed to facilitate the development of ACAP (Axis Camera Application Platform) applications for AXIS cameras.\n\nThis library includes user-friendly wrappers for most APIs provided by the [native SDK](https://axiscommunications.github.io/acap-documentation/docs/api/native-sdk-api.html).\n\n[![Discord](https://img.shields.io/badge/Discord-Join%20us-blue?style=for-the-badge\u0026logo=discord)](https://discord.gg/jrE98E6Qe9)\n\n[![GoDocs](https://img.shields.io/badge/go-documentation-blue)](https://pkg.go.dev/github.com/Cacsjep/goxis)\n\n\n\n## C-API Wrappers\n\nGoxis organizes its functionality around several key areas of the native SDK, each encapsulated within its own package for ease of use:\n\n[![GoDocs](https://img.shields.io/badge/go%20pkg-documentation-purple)](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg)\n\n- [axevent](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axevent) - Event API for managing camera events.\n- [axoverlay](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axoverlay) - Overlay API, including support for Cairo, for drawing over video feeds.\n- [axparameter](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axparameter) - Parameter API for managing camera parameters.\n- [axstorage](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axstorage) - Edge Storage API for accessing and managing on-camera storage.\n- [axvdo](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axvdo) - Video Capture API for handling video streams.\n- [axlarod](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axlarod) - Larod API\n- [axlicense](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axlicense) - License Key API for managing application licenses.\n- [axsyslog](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axsyslog) - Syslog for logging and diagnostics.\n\n## Additional Packages\n\nBeyond the core API wrappers, Goxis also provides several additional packages designed to speed up the development process and enhance application capabilities:\n\n- [acapapp](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/acapapp) - Offers a high-level abstraction for quick and efficient ACAP application development.\n- [axmanifest](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/axmanifest) - Aids in loading and parsing manifest files, simplifying application configuration and setup.\n- [dbus](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/dbus) - Provides helpers for interacting with the D-Bus interface, including retrieving VAPIX credentials.\n- [vapix](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/vapix) - Facilitates the use of the VAPIX API for interacting with camera functionalities.\n- [glib](https://pkg.go.dev/github.com/Cacsjep/goxis/pkg/glib) - Includes helpers for working with GLib, such as managing the main event loop.\n\n# Prerequisites\n- Docker for building the ACAP applications\n- [goxisbuilder](https://github.com/Cacsjep/goxisbuilder)\n\n## Quickstart\n```\ngo install github.com/Cacsjep/goxisbuilder@latest\ngoxisbuilder.exe -newapp\n```\n\n## Examples\nLocated at this repo [Examples](https://github.com/Cacsjep/goxis_examples)\n\n## Module Installation\n```\ngo get -u github.com/Cacsjep/goxis@latest\n```\n\n### Whats the purpose of goxis AcapApplication?\nThe `AcapApplication` acts as a foundational abstraction layer designed to streamline the handling of common tasks such as syslog logging, managing the GObject main loop, and the manipulation of parameters and events.\n\nUpon instantiation, `AcapApplication` undertakes several crucial steps::\n- **Manifest Parsing:** It reads the manifest file to extract the application's name.\n- **Parameter Management:** Initializes an `axparameter` instance, enabling the application to get, set, and remove parameters efficiently.\n- **Event Handling:** Sets up an `axevent` handler to facilitate event processing.\n- **GMain Loop Preparation:** Configures a GMain loop complete with signal handlers, ensuring robust event management.\n\n`AcapApplication` offers access to a variety of powerful functionalities, such as::\n- **FrameProvider:** Facilitates easy interaction with `axvdo`, streamlining video-related operations.\n- **OverlayProvide:** Facilitates easy interaction with `axoverlay` related operations.\n- **StorageProvider:** Offers straightforward access to the camera's storage, enhancing data management capabilities.\n- `app.IsLicenseValid(major_version int, minor_version int)`: Verifies the validity of the application's license for the specified version.\n- `app.Run()`: Activates the GMain loop within the application, allowing for continuous operation.\n- `app.GetSnapshot(video_channel int)`: Captures and retrieves a JPEG snapshot from a given video channel.\n\nand more ....\n\n### Create a new goxis application\n\nJust use [goxisbuilder](https://github.com/Cacsjep/goxisbuilder) tool for streamlined builds.\n\n```\n.\\goxisbuilder.exe -newapp\n```\n\n## Events\n\nMost events are already declared in `axevent`. If you miss something, you can manually craft it, create a PR, or just ask! 😊\nYou can use the AXIS `get_eventlist.py` script (Native SDK Repo - AXIS) to get the XML list to see events that your device supports.\n\n\u003e [!TIP]\n\u003e Use AXIS Meta Data Monitor to validate and determine if the desired event is triggered.\n\n#### Namespace Considerations\n\nIt is crucial to set the correct namespace for each topic. Incorrect namespaces can cause issues in `axevent` C API mapping. Check carefully if multiple namespaces are involved, and ensure the correct setup.\n\n##### Single Namespace Example: `tnsaxis:CameraApplicationPlatform/ObjectAnalytics/xinternal_data`\n\nWhen there is only one namespace for all entries, ensure consistency across all topics. In this example, all entries use `OnfivNameSpaceTnsAxis`:\n  ```go\n    NewTopicKeyValueEntrie(\"topic0\", \u0026OnfivNameSpaceTnsAxis, \"CameraApplicationPlatform\"),\n    NewTopicKeyValueEntrie(\"topic1\", \u0026OnfivNameSpaceTnsAxis, \"ObjectAnalytics\"),\n    NewTopicKeyValueEntrie(\"topic2\", \u0026OnfivNameSpaceTnsAxis, \"xinternal_data\"),\n```\n\n##### Multiple Namespace Example: `tns1:Device/tnsaxis:IO/VirtualPort`\n\nWhen there are multiple namespaces, ensure subsequent entries after a path change use the correct namespace. For instance, `VirtualPort` uses the `tnsaxis` namespace:\n\n ```go\n    NewTopicKeyValueEntrie(\"topic0\", \u0026OnfivNameSpaceTns1, \"Device\"),\n    NewTopicKeyValueEntrie(\"topic1\", \u0026OnfivNameSpaceTnsAxis, \"IO\"),\n    NewTopicKeyValueEntrie(\"topic2\", \u0026OnfivNameSpaceTnsAxis, \"VirtualPort\"),\n```\n\n##### When creating new events, follow these patterns for namespace and topic consistency\n```go\n// \u003ctnsaxis:CameraApplicationPlatform\u003e\n// \t\u003cObjectAnalytics\u003e\n// \t\t\u003cxinternal_data wstop:topic=\"true\"\u003e\n// \t\t\t\u003ctt:MessageDescription IsProperty=\"false\"\u003e\n// \t\t\t\t\u003ctt:Data\u003e\n// \t\t\t\t\t\u003ctt:SimpleItemDescription Name=\"svgframe\" Type=\"xsd:string\"\u003e\u003c/tt:SimpleItemDescription\u003e\n// \t\t\t\t\u003c/tt:Data\u003e\n// \t\t\t\u003c/tt:MessageDescription\u003e\n// \t\t\u003c/xinternal_data\u003e\n// \t\u003c/ObjectAnalytics\u003e\n// \u003c/tnsaxis:CameraApplicationPlatform\u003e\nfunc CameraApplicationPlatformXInternalDataEventKvs(svgFrame *string) *AXEventKeyValueSet {\n\treturn NewAXEventKeyValueSetFromEntries([]KeyValueEntrie{\n\t\tNewTopicKeyValueEntrie(\"topic0\", \u0026OnfivNameSpaceTnsAxis, \"CameraApplicationPlatform\"),\n\t\tNewTopicKeyValueEntrie(\"topic1\", \u0026OnfivNameSpaceTnsAxis, \"ObjectAnalytics\"),\n\t\tNewTopicKeyValueEntrie(\"topic2\", \u0026OnfivNameSpaceTnsAxis, \"xinternal_data\"),\n\t\tNewStringKeyValueEntrie(\"svgframe\", svgFrame),\n\t})\n}\n\ntype CameraApplicationPlatformXInternalDataEvent struct {\n\tSvgFrame string `eventKey:\"svgframe\"`\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcacsjep%2Fgoxis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcacsjep%2Fgoxis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcacsjep%2Fgoxis/lists"}