{"id":23209653,"url":"https://github.com/acronis/go-cti","last_synced_at":"2025-08-19T04:32:30.182Z","repository":{"id":254278632,"uuid":"845448984","full_name":"acronis/go-cti","owner":"acronis","description":"An implementation of CTI (Cross-domain Typed Identifiers) and CTI/Metadata specification in Go.","archived":false,"fork":false,"pushed_at":"2024-12-17T21:18:52.000Z","size":5654,"stargazers_count":25,"open_issues_count":4,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-17T22:24:39.951Z","etag":null,"topics":["data-structures","dml","domain","domain-driven-design","golang","identifier","identifiers","integration","packaging","raml","specification"],"latest_commit_sha":null,"homepage":"","language":"Go","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/acronis.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}},"created_at":"2024-08-21T09:19:31.000Z","updated_at":"2024-12-17T21:18:23.000Z","dependencies_parsed_at":"2024-08-22T13:59:41.917Z","dependency_job_id":"9d499d42-cbd0-4099-a118-206713d2a84f","html_url":"https://github.com/acronis/go-cti","commit_stats":null,"previous_names":["acronis/go-cti"],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acronis%2Fgo-cti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acronis%2Fgo-cti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acronis%2Fgo-cti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acronis%2Fgo-cti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acronis","download_url":"https://codeload.github.com/acronis/go-cti/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230318685,"owners_count":18207831,"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":["data-structures","dml","domain","domain-driven-design","golang","identifier","identifiers","integration","packaging","raml","specification"],"created_at":"2024-12-18T18:18:56.680Z","updated_at":"2025-08-19T04:32:30.166Z","avatar_url":"https://github.com/acronis.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cross-domain Typed Identifiers (CTI) management tool and library \u003c!-- omit in toc --\u003e\n\n- [What is Cross-domain Typed Identifiers (CTI)?](#what-is-cross-domain-typed-identifiers-cti)\n- [What does this project provide?](#what-does-this-project-provide)\n- [How the technology is used](#how-the-technology-is-used)\n- [Installation](#installation)\n  - [Identifiers parsing library](#identifiers-parsing-library)\n  - [Metadata parsing library](#metadata-parsing-library)\n  - [CLI](#cli)\n- [CLI Reference](#cli-reference)\n  - [cti init](#cti-init)\n  - [cti pkg get](#cti-pkg-get)\n  - [cti validate](#cti-validate)\n  - [cti pack](#cti-pack)\n    - [--include-source](#--include-source)\n    - [--format](#--format)\n    - [--prefix](#--prefix)\n    - [--output](#--output)\n\n## What is Cross-domain Typed Identifiers (CTI)?\n\n**CTI**s provide a structured, standardized approach for uniquely identifying data types, instances, and their relationships across multi-service, multi-vendor, multi-platform, and multi-application environments. This system enables the unique definition of resources (both data types and instances) throughout the ecosystem, embedding vendor, package, and extension information within each identifier. Using CTI, each type and instance is represented by a **CTI** associated with a specific entity, ensuring clear, consistent identification across diverse systems.\n\n\u003e [!NOTE]\n\u003e For more details on CTI specification, see [Cross-domain Typed Identifiers (CTI) version 1.0 Specification](./cti-spec/SPEC.md)\n\n## What does this project provide?\n\nThe project provides the following:\n\n* An extensible library that provides interfaces for:\n  * A parser for RAMLx files that are extended with CTI specification.\n  * CTI package management to work with dependent packages in other Github repositories.\n  * A validator for compiled CTI entities.\n* A CLI tool that is ready to use with CTI packages and implements functionality according to the interface.\n\n## How the technology is used\n\nCTI technology is utilized by Acronis CyberApp technology that allows third-party ISVs (application vendors) to extend Acronis Cyber Protect Cloud platform (the platform) by:\n\n* Bringing new object types and APIs to the system.\n* Extending the platform base domain model types (like types of tenants, alerts, events, protection plans) by new inherited types.\n* Enforce granular access to objects of different types for the API clients.\n\nWith CTI, the following entities become explicitly defined and linked to corresponding entities:\n\n* Domain object types, i.e. object schemas like tenants, alerts, protection plans, etc.\n* Well-known object instances, like event topics, namespaces, groups.\n\nTo describe types and instances that are associated with the CTI, RAMLx is used.\n\n## Installation\n\n### Identifiers parsing library\n\n```\ngo get -u github.com/acronis/go-cti\n```\n\n### Metadata parsing library\n\n```\ngo get -u github.com/acronis/go-cti/metadata\n```\n\nFor the library usage, see [./metadata/README.md](./metadata/README.md).\n\n### CLI\n\n```\ngo install github.com/acronis/go-cti/cmd/cti@latest\n```\n\n## CLI Reference\n\n\u003e [!NOTE]\n\u003e By default, all commands are executed in the current working directory.\n\u003e You can use the global `--working-dir` argument to specify the working directory, if necessary.\n\n### cti init\n\nInitializes a CTI package. Writes `index.json` and `.ramlx` folder with CTI specification files for RAMLx.\n\nExample:\n\n```\ncti init\n```\n\n### cti pkg get\n\n```\ncti pkg get \u003cgit_remote\u003e@\u003cgit_ref\u003e\n```\n\nFetches the package from the specified git remote and appends the package in the dependencies list of the current component.\n\nExample:\n\n```\ncti pkg get github.com/acronis/sample-package@v1\n```\n\n### cti validate\n\nParses and validates the package against RAMLx.\n\nExample:\n\n```\ncti validate\n```\n\n### cti pack\n\nPacks the package into a bundle. The valid package should be in the current working directory (or directory specified by `--working-dir`).\n\nExample:\n\n\n```shell\n\u003e cti pack --include-source --format zip --prefix output --output=sample-package.cti\n\n\u003e ls output\nsample-package.cti\n```\n\n#### --include-source\n\nIncludes the source files in the bundle. By default, the source files are not included.\nHidden files (starting with a dot) are not included in the bundle.\n\n#### --format\n\nThe format of the output bundle. Supported formats are `zip` and `tgz`. Default is `tgz`.\n\n#### --prefix\n\nThe directory where the output bundle will be saved. Default is `.`.\n\n#### --output\n\nThe name of the output bundle. Default is `bundle.cti`. Please note that the extension is not added automatically.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facronis%2Fgo-cti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facronis%2Fgo-cti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facronis%2Fgo-cti/lists"}