{"id":28995083,"url":"https://github.com/axiscommunications/acap-rs-app-template","last_synced_at":"2026-02-09T09:32:20.220Z","repository":{"id":243812234,"uuid":"796552963","full_name":"AxisCommunications/acap-rs-app-template","owner":"AxisCommunications","description":"Experimental Rust example code for APIs and features in AXIS Camera Application Platform (ACAP)","archived":false,"fork":false,"pushed_at":"2024-11-25T20:15:16.000Z","size":84,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-25T21:24:37.251Z","etag":null,"topics":["acap","analytics","axis","camera","edge","experimental","rust","video"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","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/AxisCommunications.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":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-06T07:08:29.000Z","updated_at":"2024-11-25T20:15:19.000Z","dependencies_parsed_at":"2024-06-19T17:48:22.318Z","dependency_job_id":"4423d743-c1ba-4cf6-98d1-af9f61f8edf1","html_url":"https://github.com/AxisCommunications/acap-rs-app-template","commit_stats":null,"previous_names":["axiscommunications/acap-rs-app-template"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/AxisCommunications/acap-rs-app-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Facap-rs-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Facap-rs-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Facap-rs-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Facap-rs-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxisCommunications","download_url":"https://codeload.github.com/AxisCommunications/acap-rs-app-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Facap-rs-app-template/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261801988,"owners_count":23211664,"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":["acap","analytics","axis","camera","edge","experimental","rust","video"],"created_at":"2025-06-25T04:06:29.716Z","updated_at":"2026-02-09T09:32:20.177Z","avatar_url":"https://github.com/AxisCommunications.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Example app using ACAP and Rust\n\n\u003e [!IMPORTANT]\n\u003e This project is an experiment provided \"as is\".\n\u003e While we strive to maintain it, there's no guarantee of ongoing support, and it may become unmaintained in the future.\n\u003e Your contributions are appreciated, and feel free to fork and continue the journey if needed.\n\nThis is a template that can be used to create a new app using [Axis Camera Application Platform (ACAP)](https://axiscommunications.github.io/acap-documentation/) and Rust.\nTo contribute to the crates that this template uses, please see [acap-rs](https://github.com/AxisCommunications/acap-rs).\n\n## Quickstart guide\n\nThe quickest way to build this example is to launch the dev container and run `cargo-acap-build`.\nOnce it completes there should be two `.eap` files in `target/acap`:\n\n```console\n$ ls -1 target/acap\nhello_world_0_1_0_aarch64.eap\nhello_world_0_1_0_armv7hf.eap\n```\n\nIf you have a device that you would like to run the app on, the recommended workflow is:\n\n```shell\n# Specify which device to target and how to authenticate\nexport AXIS_DEVICE_IP=\u003cAXIS_DEVICE_IP\u003e\nexport AXIS_DEVICE_USER=\u003cAXIS_DEVICE_USER\u003e\nexport AXIS_DEVICE_PASS=\u003cAXIS_DEVICE_PASS\u003e\n\n# Restore the device to a known state\nRUST_LOG=info device-manager reinit\n\n# Build the app and install on the device\ncargo-acap-sdk install\n\n# Build the app, patch the previously installed app on the device, and run with stdout attached\ncargo-acap-sdk run\n```\n\nOther useful workflows are documented under the \"Verbs\" section of the [Makefile](./Makefile).\nIf Rust crate `mkhelp==0.2.3` is installed, they can be summarized like:\n\n```console\n$ mkhelp Makefile\nChecks:\n    check_all: Run all other checks\n  check_build: Check that all crates can be built\n   check_docs: Check that docs can be built\n check_format: Check that the code is formatted correctly\n   check_lint: Check that the code is free of lints\n\nFixes:\n fix_format: Attempt to fix formatting automatically\n   fix_lint: Attempt to fix lints automatically\n```\n\n## Programs\n\nThe dev-container includes a few tools in addition to those that come with the ACAP Native SDK.\nThe help texts from each are documented below along with some additional notes.\n\n### Porcelain\n\nThese programs have an ergonomic interface and should fit most users most of the time.\n\n```console\n$ cargo-acap-sdk\nTools for developing ACAP apps using Rust\n\nUsage: cargo-acap-sdk \u003cCOMMAND\u003e\n\nCommands:\n  build        Build app(s) with release profile\n  run          Build app(s) and run on the device\n  test         Build app(s) in test mode and run on the device\n  install      Build app(s) with release profile and install on the device\n  start        Start app on device\n  stop         Stop app on device\n  restart      Restart app on device\n  remove       Remove app form device\n  completions  Print shell completion script for this program\n  help         Print this message or the help of the given subcommand(s)\n```\n\nNote that some commands must be run before other as illustrated by this state diagram:\n\n```mermaid\nstateDiagram\n    baseline --\u003e stopped: install\n    stopped --\u003e stopped: run/test\n    stopped --\u003e running: start\n    stopped --\u003e baseline: remove\n    running --\u003e stopped: stop\n    running --\u003e baseline: remove\n```\n\nNote that the shell completions may not work when using the program as a cargo plugin like\n`cargo acap-sdk` (note the difference between ` ` and `-`).\n\n### Plumbing\n\nThese programs have a flexible interface making them handy when the porcelain is too rigid.\n\n```console\n$ acap-ssh-utils\nUtilities for interacting with Axis devices over SSH.\n\nUsage: acap-ssh-utils --host \u003cHOST\u003e --user \u003cUSER\u003e --pass \u003cPASS\u003e \u003cCOMMAND\u003e\n\nCommands:\n  patch      Patch app on device\n  run-app    Run app on device, sending output to the terminal\n  run-other  Run any executable on device, sending output to the terminal\n  help       Print this message or the help of the given subcommand(s)\n\nOptions:\n      --host \u003cHOST\u003e  Hostname or IP address of the device [env: AXIS_DEVICE_IP=]\n  -u, --user \u003cUSER\u003e  The username to use for the ssh connection [env: AXIS_DEVICE_USER=]\n  -p, --pass \u003cPASS\u003e  The password to use for the ssh connection [env: AXIS_DEVICE_PASS=]\n```\n\n```console\n$ cargo-acap-build -h\nACAP analog to `cargo build`\n\nUsage: cargo-acap-build [OPTIONS] [ARGS]...\n\nArguments:\n  [ARGS]...  Pass additional arguments to `cargo build`\n\nOptions:\n      --target \u003cTARGET\u003e  If given, build only for the given architecture(s) [possible values: aarch64, armv7hf]\n```\n\n```console\n$ device-manager\nUtilities for managing individual devices.\n\nUsage: device-manager --host \u003cHOST\u003e --user \u003cUSER\u003e --pass \u003cPASS\u003e \u003cCOMMAND\u003e\n\nCommands:\n  restore  Restore device to a clean state\n  reinit   Restore and initialize device to a known, useful state\n  help     Print this message or the help of the given subcommand(s)\n\nOptions:\n      --host \u003cHOST\u003e  Hostname or IP address of the device [env: AXIS_DEVICE_IP=]\n  -u, --user \u003cUSER\u003e  The username to use for the ssh connection [env: AXIS_DEVICE_USER=]\n  -p, --pass \u003cPASS\u003e  The password to use for the ssh connection [env: AXIS_DEVICE_PASS=]\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Facap-rs-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxiscommunications%2Facap-rs-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Facap-rs-app-template/lists"}