Arsist is a cross-platform development engine for AR glasses. Built with Electron and React, the editor provides integrated editing of scenes, UI, and logic, generating device-ready applications through Unity batch builds.
- Requirements
- Quick Start
- SDK Setup
- Project Structure
- Usage Guide
- Building Applications
- Device Adapters
- Scripting
- Troubleshooting
- Node.js: 18 or higher
- Unity: 2022.3.20f1 LTS or higher
- XREAL SDK: 3.1.0 or higher
- Meta Quest SDK: Core package (
com.meta.xr.sdk.core-*.tgz) - UniVRM: 0.131.0 or higher (for VRM avatar support)
- XREAL One / One Pro
- Meta Quest (Quest 2, Quest 3, Quest Pro)
git clone https://github.com/rintaro-s/Arsist-EN.git
cd Arsist-EN
npm installl2. Set Up SDKs (see SDK Setup below)
npm run devThe Arsist Editor will open. You can now create your first AR project!
The sdk/ directory at the repository root must contain all required SDKs and dependencies. Follow these steps carefully:
Your sdk/ folder should look like this:
sdk/
├── com.xreal.xr/
│ └── package/
│ ├── package.json
│ ├── Runtime/
│ ├── Editor/
│ └── ...
├── quest/
│ ├── com.meta.xr.sdk.core-XX.X.X.tgz
│ ├── com.meta.xr.mrutilitykit-XX.X.X.tgz (optional)
│ └── Unity-InteractionSDK-Samples/ (optional, for bootstrap)
├── nupkg/
│ ├── jint.X.X.X.nupkg
│ └── esprima.X.X.X.nupkg
├── UniVRM-0.131.0_3b99.unitypackage
├── JKG-M3.unitypackage
└── JKG-M_3.ttf
─ JKG-M_3.ttf
For XREAL One / XREAL Air 2 development:
- Download XREAL SDK 3.1.0+ from XREAL Developer Portal
- Extract the UPM package to
sdk/com.xreal.xr/package/ - Verify
sdk/com.xreal.xr/package/package.jsonexists
Verification:
- Open Arsist Editor → Settings (Ctrl+,) → SDK (XREAL) section
- Status should show "OK" with detected version
For Meta Quest development:
- Download Meta XR All-in-One SDK from Meta Developer Portal
- Extract and locate these
.tgzfiles:com.meta.xr.sdk.core-XX.X.X.tgz(required)com.meta.xr.mrutilitykit-XX.X.X.tgz(optional)
- Place them in
sdk/quest/
(Downloading in .tgz format may be difficult.)
Optional - Quest Sample Bootstrap:
- If you have Unity-InteractionSDK-Samples, place the entire folder in
sdk/quest/ - This provides XR settings and configurations that will be auto-applied
Verification:
- Open Arsist Editor → Settings → SDK (Quest) section
- Core package status should show "OK"
For VRM avatar support:
- Download UniVRM from VRM Consortium
- Place
UniVRM-0.131.0_3b99.unitypackageinsdk/
For Japanese text rendering (optional):
https://font.cutegirl.jp/jk-font-medium.html
- Place
JKG-M3.unitypackageinsdk/ - Place
JKG-M_3.ttfinsdk/
For JavaScript runtime in Unity:
- Download Jint and Esprima NuGet packages
- Place in
sdk/nupkg/:jint.X.X.X.nupkgesprima.X.X.X.nupkg
How to get NuGet packages:
# Using NuGet CLI
nuget install Jint -OutputDirectory sdk/nupkg
nuget install Esprima -OutputDirectory sdk/nupkgkgAfter setup, verify all SDKs in the editor:
- Launch Arsist:
npm run dev - Open Settings (Ctrl+, or File → Settings)
- Check SDK status sections for green "OK" indicators
Arsist-EN/
├── src/
│ ├── main/ # Electron main process
│ │ ├── main.ts # Application entry point
│ │ ├── unity/ # Unity build integration
│ │ ├── adapters/ # Device adapter management
│ │ └── preload.ts # IPC bridge
│ ├── renderer/ # React UI (Editor)
│ │ ├── components/ # UI components
│ │ ├── stores/ # State management (Zustand)
│ │ └── App.tsx # Main application
│ ├── bridge/ # Unity conversion layer
│ └── shared/ # Shared type definitions
├── UnityBackend/ # Unity project template
│ ├── Assets/
│ │ ├── Arsist/ # Core runtime scripts
│ │ ├── Scripts/ # Generated scripts
│ │ └── Resources/ # Runtime resources
│ └── ProjectSettings/
├── Adapters/ # Device adapters
│ ├── XREAL_One/ # XREAL One adapter
│ └── Meta_Quest/ # Meta Quest adapter
├── sdk/ # SDKs (see SDK Setup)
├── docs/ # Documentation
├── package.json # Node.js dependencies
└── README.md # This file
# This file
- Launch Arsist Editor:
npm run dev - Click "New Project" or press Ctrl+N
- Choose a template:
- 3D AR Scene: 6DoF tracking, spatial 3D objects
- 2D Floating Screen: 3DoF tracking, fixed 2D display
- Head-Locked HUD: Head-locked UI overlay
- Configure project name and location
- Select target device (XREAL One or Meta Quest)
- Click "Create Project"
The editor provides four main views:
- Place and manipulate 3D objects in AR space
- Configure object properties (position, rotation, scale)
- Set up AR tracking features (planes, images)
- Figma-like visual UI editor
- Drag-and-drop UI components
- Real-time preview
- Responsive layout tools
- Write JavaScript logic for your app
- Syntax highlighting with Monaco Editor
- Auto-completion and IntelliSense
- Access to Arsist API
- Visual programming with node graph
- Connect data sources to UI elements
- Event handling and state management
- File → Import Asset → 3D Model
- Supported formats:
.glb,.gltf,.fbx,.obj - Models appear in Assets panel
- File → Import Asset → VRM Avatar
- Select
.vrmfile - Avatar appears in Assets panel with animation controls
- File → Import Asset → Texture
- Supported formats:
.png,.jpg,.jpeg
Arsist uses JavaScript for application logic. Scripts run in Unity via Jint.
Example: Button Click Handler
// In Script Editor
function onButtonClick() {
console.log("Button clicked!");
UI.setText("statusText", "Hello AR World!");
}
// Bind to UI button
UI.onClick("myButton", onButtonClick);Example: Update Loop
function update(deltaTime) {
// Rotate object continuously
var rotation = Scene.getRotation("myObject");
rotation.y += 45 * deltaTime;
Scene.setRotation("myObject", rotation);
}
// Register update callback
Scene.onUpdate(update);See docs/scripting-api.md for complete API reference.
- Auto-save: Enabled by default (every 2 minutes)
- Manual save: Ctrl+S or File → Save
- Save As: Ctrl+Shift+S or File → Save As
- Open Build Dialog: Ctrl+B or Build → Build Settings
- Configure:
- Unity Path: Path to Unity 2022.3.20f1+ executable
- Target Device: XREAL One or Meta Quest
- Output Path: Where to save the APK
- Development Build: Enable for debugging
- Click "Start Build" in Build Dialog
- Arsist will:
- Export your project to Unity format
- Embed required SDKs (XREAL or Quest)
- Apply device-specific patches
- Invoke Unity batch build
- Generate APK file
Build Output:
OutputPath/
├── TempUnityProject/ # Temporary Unity project
├── YourApp.apk # Final APK (Android)
└── build.log # Build log
og
XREAL One (via Beam Pro):
adb install YourApp.apkMeta Quest:
adb install YourApp.apk
# Enable developer mode on Quest firstUnity License Error:
- Open Unity Hub and sign in
- Activate license for this PC
- Launch Unity Editor once manually (for first-time activation)
SDK Not Found:
- Check Settings → SDK status
- Verify
sdk/directory structure - Restart Arsist Editor
Build Fails:
- Check Build Log in Build Dialog
- Verify Unity version (2022.3.20f1 LTS+)
- Ensure Android SDK/NDK configured in Unity
Adapters are located in Adapters/ and provide device-specific configurations.
Location: Adapters/XREAL_One/
Features:
- 6DoF tracking
- Plane detection
- Image tracking
- Spatial mapping
- Gesture recognition
Configuration:
- Graphics API: OpenGLES3 only
- Architecture: ARM64
- Scripting Backend: IL2CPP
- Target FPS: 60
See Adapters/XREAL_One/README.md for details.
Location: Adapters/Meta_Quest/
Features:
- 6DoF tracking
- Hand tracking
- Passthrough AR
- Guardian system integration
Configuration:
- Graphics API: Vulkan (preferred) or OpenGLES3
- Architecture: ARM64
- Scripting Backend: IL2CPP
See Adapters/Meta_Quest/README.md for details.
Arsist provides a JavaScript API for controlling your AR app:
Scene API:
Scene.createObject("cube", "myCube");
Scene.setPosition("myCube", {x: 0, y: 1, z: 2});
Scene.setRotation("myCube", {x: 0, y: 45, z: 0});
Scene.setScale("myCube", {x: 1, y: 1, z: 1});
Scene.destroy("myCube");UI API:
UI.setText("label1", "Hello World");
UI.getText("label1");
UI.setVisible("panel1", true);
UI.onClick("button1", handleClick);Data API:
Data.set("score", 100);
Data.get("score");
Data.increment("score", 10);Network API:
Network.get("https://api.example.com/data", function(response) {
console.log(response);
});
Network.post("https://api.example.com/submit", {
name: "John",
score: 100
}, function(response) {
console.log(response);
});See docs/scripting-api.md for complete documentation.
- Check Node.js version:
node --version(should be 18+) - Delete
node_modules/and runnpm installagain - Check console for errors
- Verify SDK directory structure matches SDK Setup
- Check Settings → SDK status in editor
- Ensure
package.jsonexists in SDK folders
- Enable Development Build for debugging
- Check
adb logcatfor crash logs - Verify device firmware is up to date
- Ensure APK is signed properly
- Reduce polygon count (< 100k per scene)ne)
- Use texture compression (ASTC)
- Limit draw calls (< 100)00)
- Enable Single Pass Stereo Rendering
- Reduce dynamic lights
- Verify UniVRM package in
sdk/ - Check VRM file version compatibility
- Ensure VRM file is not corrupted
Comprehensive documentation is available in the docs/ folder:
docs/architecture.md- System architecture overviewdocs/scripting-api.md- Complete JavaScript API referencedocs/scripting-guide.md- Scripting tutorials and examplesdocs/vrm-integration-guide.md- VRM avatar integrationdocs/samples/- Sample projects and tutorialsdocs/complete-usage-guide.md- Detailed usage guide