{"id":48175616,"url":"https://github.com/loft-demos/vcluster-platform-demo-app-template","last_synced_at":"2026-04-04T17:37:17.895Z","repository":{"id":201015460,"uuid":"706760434","full_name":"loft-demos/vcluster-platform-demo-app-template","owner":"loft-demos","description":"Repository template for vCluster Platform demo environments.","archived":false,"fork":false,"pushed_at":"2026-03-29T13:43:02.000Z","size":1274,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-29T16:42:43.124Z","etag":null,"topics":["vcluster"],"latest_commit_sha":null,"homepage":"https://vcluster.com","language":"Shell","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/loft-demos.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":"2023-10-18T15:06:09.000Z","updated_at":"2026-03-29T13:43:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"d2d039f7-d855-45eb-9258-87134353ea50","html_url":"https://github.com/loft-demos/vcluster-platform-demo-app-template","commit_stats":null,"previous_names":["loft-demos/echo-app-template"],"tags_count":1,"template":true,"template_full_name":"km-demos/echo-app-template","purl":"pkg:github/loft-demos/vcluster-platform-demo-app-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loft-demos%2Fvcluster-platform-demo-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loft-demos%2Fvcluster-platform-demo-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loft-demos%2Fvcluster-platform-demo-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loft-demos%2Fvcluster-platform-demo-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loft-demos","download_url":"https://codeload.github.com/loft-demos/vcluster-platform-demo-app-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loft-demos%2Fvcluster-platform-demo-app-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"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":["vcluster"],"created_at":"2026-04-04T17:37:17.658Z","updated_at":"2026-04-04T17:37:17.880Z","avatar_url":"https://github.com/loft-demos.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vCluster Platform Demo Repository\n\nThis repo is the GitOps and use-case template for vCluster Platform demos.\n\nUse one of these entrypoints:\n\n- managed: [vcluster-platform-demo-generator.md](./vcluster-platform-demo-generator.md)\n- self-managed host cluster: [self-managed-demo-cluster/README.md](./self-managed-demo-cluster/README.md)\n- self-contained `vind`: [vind-demo-cluster/README.md](./vind-demo-cluster/README.md)\n\nIf you want the shortest path, use `vind`:\n\n```bash\nLICENSE_TOKEN=\"$TOKEN\" bash vind-demo-cluster/bootstrap-self-contained.sh\n```\n\nDefault `vind` values:\n\n- Forgejo org: `vcluster-demos`\n- Forgejo repo: `vcp-gitops`\n- demo image: pushed to `forgejo.vcp.local/vcluster-demos/vcp-gitops/vcp-gitops-demo-app`\n- local URLs:\n  - \u003chttps://vcp.local\u003e\n  - \u003chttps://argocd.vcp.local\u003e\n  - \u003chttps://forgejo.vcp.local\u003e\n- cluster shape: `1` control plane node, `2` worker nodes\n\nMain repo areas:\n\n- [vcluster-gitops/](./vcluster-gitops): Platform GitOps content, Argo CD bootstrap, projects, teams, secrets, templates\n- [vcluster-use-cases/](./vcluster-use-cases): demo use cases\n- [vind-demo-cluster/](./vind-demo-cluster): self-contained `vind` bootstrap\n- [scripts/](./scripts): local helper scripts\n- [docs/self-service-enablement/README.md](./docs/self-service-enablement/README.md): enablement demo flow for self-service provisioning, project multi-tenancy, and RBAC\n- [docs/secret-contract.md](./docs/secret-contract.md): secret contract for ESO / 1Password\n\n## Available Use Cases\n\n`vCP Free` below is based on the official feature comparison and free-tier overview:\n\n- [Compare pricing tiers](https://www.vcluster.com/docs/platform/free-vs-enterprise)\n- [vCluster Free announcement](https://www.vcluster.com/blog/launching-vcluster-free-get-enterprise-features-at-no-cost)\n\n`Yes` means the use case maps to features explicitly called out as available in the Free plan. `Enterprise` means it depends on features documented outside the Free plan. `Depends` means the repo example is mostly built from apps, templates, or external tooling and is not mapped cleanly to one specific line item in the pricing table.\n\n| Use case | What it demos | vCP Free | `vind` | Details / docs |\n| --- | --- | --- | --- | --- |\n| [`argocd-in-vcluster`](./vcluster-use-cases/argocd-in-vcluster/) | Installs a dedicated Argo CD instance inside selected vCluster instances and feeds it Git-based values. | `Enterprise` | `Yes` | [Repo](./vcluster-use-cases/argocd-in-vcluster/README.md), [vCP Argo CD integration](https://www.vcluster.com/docs/platform/integrations/argocd) |\n| [`argocd-vcluster-add-ons`](./vcluster-use-cases/argocd-vcluster-add-ons/) | Applies environment-specific add-ons to imported Argo CD clusters based on cluster labels like `dev`, `qa`, and `prod`. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/argocd-vcluster-add-ons/README.md), [vCP Argo CD integration](https://www.vcluster.com/docs/platform/integrations/argocd) |\n| [`argocd-vcluster-pull-request-environments`](./vcluster-use-cases/argocd-vcluster-pull-request-environments/) | Creates ephemeral pull request environments with Argo CD, including preview apps and vCluster instances per PR. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/argocd-vcluster-pull-request-environments/README.md), [vCP Argo CD integration](https://www.vcluster.com/docs/platform/integrations/argocd) |\n| [`auto-nodes`](./vcluster-use-cases/private-nodes/auto-nodes/) | Auto-provisions pod-backed worker nodes for vCluster instances using the vCluster Platform Auto Nodes feature and the pod-node Terraform provider. | `Enterprise` | `Yes` | [Repo](./vcluster-use-cases/private-nodes/auto-nodes/) |\n| [`auto-snapshots`](./vcluster-use-cases/auto-snapshots/) | Automatic backup and restore of vCluster instances to S3-compatible storage (MinIO for vind). | `Enterprise` | `No*` | [Repo](./vcluster-use-cases/auto-snapshots/README.md), [Snapshots](https://www.vcluster.com/docs/platform/use-platform/virtual-clusters/key-features/snapshots) |\n| [`central-admission-control`](./vcluster-use-cases/central-admission-control/) | Centralized policy enforcement with Kyverno and host-level admission control for virtual clusters. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/central-admission-control/) |\n| [`connected-host-cluster`](./vcluster-use-cases/connected-host-cluster/) | Registers another cluster, or another vCluster instance, as an additional host cluster for vCluster Platform. | `Yes` | `TBD` | [Repo](./vcluster-use-cases/connected-host-cluster/README.md), [Connect a cluster](https://www.vcluster.com/docs/platform/next/administer/clusters/connect-cluster) |\n| [`continuous-promotion`](./vcluster-use-cases/continuous-promotion/) | Uses Kargo, Argo CD, sleeping vCluster instances, and a shared-node pre-prod gate where the app can consume host-managed ESO-backed config before promotion. | `Depends` | `Yes` | [Repo](./vcluster-use-cases/continuous-promotion/README.md), [Kargo](https://docs.kargo.io) |\n| [`crossplane`](./vcluster-use-cases/crossplane/) | Crossplane providers, compositions, and claims used for webhook automation and PR environment orchestration. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/crossplane/README.md) |\n| [`custom-resource-definitions`](./vcluster-use-cases/custom-resource-definitions/) | Reserved area for CRD-focused demos and examples that depend on installing or exposing custom resource definitions. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/custom-resource-definitions/) |\n| [`custom-resource-sync`](./vcluster-use-cases/custom-resource-sync/) | Syncs CloudNative PG `Cluster` resources from a vCluster to a host-side CNPG operator. | `Yes` | `TBD` | [Repo](./vcluster-use-cases/custom-resource-sync/), [Custom resources to host](https://www.vcluster.com/docs/vcluster/configure/vcluster-yaml/sync/to-host/advanced/custom-resources) |\n| [`database-connector`](./vcluster-use-cases/database-connector/) | Uses the vCluster Platform database connector with CloudNative PG as an external backing store for vCluster instances. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/database-connector/README.md), [Database connector](https://www.vcluster.com/docs/platform/administer/connector/database) |\n| [`external-secrets-operator`](./vcluster-use-cases/external-secrets-operator/) | Installs ESO and shows how to integrate external secret delivery into vCluster and Platform flows. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/external-secrets-operator/README.md), [External Secrets integration](https://www.vcluster.com/docs/vcluster/integrations/external-secrets/external-secrets) |\n| [`flux`](./vcluster-use-cases/flux/) | Flux Operator, Flux-managed vCluster instances, and Flux-based pull request environments. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/flux/README.md) |\n| [`kai-scheduler`](./vcluster-use-cases/kai-scheduler/) | Runs vCluster workloads against a host-installed KAI scheduler instead of the default scheduling path. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/kai-scheduler/shared-from-host/README.md) |\n| [`namespace-sync`](./vcluster-use-cases/namespace-sync/) | Namespace sync plus Argo CD `Application` sync back to the host cluster. | `Yes` | `TBD` | [Repo](./vcluster-use-cases/namespace-sync/README.md), [Namespace sync](https://www.vcluster.com/docs/vcluster/configure/vcluster-yaml/sync/to-host/advanced/namespaces) |\n| [`pod-identity`](./vcluster-use-cases/pod-identity/) | EKS Pod Identity with synced `PodIdentityAssociation` resources for AWS access from workloads in a vCluster. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/pod-identity/eks/README.md) |\n| [`pod-security-standards`](./vcluster-use-cases/pod-security-standards/) | Enforces Pod Security Standards inside the vCluster API server with an admission configuration. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/pod-security-standards/README.md) |\n| [`private-nodes`](./vcluster-use-cases/private-nodes/) | Manual Private Nodes flow for attaching dedicated external compute to a vCluster instance, including an OrbStack VM path for `vind`. | `Yes` | `Yes` | [Repo](./vcluster-use-cases/private-nodes/README.md) |\n| [`rancher-integration`](./vcluster-use-cases/rancher-integration/) | Rancher integration examples for deploying and wiring Rancher alongside vCluster Platform. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/rancher-integration/) |\n| [`resolve-dns`](./vcluster-use-cases/resolve-dns/) | Cross-vCluster DNS resolution with embedded CoreDNS and `resolveDNS` mappings. | `Yes` | `TBD` | [Repo](./vcluster-use-cases/resolve-dns/README.md), [Resolve DNS](https://www.vcluster.com/docs/vcluster/configure/vcluster-yaml/networking/resolve-dns) |\n| [`tenant-observability`](./vcluster-use-cases/tenant-observability/) | Tenant-scoped Grafana, Loki, and Prometheus inside each vCluster using Central HostPath Mapper plus Promtail for log collection. | `Enterprise` | `Yes` | [Repo](./vcluster-use-cases/tenant-observability/README.md), [Central HostPath Mapper](https://www.vcluster.com/docs/platform/maintenance/monitoring/central-hostpath-mapper) |\n| [`virtual-scheduler`](./vcluster-use-cases/virtual-scheduler/) | Enables the Kubernetes scheduler, or other schedulers, inside a vCluster. | `Depends` | `TBD` | [Repo](./vcluster-use-cases/virtual-scheduler/README.md), [Sync nodes from host](https://www.vcluster.com/docs/vcluster/configure/vcluster-yaml/sync/from-host/nodes) |\n| [`vnode-with-vcluster`](./vcluster-use-cases/vnode-with-vcluster/) | Uses vNode with vCluster for stronger workload isolation and breakout demos. | `Enterprise` | `TBD` | [Repo](./vcluster-use-cases/vnode-with-vcluster/README.md), [vNode docs](https://www.vnode.com/docs) |\n\n`vind` above is the current self-contained OrbStack-backed path:\n\n- `Yes` means the use case has been validated on `vind`\n- `TBD` means it has not been fully validated on `vind` yet\n- `No*` means the overlay code exists but the use case is temporarily disabled due to an upstream blocker\n\n## Enable Use Cases Directly with `cluster-local`\n\nBoth the Demo Generator path and the self-contained `vind` path use the Argo CD\ncluster secret named `cluster-local` in namespace `argocd` to decide which\nuse-case `ApplicationSet`s should match the local management cluster.\n\nThat means you can enable or disable use cases directly with `kubectl label`\nwithout rerunning the full bootstrap.\n\nExample:\n\n```bash\nkubectl -n argocd label secret cluster-local \\\n  eso=true \\\n  autoSnapshots=true \\\n  flux=true \\\n  crossplane=false \\\n  rancher=false \\\n  --overwrite\n```\n\nDisable a use case:\n\n```bash\nkubectl -n argocd label secret cluster-local customResourceSync=false --overwrite\n```\n\nEnable a few more use cases with the exact label keys:\n\n```bash\nkubectl -n argocd label secret cluster-local \\\n  argoCdInVcluster=true \\\n  customResourceSync=true \\\n  cnpg=true \\\n  connectedHostCluster=true \\\n  namespaceSync=true \\\n  privateNodes=true \\\n  resolveDNS=true \\\n  tenantObservability=true \\\n  virtualScheduler=true \\\n  --overwrite\n```\n\nTypical flow:\n\n1. connect `kubectl` to the demo environment management cluster\n2. update one or more labels on `argocd/cluster-local`\n3. wait for Argo CD to refresh the matching `ApplicationSet`s and `Application`s\n\nThe label keys currently used by the repo are:\n\n| Use case | `cluster-local` label |\n| --- | --- |\n| `argocd-in-vcluster` | `argoCdInVcluster` |\n| `auto-nodes` | `autoNodes` |\n| `auto-snapshots` | `autoSnapshots` |\n| `connected-host-cluster` | `connectedHostCluster` |\n| `continuous-promotion` | `continuousPromotion` |\n| `crossplane` | `crossplane` |\n| `custom-resource-sync` | `customResourceSync` |\n| `eso` | `eso` |\n| `flux` | `flux` |\n| `kyverno` | `kyverno` |\n| `database-connector` | `databaseConnector` |\n| `namespace-sync` | `namespaceSync` |\n| `private-nodes` | `privateNodes` |\n| `rancher` | `rancher` |\n| `resolve-dns` | `resolveDNS` |\n| `tenant-observability` | `tenantObservability` |\n| `virtual-scheduler` | `virtualScheduler` |\n| `vnode` | `vnode` |\n\nAdditional behavior toggle:\n\n| Purpose | `cluster-local` label |\n| --- | --- |\n| install the shared host-side CNPG operator for `database-connector` and `custom-resource-sync` | `cnpg` |\n| opt into the legacy Argo CD-managed Kargo install for `continuous-promotion` | `legacyArgoKargo` |\n\nNotes:\n\n- on the `vind` path, the bootstrap `--use-cases` flag writes these labels for you\n- on the `vind` path, `cnpg` is derived automatically when either `database-connector` or `custom-resource-sync` is enabled\n- if you edit `argocd/cluster-local` manually, set `cnpg=true` whenever either `databaseConnector=true` or `customResourceSync=true`\n- on the `vind` self-contained path, `legacyArgoKargo` is derived automatically when `continuous-promotion` is enabled without `flux`, so you do not need to set that label by hand\n- on the Demo Generator path, the initial values usually come from template parameters and the generated cluster secret\n- changing the secret directly is the fastest way to test another combination after the environment already exists\n\nFor the self-contained path, the Argo CD root app is:\n\n- [root-application.yaml](./vcluster-gitops/overlays/local-contained/root-application.yaml)\n\nThe self-contained Git overlay is:\n\n- [vcluster-gitops/overlays/local-contained/README.md](./vcluster-gitops/overlays/local-contained/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floft-demos%2Fvcluster-platform-demo-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floft-demos%2Fvcluster-platform-demo-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floft-demos%2Fvcluster-platform-demo-app-template/lists"}