RepoPilotOpen in app →

ExtendRealityLtd/VRTK

An example of how to use the Tilia packages to create great content with VRTK v4.

Mixed

Stale — last commit 2y ago

worst of 4 axes
Use as dependencyMixed

last commit was 2y ago; no tests detected…

Fork & modifyMixed

no tests detected; no CI workflows detected…

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isMixed

last commit was 2y ago; no CI workflows detected

  • 4 active contributors
  • MIT licensed
  • Stale — last commit 2y ago
Show 4 more →
  • Small team — 4 contributors active in recent commits
  • Concentrated ownership — top contributor handles 63% of recent commits
  • No CI workflows detected
  • No test directory detected
What would change the summary?
  • Use as dependency MixedHealthy if: 1 commit in the last 365 days; add a test suite
  • Fork & modify MixedHealthy if: add a test suite
  • Deploy as-is MixedHealthy if: 1 commit in the last 180 days

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Great to learn from" badge

Paste into your README — live-updates from the latest cached analysis.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/extendrealityltd/vrtk?axis=learn)](https://repopilot.app/r/extendrealityltd/vrtk)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/extendrealityltd/vrtk on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: ExtendRealityLtd/VRTK

Generated by RepoPilot · 2026-05-10 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/ExtendRealityLtd/VRTK shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

WAIT — Stale — last commit 2y ago

  • 4 active contributors
  • MIT licensed
  • ⚠ Stale — last commit 2y ago
  • ⚠ Small team — 4 contributors active in recent commits
  • ⚠ Concentrated ownership — top contributor handles 63% of recent commits
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live ExtendRealityLtd/VRTK repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/ExtendRealityLtd/VRTK.

What it runs against: a local clone of ExtendRealityLtd/VRTK — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in ExtendRealityLtd/VRTK | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | Last commit ≤ 776 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>ExtendRealityLtd/VRTK</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of ExtendRealityLtd/VRTK. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/ExtendRealityLtd/VRTK.git
#   cd VRTK
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of ExtendRealityLtd/VRTK and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "ExtendRealityLtd/VRTK(\\.git)?\\b" \\
  && ok "origin remote is ExtendRealityLtd/VRTK" \\
  || miss "origin remote is not ExtendRealityLtd/VRTK (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift — was MIT at generation time"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 776 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~746d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/ExtendRealityLtd/VRTK"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

VRTK Farm Yard is a complete, runnable Unity VR example project demonstrating how to build spatial computing experiences using VRTK v4 and Tilia packages. It showcases interactive farm mechanics (bow shooting, bucket with rope physics, rotating mill, zip wire traversal) built on top of VRTK's modular VR toolkit architecture, targeting the newer Unity XR Management system and Input System (not legacy). Single-scene example project: Assets/Samples/Farm/ contains all game content (Animations/, Materials/, prefabs). Uses Unity scene structure with Animator controllers (ExtendableBucket.controller, RotatingFan.controller, etc.) and instanced materials (Instanced/). No modular package structure—this is a monolithic example referencing external Tilia packages via Unity's package management.

👥Who it's for

VR/spatial computing developers building on VRTK v4 who need a concrete example of how to assemble Tilia packages into a playable scene. Primary audience: intermediate Unity developers learning VRTK patterns, and teams evaluating VRTK as their VR framework foundation.

🌱Maturity & risk

Actively developed but incomplete: built on Unity 2020.3.24f1 (specified exact version), uses modern XR/Input systems, but README explicitly lists missing features (Drag World locomotion, PlayArea Boundary Cursor). Example is stable enough to run and learn from, but core VRTK v4 framework is still in transition from deprecated VRTK.Prefabs. Production-ready for learning; not a template for shipping titles yet.

Single-example risk: this repo only demonstrates the Farm Yard scene—if that scene has bugs or architectural anti-patterns, there's no alternative example to cross-reference. Beta disclaimer in README signals ongoing flux. Hard dependency on exact Unity 2020.3.24f1 version; downgrading risks breakage. Missing promised features (locomotion, boundary cursor) suggests scope creep or reprioritization. No visible CI/test infrastructure in file list.

Active areas of work

README indicates active development with recent Tilia package updates applied. Beta status suggests iterative refinement. The explicitly listed missing features (Drag World, PlayArea Boundary Cursor) are pending implementation. No commit history or PR data visible, but the project structure is complete and functional.

🚀Get running

git clone https://github.com/ExtendRealityLtd/VRTK.git
cd VRTK
# Open in Unity Hub or directly: Unity -projectPath . -version 2020.3.24f1

Then open the Farm scene in the Unity Editor. No command-line build or NPM setup required—this is a native Unity project.

Daily commands: Open the project in Unity Editor (2020.3.24f1 only), load Assets/Samples/Farm/ scene, press Play. No CLI build step or server required. For VR hardware, ensure XR Plugin Management is configured in Project Settings.

🗺️Map of the codebase

  • Assets/Samples/Farm/Animations/ExtendableBucket.controller: Defines the state machine for interactive bucket interaction—shows how Tilia packages drive Animator-based object behavior in VR
  • Assets/Samples/Farm/Materials/Instanced/: Directory of GPU-instanced materials used across interactive farm objects for rendering optimization in VR
  • README.md: Critical: lists exact Unity version requirement (2020.3.24f1) and explicit missing features (Drag World, Boundary Cursor)—ignoring this causes version incompatibility
  • .vsconfig: Visual Studio IDE configuration; may need inspection if IDE code completion fails for VRTK/Tilia APIs
  • .github/CONTRIBUTING.md: Contribution guidelines for submitting improvements or reporting issues specific to VRTK ecosystem

🛠️How to make changes

Start in Assets/Samples/Farm/ directory: modify Animator controllers (*.controller files) to change behavior timing, add new animations to Animations/ folder, create new interactive objects by cloning existing ones and swapping materials from Materials/Instanced/. To extend interactivity, examine prefab setup in the scene and modify C# scripts referenced by Tilia packages (not stored in this repo, pulled from external dependencies).

🪤Traps & gotchas

Critical: Must use exactly Unity 2020.3.24f1—README warns that downgrading causes issues and no version range is provided. Tilia packages are external dependencies pulled via Unity Package Manager; they are not in this repo, so missing them means the scene will not function (check Packages/manifest.json if not included in the listing). XR Plugin Management must be configured in Project Settings for hardware VR—not auto-configured. Missing scene files: Farm scene binary is not visible in file list; ensure you actually have Assets/Samples/Farm/Farm.unity downloaded, or the project will open without the playable scene. No C# source code visible in the top-60 files list despite '31720 bytes of C#'—scripts are likely in subdirectories not listed.

💡Concepts to learn

  • Unity Animator Controllers & State Machines — The Farm scene uses Animator controllers (ExtendableBucket.controller, RotatingFan.controller) as the primary interaction mechanism; understanding state transitions is essential to modifying behavior without C# scripting
  • GPU-Instanced Materials — Materials in Assets/Samples/Farm/Materials/Instanced/ use GPU instancing to render many objects efficiently in VR, critical for maintaining 90+ FPS framerate requirements
  • XR Plugin Management System — Project uses Unity's newer XR Plugin Management (not legacy VR) for device abstraction; understanding this system is required to add new VR hardware support or debug tracking issues
  • Input System (New) — README explicitly states this project uses the newer Unity Input System (not legacy); required for understanding how controller input maps to interactions
  • Spatial Computing & VR Interaction Patterns — VRTK v4 is built on spatial computing principles (hand presence, natural interaction, grab mechanics); learning this repo teaches modern VR UX patterns beyond traditional game mechanics
  • Modular VR Package Architecture (Tilia) — VRTK v4 shifted from monolithic VRTK.Prefabs to composable Tilia packages; this example demonstrates how to assemble independent packages (Interactions, Locomotion, Pointers) into cohesive behavior

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Complete missing Farm sample scene documentation and interaction examples

The README mentions the Farm Yard example is 'still in development and is missing a number of features from the previous release' but doesn't specify what's missing. With 20+ animation controllers, materials, and prefabs visible in Assets/Samples/Farm/, there's no corresponding documentation file explaining what each sample demonstrates (bow mechanics, bucket with rope, zip wire, mill, fan, etc.). A contributor could create Assets/Samples/Farm/README.md documenting each interaction example with usage instructions and Tilia package dependencies, making the repo immediately more valuable for new developers learning VRTK v4.

  • [ ] Create Assets/Samples/Farm/README.md documenting each animation controller (BowPull, BucketWithRope, ZipWire, MillRotatingBlades, RotatingFan, RotatingSail, AnimatedZipGrab)
  • [ ] Document which Tilia packages each sample requires and references
  • [ ] Add setup instructions for each sample scene interaction
  • [ ] Include screenshots or video links for each mechanic if available

Add GitHub Actions workflow to validate Unity project integrity and dependencies

The repo uses VRTK v4 and Tilia packages but has no CI workflow visible in .github/ to validate that: (1) the Unity project structure remains valid, (2) Tilia package dependencies are correctly declared in manifest.json, (3) no broken prefab references exist in the Farm samples, (4) the minimum required Unity version 2020.3.24f1 is documented and enforced. A contributor could create a GitHub Action that runs basic validation checks on pull requests to prevent dependency conflicts and broken samples.

  • [ ] Create .github/workflows/unity-validation.yml workflow file
  • [ ] Add validation for Packages/manifest.json to check Tilia package dependencies exist
  • [ ] Add check for broken references in Assets/Samples/Farm/**/*.prefab and **.unity files using a tool like UnityYAML parser or asset serialization checks
  • [ ] Document minimum Unity version requirement in the workflow and enforce it in validation

Create comprehensive VRTK v4 + Tilia setup guide in .github/CONTRIBUTING.md

The CONTRIBUTING.md file exists but likely lacks VRTK/Tilia-specific setup instructions. New contributors need clear guidance on: which Tilia packages to install, how to set up the XR management system (mentioned in README), how to configure the newer Unity Input System, and how to test the Farm samples locally. This is a barrier to contribution for developers unfamiliar with VRTK v4's dependency structure.

  • [ ] Expand .github/CONTRIBUTING.md with 'Development Setup' section
  • [ ] Document required Tilia packages and how to add them via git dependencies in manifest.json
  • [ ] Add XR management system and Input System configuration steps with screenshots
  • [ ] Include instructions for opening and testing Assets/Samples/Farm scenes locally
  • [ ] Link to official Tilia documentation for each package used in the farm example

🌿Good first issues

  • Implement Drag World locomotion (explicitly listed as missing in README). Start by examining existing Tilia.Locomotion package documentation and add a new locomotion prefab variant to the Farm scene; requires understanding VRTK's interaction model.
  • Add PlayArea Boundary Cursor visualization (explicitly missing). Create a simple quad-based cursor prefab in Assets/Samples/Farm/Prefabs/ that follows the play area boundary and integrates with VRTK's pointer system—good way to learn VRTK events.
  • Document the Animator controller state transitions in Assets/Samples/Farm/Animations/ with inline comments or a supplementary guide. The controllers are visually complex and lack code documentation—lowering the barrier for new learners.

Top contributors

Click to expand
  • @thestonefox — 63 commits
  • @extendreality — 22 commits
  • [@Christopher - Marcel Böddecker](https://github.com/Christopher - Marcel Böddecker) — 12 commits
  • [@Christopher-Marcel Böddecker](https://github.com/Christopher-Marcel Böddecker) — 3 commits

📝Recent commits

Click to expand
  • fe1a889 — Merge pull request #2143 from ExtendRealityLtd/feat/remove-malimbe (thestonefox)
  • ab36101 — feat(Malimbe): remove malimbe dependency (thestonefox)
  • 89147ed — Merge pull request #2142 from ExtendRealityLtd/feat/bump-versions (thestonefox)
  • 6f712fd — feat(manifest.json): bump dependency versions (thestonefox)
  • 5c51eab — Merge pull request #2141 from ExtendRealityLtd/feat/bump-versions (thestonefox)
  • c939c3d — feat(manifest.json): bump dependency versions (thestonefox)
  • b6f7f81 — Merge pull request #2140 from ExtendRealityLtd/feat/bump-packages (thestonefox)
  • 109065b — feat(manifest.json): bump packages to the latest version (thestonefox)
  • 172f402 — Merge pull request #2138 from ExtendRealityLtd/feat/dep-bump (thestonefox)
  • 6444b4d — feat(manifest.json): bump project dependencies (thestonefox)

🔒Security observations

This is a Unity-based example project with minimal direct security risks. The codebase consists primarily of asset files (animations, materials, configurations) rather than executable code. Primary concerns are: (1) the use of an older Unity version (2020.3.24f1) which may have unpatched vulnerabilities, (2) lack of visible dependency lock files making supply chain reproducibility uncertain, (3) incomplete dependency documentation, and (4) missing security reporting policy. No hardcoded credentials, injection vulnerabilities, or exposed infrastructure configurations are evident in the provided file structure. The project's security posture would benefit from upgrading Unity to a current LTS version, implementing proper dependency management practices, and establishing clear security policies.

  • Medium · Outdated Unity Version — README.md and project configuration. The project specifies Unity 2020.3.24f1, which is an older LTS version. While this was a stable version at release, it may contain unpatched security vulnerabilities. The project acknowledges potential compatibility issues with newer versions but doesn't address security updates. Fix: Evaluate and upgrade to the latest stable Unity LTS version (2022 LTS or later). Review Unity's security advisories for the current version and apply patches regularly.
  • Medium · Missing Dependency Lock File — Project root / Package management files. The provided dependency file content is empty. No lock file (package-lock.json, packages-lock.json, or similar) is visible in the file structure. This makes it impossible to verify that reproducible builds are using known-good versions of dependencies. Fix: Ensure a lock file is committed to version control. For Unity projects using UPM, verify package versions are pinned. Use manifest.json with exact versions for Tilia packages rather than version ranges.
  • Low · Incomplete Documentation of Dependencies — README.md and documentation. The README mentions dependency on Tilia packages and notes the project uses newer XR management and Input systems, but there is no comprehensive list of all external dependencies with version numbers provided. Fix: Create a comprehensive DEPENDENCIES.md file listing all Tilia and Unity packages with exact versions, including any known security issues. Document which packages have been audited for security.
  • Low · Missing Security Policy — .github directory. While the repository has CODE_OF_CONDUCT.md, CONTRIBUTING.md, and SUPPORT.md, there is no SECURITY.md file visible. This makes it unclear how security vulnerabilities should be reported. Fix: Create a SECURITY.md file documenting the responsible disclosure process for reporting security vulnerabilities. Include contact information and expected response timeframes.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · ExtendRealityLtd/VRTK — RepoPilot