{"id":22598918,"url":"https://github.com/projectsveltos/ui-backend","last_synced_at":"2026-03-08T10:01:12.657Z","repository":{"id":235517046,"uuid":"790230830","full_name":"projectsveltos/ui-backend","owner":"projectsveltos","description":"This repo contains a service that provides all APIs Sveltos dashboard uses","archived":false,"fork":false,"pushed_at":"2026-01-10T08:37:35.000Z","size":585,"stargazers_count":2,"open_issues_count":1,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T02:43:08.629Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/projectsveltos.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-04-22T13:58:34.000Z","updated_at":"2026-01-10T08:37:06.000Z","dependencies_parsed_at":"2024-05-20T07:25:27.731Z","dependency_job_id":"b65b28e4-69dd-46b0-8036-744654796573","html_url":"https://github.com/projectsveltos/ui-backend","commit_stats":null,"previous_names":["projectsveltos/ui-backend"],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/projectsveltos/ui-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Fui-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Fui-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Fui-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Fui-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/projectsveltos","download_url":"https://codeload.github.com/projectsveltos/ui-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Fui-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29443468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T10:51:12.367Z","status":"ssl_error","status_checked_at":"2026-02-14T10:50:52.088Z","response_time":53,"last_error":"SSL_read: 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":[],"created_at":"2024-12-08T11:07:27.435Z","updated_at":"2026-02-14T12:08:46.152Z","avatar_url":"https://github.com/projectsveltos.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://github.com/projectsveltos/ui-backend/actions/workflows/main.yaml/badge.svg)](https://github.com/projectsveltos/ui-backend/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/projectsveltos/ui-backend)](https://goreportcard.com/report/github.com/projectsveltos/ui-backend)\n[![Release](https://img.shields.io/github/v/release/projectsveltos/ui-backend)](https://github.com/projectsveltos/ui-backend/releases)\n[![Slack](https://img.shields.io/badge/join%20slack-%23projectsveltos-brighteen)](https://join.slack.com/t/projectsveltos/shared_invite/zt-1hraownbr-W8NTs6LTimxLPB8Erj8Q6Q)\n[![License](https://img.shields.io/badge/license-Apache-blue.svg)](LICENSE)\n[![Twitter Follow](https://img.shields.io/twitter/follow/projectsveltos?style=social)](https://twitter.com/projectsveltos)\n\n\u003cimg src=\"https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/logo.png\" width=\"200\"\u003e\n\nPlease refere to sveltos [documentation](https://projectsveltos.github.io/sveltos/).\n\n## What this repository is\nThis repo contains a service that exposes all APIs used by Sveltos frontend.\n\n### Authorization Header\n\nUsing authorization header is the only way to contact backend as an user, when accessing it over HTTP.\nTo use authorization header you simply need to pass `Authorization: Bearer \u003ctoken\u003e` in every request.\nTo create sample user and to get its token, see [Creating sample user](#how-to-get-token) guide.\n\n### Get ClusterAPI powered clusters\n\n```/capiclusters```\n\n\nIt is possible to filter by:\n\n. ```namespace=\u003cstring\u003e``` =\u003e returns only ClusterAPI powered clusters in a namespace whose name contains the speficied string\n\n. ```name=\u003cstring\u003e``` =\u003e returns only ClusterAPI powered clusters whose name contains the speficied string\n\n. ```labels=\u003ckey1=value1,key2=value2\u003e``` =\u003e returns only ClusterAPI powered clusters whose label matches the specified label selector\n\nFor instance:\n\n```\nhttp://localhost:9000/capiclusters?limit=1\u0026skip=0\u0026namespace=default\u0026labels=env:fv,cluster.x-k8s.io%2Fcluster-name:clusterapi-workload\n```\n\nreturns\n\n```json\n{\n  \"totalClusters\": 1,\n  \"managedClusters\": [\n    {\n      \"namespace\": \"default\",\n      \"name\": \"clusterapi-workload\",\n      \"clusterInfo\": {\n        \"labels\": {\n          \"cluster.x-k8s.io/cluster-name\": \"clusterapi-workload\",\n          \"env\": \"fv\",\n          \"topology.cluster.x-k8s.io/owned\": \"\"\n        },\n        \"version\": \"v1.27.0\",\n        \"ready\": true,\n        \"failureMessage\": null\n      }\n    }\n  ]\n}\n```\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of ClusterAPI powered clusters the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which ClusterAPI powered cluster to start (Clusters are ordered by namespace/name)\n\n### Get SveltosClusters\n\n```/sveltosclusters```\n\n\nIt is possible to filter by:\n\n. ```namespace=\u003cstring\u003e``` =\u003e returns only SveltosClusters in a namespace whose name contains the speficied string\n\n. ```name=\u003cstring\u003e``` =\u003e returns only SveltosClusters whose name contains the speficied string\n\n. ```labels=\u003ckey1=value1,key2=value2\u003e``` =\u003e returns only SveltosClusters whose label matches the specified label selector\n\nFor instance:\n\n```\nhttp://localhost:9000/sveltosclusters?limit=1\u0026skip=0\u0026namespace=mgmt\u0026name=mgmt\n```\n\nreturns\n\n```json\n{\n  \"totalClusters\": 1,\n  \"managedClusters\": [\n    {\n      \"namespace\": \"mgmt\",\n      \"name\": \"mgmt\",\n      \"clusterInfo\": {\n        \"labels\": null,\n        \"version\": \"v1.29.0\",\n        \"ready\": true,\n        \"failureMessage\": null\n      }\n    }\n  ]\n}\n```\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of SveltosClusters the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which SveltosClusters to start (Clusters are ordered by namespace/name)\n\n### Get Helm Releases deployed in a cluster\n\n```/helmcharts?namespace=\u003cnamespace\u003e\u0026name=\u003ccluster-name\u003e\u0026type=\u003ccluster type\u003e```\n\nwhere cluster type can either be __capi__ for ClusterAPI powered clusters or __sveltos__ for SveltosClusters\n\nIt is also possible to filter helm charts by:\n\n1. `release_namespace` =\u003e filter deployed helm charts by release namespace\n2. `release_name` =\u003e filter deployed helm charts by release name\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of helm releases the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which Helm release to start (Helm Releases are ordered by lastAppliedTime)\n\nFor instance:\n\n```\nhttp://localhost:9000/helmcharts?namespace=default\u0026name=clusterapi-workload\u0026type=capi\n```\n\nreturns\n\n```json\n{\n  \"totalHelmReleases\": 4,\n  \"helmReleases\": [\n    {\n      \"repoURL\": \"https://prometheus-community.github.io/helm-charts\",\n      \"releaseName\": \"prometheus\",\n      \"namespace\": \"prometheus\",\n      \"chartVersion\": \"23.4.0\",\n      \"icon\": \"https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png\",\n      \"lastAppliedTime\": \"2024-04-28T13:49:29Z\",\n      \"profileName\": \"ClusterProfile/prometheus-grafana\"\n    },\n    {\n      \"repoURL\": \"https://grafana.github.io/helm-charts\",\n      \"releaseName\": \"grafana\",\n      \"namespace\": \"grafana\",\n      \"chartVersion\": \"6.58.9\",\n      \"icon\": \"https://raw.githubusercontent.com/grafana/grafana/master/public/img/logo_transparent_400x.png\",\n      \"lastAppliedTime\": \"2024-04-28T13:49:38Z\",\n      \"profileName\": \"ClusterProfile/prometheus-grafana\"\n    },\n    {\n      \"repoURL\": \"https://kyverno.github.io/kyverno/\",\n      \"releaseName\": \"kyverno-latest\",\n      \"namespace\": \"kyverno\",\n      \"chartVersion\": \"3.1.4\",\n      \"icon\": \"https://github.com/kyverno/kyverno/raw/main/img/logo.png\",\n      \"lastAppliedTime\": \"2024-04-28T13:49:32Z\",\n      \"profileName\": \"ClusterProfile/deploy-kyverno\"\n    },\n    {\n      \"repoURL\": \"https://helm.nginx.com/stable/\",\n      \"releaseName\": \"nginx-latest\",\n      \"namespace\": \"nginx\",\n      \"chartVersion\": \"1.1.3\",\n      \"icon\": \"https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v3.4.3/charts/nginx-ingress/chart-icon.png\",\n      \"lastAppliedTime\": \"2024-04-28T13:49:36Z\",\n      \"profileName\": \"ClusterProfile/nginx\"\n    }\n  ]\n}\n```\n### Get Kubernetes Resources deployed in a cluster\n\n```/resources?namespace=\u003cnamespace\u003e\u0026name=\u003ccluster-name\u003e\u0026type=\u003ccluster type\u003e```\n\nwhere cluster type can either be __capi__ for ClusterAPI powered clusters or __sveltos__ for SveltosClusters\n\nIt is also possible to filter helm charts by:\n\n1. `resource_namespace` =\u003e filter deployed resources by namespace\n2. `resource_name` =\u003e filter deployed resources by name\n2. `resource_kind` =\u003e filter deployed resources by kind\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of Kubernetes resources the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which Kubernetes resources to start (Kubernetes resources are ordered by lastAppliedTime)\n\nFor instance:\n\n```\nhttp://localhost:9000/resources?namespace=default\u0026name=clusterapi-workload\u0026type=capi\n```\n\nreturns\n\n```json\n{\n  \"totalResources\": 2,\n  \"resources\": [\n    {\n      \"name\": \"nginx\",\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\",\n      \"lastAppliedTime\": \"2024-04-28T13:52:26Z\",\n      \"profileNames\": [\n        \"ClusterProfile/deploy-resources\"\n      ]\n    },\n    {\n      \"name\": \"\",\n      \"group\": \"\",\n      \"kind\": \"\",\n      \"version\": \"\",\n      \"profileNames\": null\n    }\n  ]\n}\n```\n\n### Get Cluster Status\n\n```/getClusterStatus?namespace=\u003cnamespace\u003e\u0026name=\u003ccluster-name\u003e\u0026type=\u003ccluster-type\u003e```\n\nwhere cluster type can either be __capi__ for ClusterAPI powered clusters or __sveltos__ for SveltosClusters\n\nIt is also possible to filter helm charts by:\n\n1. `profile_name` =\u003e filter profiles by name\n2. `profile_kind` =\u003e filter profiles by kind\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of Kubernetes resources the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which Kubernetes resources to start (Kubernetes resources are ordered by lastAppliedTime)\n\nFor instance:\n\n```\nhttp://localhost:9000/resources?namespace=default\u0026name=clusterapi-workload\u0026type=capi\n```\n\nreturns\n\n```json\n{\n  \"profiles\": [\n    {\n      \"profileName\": \"deploy-kyverno\",\n      \"profileType\": \"ClusterProfile\",\n      \"featureID\": \"Helm\",\n      \"status\": \"Provisioned\"\n    },\n    {\n      \"profileName\": \"deploy-resources\",\n      \"profileType\": \"ClusterProfile\",\n      \"featureID\": \"Resources\",\n      \"status\": \"Provisioned\"\n    },\n    {\n      \"profileName\": \"nginx\",\n      \"profileType\": \"ClusterProfile\",\n      \"featureID\": \"Helm\",\n      \"status\": \"Provisioned\"\n    }\n  ],\n  \"totalResources\": 3\n}\n```\n\n### Get profiles\n\n```/profiles```\n\nIt is possible to filter by:\n\n. ```namespace=\u003cstring\u003e``` =\u003e returns only Profiles in a namespace whose name contains the speficied string\n\n. ```name=\u003cstring\u003e``` =\u003e returns only ClusterProfiles/Profiles whose name contains the speficied string\n\nreturns all profiles grouped by tier.\nEach profile contains:\n\n- Kind: kind of the profile (ClusterProfile vs Profile)\n- Namespace: namespace of the profile (empty for ClusterProfiles)\n- Name: name of the profile\n- Dependencies: list of profiles the profile depends on\n- Dependents: list of profiles that depend on this profile\n\n```yaml\n'100':\n  totalProfiles: 4\n  profiles:\n  - kind: ClusterProfile\n    namespace: ''\n    name: deploy-kyverno\n    dependencies: []\n    dependents:\n    - kind: ClusterProfile\n      name: prometheus-grafana\n      apiVersion: config.projectsveltos.io/v1beta1\n  - kind: ClusterProfile\n    namespace: ''\n    name: nginx\n    dependencies: []\n    dependents: []\n  - kind: ClusterProfile\n    namespace: ''\n    name: prometheus-grafana\n    dependencies:\n    - kind: ClusterProfile\n      name: deploy-kyverno\n      apiVersion: config.projectsveltos.io/v1beta1\n    dependents: []\n  - kind: Profile\n    namespace: coke\n    name: deploy-cert-manager\n    dependencies: []\n    dependents: []\n'200':\n  totalProfiles: 1\n  profiles:\n  - kind: ClusterProfile\n    namespace: ''\n    name: external-dns\n    dependencies: []\n    dependents: []\n```\n\n### Get a profile instance\n\n```/profile?namespace=\u003cprofile namespace\u003e\u0026name=\u003cprofile name\u003e\u0026kind=\u003cprofile kind\u003e```\n\nKind can either be:\n- ClusterProfile\n- Profile\n\nClusterProfiles are cluster wide resources. Profiles are namespaced resources. So namespace is *only* required for Profile.\n\nResponse contains:\n\n- Kind: kind of the profile (ClusterProfile vs Profile)\n- Namespace: namespace of the profile (empty for ClusterProfiles)\n- Name: name of the profile\n- Dependencies: list of profiles the profile depends on\n- Dependents: list of profiles that depend on this profile\n- Spec: profile's spec\n- MatchingClusters: list of clusters matching this profile. This list contains *only* the clusters users has permission for. For each cluster, status of each feature (helm charts, raw yaml/json, kustomize)\nSo if both coke and pepsi clusters are matching a profile, coke admin will only see coke clusters and pepsi admin will only\nsee pepsi clusters. Platform admin will see both in the response.\n\n```yaml\nmatchingClusters:\n- cluster:\n    kind: Cluster\n    namespace: default\n    name: clusterapi-workload\n    apiVersion: cluster.x-k8s.io/v1beta1\n  clusterFeatureSummaries:\n  - featureID: Resources\n    status: Provisioned\n  - featureID: Helm\n    status: FailedNonRetriable\n    failureMessage: 'cannot manage chart kyverno/kyverno-latest. ClusterSummary deploy-kyverno-capi-clusterapi-workload\n      managing it.'\nspec:\n  clusterSelector:\n    matchLabels:\n      env: fv\n  syncMode: Continuous\n  tier: 100\n  stopMatchingBehavior: WithdrawPolicies\n  dependsOn:\n  - deploy-kyverno\n  policyRefs:\n  - namespace: default\n    name: disallow-latest-tag\n    kind: ConfigMap\n    deploymentType: Remote\n  - namespace: default\n    name: disallow-empty-ingress\n    kind: ConfigMap\n    deploymentType: Remote\n  helmCharts:\n  - repositoryURL: https://kyverno.github.io/kyverno/\n    repositoryName: kyverno\n    chartName: kyverno/kyverno\n    chartVersion: v3.2.6\n    releaseName: kyverno-latest\n    releaseNamespace: kyverno\n    helmChartAction: Install\n```\n\n### Get list of EventTriggers\n\n```/events```\n\nThis API supports pagination. Use:\n\n. ```limit=\u003cint\u003e``` to specify the number of Kubernetes resources the API will return\n\n. ```skip=\u003cint\u003e``` to specify from which Kubernetes resources to start (Kubernetes resources are ordered by lastAppliedTime)\n\n```json\n{\"totalEvents\":1,\"eventTriggers\":[{\"name\":\"service-network-policy\",\"matchingClusters\":1}]}%\n```\n\n### Get EventTrigger Details\n\n```event?name=\u003ceventTrigger name\u003e```\n\nResponse contains:\n\n- Name: name of the eventTrigger\n- clusterSelector: eventTrigger's clusterSelector\n- referenced EventSource\n- MatchingClusters: list of clusters matching this profile. This list contains *only* the clusters users has permission for. For each cluster, list of resources matching the event\n\n```json\n{\"eventTriggerName\":\"service-network-policy\",\"clusterSelector\":{\"matchLabels\":{\"env\":\"fv\"}},\"eventSource\":{\"kind\":\"EventSource\",\"apiVersion\":\"lib.projectsveltos.io/v1beta1\",\"metadata\":{\"name\":\"sveltos-service\"},\"spec\":{\"resourceSelectors\":[{\"group\":\"\",\"version\":\"v1\",\"kind\":\"Service\",\"labelFilters\":[{\"key\":\"sveltos\",\"operation\":\"Equal\",\"value\":\"fv\"}]}],\"collectResources\":true}},\"clusterEventMatches\":[{\"clusterNamespace\":\"default\",\"clusterName\":\"clusterapi-workload\",\"clusterKind\":\"Cluster\",\"labels\":{\"cluster.x-k8s.io/cluster-name\":\"clusterapi-workload\",\"env\":\"fv\",\"sveltos-agent\":\"present\",\"topology.cluster.x-k8s.io/owned\":\"\"},\"version\":\"v1.35.0\",\"ready\":true,\"paused\":true,\"failureMessage\":null,\"resources\":[{\"name\":\"my-service\",\"namespace\":\"default\",\"group\":\"\",\"kind\":\"Service\",\"version\":\"\",\"profileNames\":null}]}]}\n```\n\n### How to get token\n\nFirst, create a service account in the desired namespace:\n\n```\nkubectl create sa \u003cuser\u003e -n \u003cnamespace\u003e\n```\n\nGive the service account permissions to access the Calico Enterprise Manager UI, and a Calico Enterprise cluster role:\n\n```\nkubectl create clusterrolebinding \u003cbinding_name\u003e --clusterrole \u003crole_name\u003e --serviceaccount \u003cnamespace\u003e:\u003cservice_account\u003e\n```\n\nwhere:\n\n- **binding_name** is a descriptive name for the rolebinding.\n- **role_name** is one of the default cluster roles (or a custom cluster role) specifying permissions.\n- **namespace** is the service account's namespace.\n- **service_account** is the service account that the permissions are being associated with.\n\nNext, create a bearer token for the service account. Using the running example of a service account named, sveltos in the _default_ namespace:\n\n```\nkubectl create token sveltos --duration=24h\n```\n\nit should print somthing like\n\n```\neyJhbGciOiJSUzI1NiIsImtpZCI6IkVsYW8zRU9BMWw3UTZ2QUpjNGFRLXljcTU4M1NhaXBZd1ZNWXJySkVtMTAifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzI4NzE3NjA0LCJpYXQiOjE3Mjg2MzEyMDQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZmQ1OWU4OTctODZlNS00MDQ4LWEwZjAtMDMxYjM5MjVlYjQwIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJwbGF0Zm9ybSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJtZ2lhbmx1YyIsInVpZCI6ImJjZWUwZDEwLWM2MTQtNDIzNi1iNmZmLTAyYWU2M2M1MjcxZiJ9fSwibmJmIjoxNzI4NjMxMjA0LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6cGxhdGZvcm06bWdpYW5sdWMifQ.JlEN38Whyb4mlNsWkC4RAQ82dVUJmWvmdvar7VVxEw2SUgoQthQQPsV-l28bGYpuQspFlsdaO2JRdhm6MGctlMJziweHHm3PNv_RBnFMPRQ01y7ciaRZXE7HEB3sAndvBEQKNWyo4wmmyRnEE2tR79ICQRTLmuWO17MjRIZFChXMHsCsam5OsuE6mE1fj3RSUSbvfRbQwrsTcWOrnYxzquyNVyJyOKxQ97Nm175rez5x9EflHPwueYu5FmNgz3cxMsdkHwkrMnhMqMyNN8WBqKUrju-gPJ9GB-cOcrR_38JyeQBPXYTo9J0tueIWEyaiwKvmPqAsnyHKPT5p-7hFCQ\n```\n\n## Contributing\n\n❤️ Your contributions are always welcome! If you want to contribute, have questions, noticed any bug or want to get the latest project news, you can connect with us in the following ways:\n\n1. Open a bug/feature enhancement on github [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/projectsveltos/sveltos-manager/issues)\n2. Chat with us on the Slack in the #projectsveltos channel [![Slack](https://img.shields.io/badge/join%20slack-%23projectsveltos-brighteen)](https://join.slack.com/t/projectsveltos/shared_invite/zt-1hraownbr-W8NTs6LTimxLPB8Erj8Q6Q)\n3. [Contact Us](mailto:support@projectsveltos.io)\n\n## License\n\nCopyright 2022.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectsveltos%2Fui-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprojectsveltos%2Fui-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectsveltos%2Fui-backend/lists"}