Skip to content

Commit 8d7757a

Browse files
authored
Jah samples (#11)
* feat: sample commands * feat: watcher samples * fix: keep in bounds fix * fix: minor improvements, settings view dropdown sizing fix, API methods update, hide button with API method, version info refactor, open button disable
1 parent 4da948b commit 8d7757a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1039
-185
lines changed

Editor/View/JahroEditorView.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private void SetWindowMode(WindowMode mode)
189189
}
190190
}
191191

192-
private void UpdateUI(VersionChecker.VersionResponse response)
192+
private void UpdateUI(VersionInfo response)
193193
{
194194
if (response.updateRequired)
195195
{

Editor/View/JahroEditorView.uxml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
2-
<Style src="project://database/Assets/unity-package/Editor/View/JahroEditorView.uss?fileID=7433441132597879392&amp;guid=afa15e319e4194e7e86856fb1bea256a&amp;type=3#JahroEditorView" />
2+
<Style src="project://database/Assets/JahroPackage/Editor/View/JahroEditorView.uss?fileID=7433441132597879392&amp;guid=afa15e319e4194e7e86856fb1bea256a&amp;type=3#JahroEditorView" />
33
<ui:VisualElement name="Root" class="background" style="flex-grow: 1; min-width: 50px; min-height: 120px;">
44
<ui:VisualElement name="Header" class="header" style="flex-grow: 10; flex-direction: row; align-items: stretch; justify-content: space-between; align-self: stretch; flex-shrink: 0; align-content: center; padding-top: 32px; padding-right: 32px; padding-bottom: 18px; padding-left: 32px; height: auto; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; flex-wrap: wrap; flex-basis: 125px;">
55
<ui:VisualElement name="Branding" style="flex-grow: 0; flex-direction: row; min-width: 200px; align-items: center; margin-top: 4px; align-self: center;">
@@ -19,15 +19,15 @@
1919
<ui:Label text="Loading..." />
2020
<ui:Label text="Loading..." name="ErrorLabel" class="error-text" />
2121
</ui:VisualElement>
22-
<ui:VisualElement name="WelcomeBlock" style="flex-grow: 0; align-content: center; justify-content: center; align-items: center; flex-shrink: 10; padding-top: 32px; padding-right: 32px; padding-bottom: 32px; padding-left: 32px; align-self: stretch; display: flex;">
22+
<ui:VisualElement name="WelcomeBlock" style="flex-grow: 0; align-content: center; justify-content: center; align-items: center; flex-shrink: 10; padding-top: 32px; padding-right: 32px; padding-bottom: 32px; padding-left: 32px; align-self: stretch; display: none;">
2323
<ui:ScrollView vertical-scroller-visibility="Auto" name="ScrollView" horizontal-scroller-visibility="Hidden" style="flex-grow: 0; flex-shrink: 1; align-self: stretch;">
2424
<ui:VisualElement name="WelcomeBlock" style="flex-grow: 0; align-content: stretch; justify-content: space-between; align-items: stretch; flex-shrink: 1; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; align-self: stretch; display: flex;">
2525
<ui:Label text="Welcome to Jahro" name="Title" class="h1" />
2626
<ui:Label text="enter your API key to begin" name="Subtitle" class="h2" />
2727
<ui:VisualElement style="flex-grow: 0; margin-top: 32px; align-self: stretch;">
2828
<ui:Label text="Project API Key" class="text-category" />
2929
<ui:VisualElement name="apikey-input" style="flex-grow: 0; flex-direction: row; margin-bottom: 0; justify-content: center; align-items: center; align-content: flex-start;">
30-
<ui:TextField label="Text Field" placeholder-text="Enter your API key" name="key-input" hide-placeholder-on-focus="false" style="flex-grow: 1; min-width: 200px; flex-shrink: 0; margin-top: 4px;" />
30+
<ui:TextField label="Text Field" placeholder-text="Enter your API key" name="key-input" hide-placeholder-on-focus="false" password="false" style="flex-grow: 1; min-width: 200px; flex-shrink: 0; margin-top: 4px;" />
3131
<ui:Button text="Submit" name="ValidateKey" class="btn-primary" style="flex-shrink: 1; flex-grow: 0; width: 100px; height: 36px; margin-top: 5px; margin-bottom: 0; padding-top: 0; padding-bottom: 0; padding-right: 0; padding-left: 0; margin-right: 0; margin-left: 0; align-self: auto; align-content: auto; align-items: stretch; justify-content: center; -unity-font-style: bold;" />
3232
</ui:VisualElement>
3333
<ui:Label text="Error Message" name="KeyErrorLabel" class="text-subline error-text" style="padding-top: 6px;" />
@@ -39,7 +39,7 @@
3939
</ui:VisualElement>
4040
</ui:ScrollView>
4141
</ui:VisualElement>
42-
<ui:VisualElement name="SettingsBlock" style="flex-grow: 1; align-content: center; justify-content: flex-start; align-items: stretch; flex-shrink: 0; padding-top: 32px; padding-right: 32px; padding-bottom: 32px; padding-left: 32px; align-self: auto; display: none; flex-basis: 100%;">
42+
<ui:VisualElement name="SettingsBlock" style="flex-grow: 1; align-content: center; justify-content: flex-start; align-items: stretch; flex-shrink: 0; padding-top: 32px; padding-right: 32px; padding-bottom: 32px; padding-left: 32px; align-self: auto; display: flex; flex-basis: 100%;">
4343
<ui:VisualElement name="TabView" style="flex-grow: 1; max-width: none; flex-basis: 100%;">
4444
<ui:VisualElement name="TabsControl" class="tab-header" style="height: 40px; flex-direction: row; justify-content: center; flex-shrink: 0; flex-basis: 40px; margin-bottom: 16px;">
4545
<ui:Button text="Account" display-tooltip-when-elided="true" name="AccountTab" class="tab-button" />
@@ -98,12 +98,12 @@
9898
<ui:Toggle name="AutoDisableToggle" style="min-width: auto; justify-content: flex-end; align-content: flex-end; align-self: auto; align-items: stretch; flex-direction: row;" />
9999
</ui:VisualElement>
100100
<ui:VisualElement name="Separator" style="flex-grow: 1; border-top-width: 0; border-left-color: rgba(0, 0, 0, 0.6); border-right-color: rgba(0, 0, 0, 0.6); border-top-color: rgba(0, 0, 0, 0.6); border-bottom-color: rgba(0, 0, 0, 0.6); background-color: rgb(75, 75, 75); height: 2px; margin-top: 8px; margin-bottom: 4px;" />
101-
<ui:VisualElement name="SettingsItem" style="flex-grow: 1; flex-direction: row; justify-content: space-between; flex-wrap: nowrap; flex-shrink: 0; flex-basis: auto; padding-top: 8px; padding-bottom: 8px;">
101+
<ui:VisualElement name="SettingsItem" style="flex-grow: 1; flex-direction: row; justify-content: space-between; flex-wrap: wrap; flex-shrink: 0; flex-basis: auto; padding-top: 8px; padding-bottom: 8px;">
102102
<ui:VisualElement name="VisualElement" style="flex-grow: 1; margin-left: 0;">
103103
<ui:Label text="Launch Key" name="Title" class="settings-item-title" style="margin-top: 2px; margin-bottom: 2px;" />
104104
<ui:Label text="Set the key to open the Jahro window during play mode." name="Description" class="settings-item-description" />
105105
</ui:VisualElement>
106-
<uie:EnumField value="Center" name="LaunchKeyPicker" />
106+
<uie:EnumField value="Center" name="LaunchKeyPicker" style="min-width: auto; flex-grow: 1;" />
107107
</ui:VisualElement>
108108
<ui:VisualElement name="SettingsItem" style="flex-grow: 1; flex-direction: row; justify-content: space-between; flex-wrap: nowrap; flex-shrink: 0; flex-basis: auto; padding-top: 8px; padding-bottom: 8px;">
109109
<ui:VisualElement name="VisualElement" style="flex-grow: 1; margin-left: 0;">
@@ -127,12 +127,12 @@
127127
<ui:Toggle name="DublicateLogsToggle" style="min-width: auto; justify-content: flex-end; align-content: flex-end; align-self: auto; align-items: stretch; flex-direction: row;" />
128128
</ui:VisualElement>
129129
<ui:VisualElement name="Separator" style="flex-grow: 1; border-top-width: 0; border-left-color: rgba(0, 0, 0, 0.6); border-right-color: rgba(0, 0, 0, 0.6); border-top-color: rgba(0, 0, 0, 0.6); border-bottom-color: rgba(0, 0, 0, 0.6); background-color: rgb(75, 75, 75); height: 2px; margin-top: 8px; margin-bottom: 4px;" />
130-
<ui:VisualElement name="SettingsItem" style="flex-grow: 1; flex-direction: row; justify-content: space-between; flex-wrap: nowrap; flex-shrink: 0; flex-basis: auto; padding-top: 8px; padding-bottom: 8px;">
131-
<ui:VisualElement name="VisualElement" style="flex-grow: 1; margin-left: 0;">
130+
<ui:VisualElement name="SettingsItem" style="flex-grow: 1; flex-direction: row; justify-content: space-between; flex-wrap: wrap; flex-shrink: 0; flex-basis: auto; padding-top: 8px; padding-bottom: 8px;">
131+
<ui:VisualElement name="VisualElement" style="flex-grow: 1; margin-left: 0; min-width: 150px;">
132132
<ui:Label text="Assemblies" name="Title" class="settings-item-title" style="margin-top: 2px; margin-bottom: 2px;" />
133133
<ui:Label text="Select assemblies where Jahro looks for Commands and Watchers." name="Description" class="settings-item-description" />
134134
</ui:VisualElement>
135-
<uie:MaskField name="AssembliesPicker" />
135+
<uie:MaskField name="AssembliesPicker" style="min-width: auto; flex-grow: 1;" />
136136
</ui:VisualElement>
137137
</ui:ScrollView>
138138
</ui:VisualElement>

README.md

Lines changed: 38 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,91 @@
11
# Jahro Unity Plugin
22

3-
**Debug, control, and fine-tune your game directly inside the game view.**
4-
Jahro provides powerful tools for Unity Game Creators for debugging, testing, and collaboration.
3+
**One-click snapshots: logs + screenshot from your Unity game.**<br/>
4+
From any device → instantly shareable web link.<br/>
5+
No cables. No Logcat or xcode<br/>
56

67
![Jahro Screenshot](https://vdepoiw1jnimcohf.public.blob.vercel-storage.com/Jahro_3%201-f2rMPbdeHAvaTZaFEGHbfxIQ8hqFM0.png)
78

89
---
910

1011
| [Website](https://jahro.io) |
1112
[Web Console](https://console.jahro.io) |
12-
[Documentation](https://docs.jahro.io) |
13-
[Getting Started](https://docs.jahro.io/start-here/installation) |
13+
[Documentation](https://go.jahro.io/docs) |
14+
[Getting Started](https://go.jahro.io/installation) |
1415
[Discord](https://discord.gg/txcHFRDeV4) |
1516
[UnityForum](https://discussions.unity.com/t/free-debugging-tool-jahro-logs-sync-cheat-console-variables-monitoring-in-game-view/1623617) |
1617

1718
---
1819

19-
## Features
20+
## Core Features
2021

21-
- **Run Commands/Cheats Console:** <br/>
22-
Execute static/non-static methods inside your game on a target device.
22+
### **Snapshots** <br/>
2323

24-
![Commands](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/unity-visual-full.png)
24+
Capture full device logs + screenshots with one click. <br/>
25+
Share link with your team instantly.
2526

26-
- **Logs Infrastructure:** <br/>
27-
Collaborate on logs and screenshots with your team for better debugging and session analysis.
27+
![Logs](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/web-logs-all.png)
28+
<br/>
2829

29-
![Logs](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/web-logs-all.png)
30+
### **Commands/Cheats** <br/>
3031

31-
- **Watch over Variables:** <br/>
32-
Track any variable in your game with the Watcher. From simple primitives to complex objects and game states.
32+
Expose C# methods with **[JahroCommand]** and run them in-game.<br/>
33+
Skip levels, grant items, trigger events — without rebuilds.
3334

34-
![Watcher](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/unity-watcher-full.png)
35+
![Commands](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/unity-visual-full.png)
36+
<br/>
3537

36-
- **Logs In Game View:** <br/>
37-
See logs directly inside the game.
38+
### **Watcher** <br/>
3839

39-
![Logs](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/unity-logs-full.png)
40+
Track any variable in your game with the Watcher. <br/>
41+
From simple primitives to complex objects and game states.
4042

41-
- **Mobile and UX Friendly:** <br/>
42-
Jahro designed for mobile games with especial attention to UX.
43+
![Watcher](https://jahro-snapshots-bucket.fra1.digitaloceanspaces.com/promo/screenshots/unity-watcher-full.png)
44+
<br/>
4345

4446
---
4547

4648
## Installation
4749

48-
1. Open **Unity Package Manager**.
49-
2. Click **Add package from Git URL**.
50-
3. Paste the following link: https://github.com/jahro-console/unity-package.git
51-
4. Click **Add** to install the Jahro Unity plugin.
52-
5. Grab your API key from **[Jahro Console](https://console.jahro.io/auth/signup)**.
50+
1. Open **Unity Package Manager**
51+
2. Click **Add package from Git URL**
52+
3. **Paste**: https://github.com/jahro-console/unity-package.git
53+
4. Click **Add** to install
54+
5. Get your API key from **[Jahro](https://jahro.io)**
5355

5456
---
5557

5658
## Getting Your API Key
5759

58-
1. Register a free account at **[Jahro Console](https://console.jahro.io/auth/signup)**.
59-
2. Create a project and navigate to the **API Keys** section.
60-
3. Copy the generated API key.
61-
4. In Unity, go to **Tools > Jahro Settings** and paste the API key.
60+
1. Register a free account at **[Jahro](https://jahro.io)**
61+
2. Create a project and go to **API Keys**
62+
3. Copy the key and paste it in **Tools > Jahro Settings**
6263

6364
---
6465

6566
## Docs Section
6667

67-
Read the docs to learn how to use Jahro in your Unity project.
68+
Learn how to use Jahro in your Unity project:
6869

69-
- **[Commands](https://docs.jahro.io/start-here/commands)**
70-
- **[Logs](https://docs.jahro.io/start-here/logs)**
71-
- **[Watcher](https://docs.jahro.io/start-here/watcher)**
72-
- **[Snapshots: Logs & Screenshots](https://docs.jahro.io/start-here/snapshots)**
70+
- **[Snapshots](https://go.jahro.io/snapshots)**
71+
- **[Commands](https://go.jahro.io/commands)**
72+
- **[Watcher](https://go.jahro.io/watcher)**
73+
- **[Logs](https://go.jahro.io/logs)**
7374

7475
---
7576

7677
## Useful Links
7778

78-
- **Documentation:** [Read Docs](https://docs.jahro.io)
79+
- **Documentation:** [Read Docs](https://go.jahro.io/docs)
80+
- **Roadmap:** [Roadmap](https://jahro.io/roadmap)
7981
- **Community Discord:** [Join Here](https://discord.gg/txcHFRDeV4)
8082
- **Home Website:** [https://jahro.io](https://jahro.io)
8183
- **Report an Issue:** [GitHub Issues](https://github.com/jahro-console/unity-package/issues)
82-
83-
---
84-
85-
## How to Support Jahro
86-
87-
We just started and working hard to make Jahro the best debugging tool for Unity.
88-
You could help us with feedback, feature requests, or sharing to your friends.
89-
90-
---
91-
92-
## Feedback
93-
94-
We’re very open to feedback! Let us know how we can improve and help us make Jahro even better. Reach out via:
95-
96-
- **Feedback:** [Feedback Form](https://tally.so/r/wLaVRO)
97-
- **Discord:** [Join our Community](https://discord.gg/txcHFRDeV4)
98-
- **GitHub Issues:** [Report an Issue](https://github.com/jahro-console/unity-package/issues)
9984
- **Email Support:** [[email protected]](mailto:[email protected])
10085

10186
---
10287

10388
## License
10489

105-
- This plugin is distributed under a **[custom license](https://github.com/jahro-console/unity-package/blob/main/LICENSE.md)**. Please review the license before using the plugin.
106-
- ©️ Copyright 2025 Oleksii Bulat. All rights reserved.
90+
This plugin is distributed under a **[custom license](https://github.com/jahro-console/unity-package/blob/main/LICENSE.md)** <br/>
91+
© 2025 Oleksii Bulat. All rights reserved.

Resources/Prefabs/JahroConsole.prefab

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ GameObject:
1111
- component: {fileID: 224326835824786116}
1212
- component: {fileID: 7791195387166945021}
1313
- component: {fileID: 1111723292551007368}
14+
- component: {fileID: 3943313719132281145}
1415
m_Layer: 0
1516
m_Name: OpenButton
1617
m_TagString: Untagged
@@ -99,6 +100,18 @@ MonoBehaviour:
99100
m_StringArgument:
100101
m_BoolArgument: 0
101102
m_CallState: 2
103+
--- !u!225 &3943313719132281145
104+
CanvasGroup:
105+
m_ObjectHideFlags: 0
106+
m_CorrespondingSourceObject: {fileID: 0}
107+
m_PrefabInstance: {fileID: 0}
108+
m_PrefabAsset: {fileID: 0}
109+
m_GameObject: {fileID: 1193291027948550}
110+
m_Enabled: 1
111+
m_Alpha: 1
112+
m_Interactable: 1
113+
m_BlocksRaycasts: 1
114+
m_IgnoreParentGroups: 0
102115
--- !u!1 &1295125442648366
103116
GameObject:
104117
m_ObjectHideFlags: 0
@@ -389,6 +402,7 @@ GameObject:
389402
- component: {fileID: 7556541601935384820}
390403
- component: {fileID: 8138581554980967857}
391404
- component: {fileID: 6773365811446011942}
405+
- component: {fileID: 4279570790471770952}
392406
m_Layer: 0
393407
m_Name: ConsoleWindow
394408
m_TagString: Untagged
@@ -545,6 +559,31 @@ MonoBehaviour:
545559
m_Name:
546560
m_EditorClassIdentifier:
547561
m_ShowMaskGraphic: 1
562+
--- !u!114 &4279570790471770952
563+
MonoBehaviour:
564+
m_ObjectHideFlags: 0
565+
m_CorrespondingSourceObject: {fileID: 0}
566+
m_PrefabInstance: {fileID: 0}
567+
m_PrefabAsset: {fileID: 0}
568+
m_GameObject: {fileID: 1323524584327500}
569+
m_Enabled: 1
570+
m_EditorHideFlags: 0
571+
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
572+
m_Name:
573+
m_EditorClassIdentifier:
574+
m_Delegates:
575+
- eventID: 2
576+
callback:
577+
m_PersistentCalls:
578+
m_Calls: []
579+
- eventID: 5
580+
callback:
581+
m_PersistentCalls:
582+
m_Calls: []
583+
- eventID: 3
584+
callback:
585+
m_PersistentCalls:
586+
m_Calls: []
548587
--- !u!1 &1510056403629596
549588
GameObject:
550589
m_ObjectHideFlags: 0
@@ -10741,7 +10780,7 @@ RectTransform:
1074110780
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1074210781
m_AnchorMin: {x: 0, y: 1}
1074310782
m_AnchorMax: {x: 1, y: 1}
10744-
m_AnchoredPosition: {x: 0, y: -120.00013}
10783+
m_AnchoredPosition: {x: 0, y: -660.00006}
1074510784
m_SizeDelta: {x: 0, y: 0}
1074610785
m_Pivot: {x: 0.5, y: 1}
1074710786
--- !u!114 &8446289563685102918
@@ -13163,7 +13202,6 @@ GameObject:
1316313202
- component: {fileID: 6757780617033622609}
1316413203
- component: {fileID: 2754286502295469309}
1316513204
- component: {fileID: 1742268154854446866}
13166-
- component: {fileID: 3787289482742044562}
1316713205
- component: {fileID: 8960605617001624582}
1316813206
m_Layer: 0
1316913207
m_Name: HeaderPanel
@@ -13295,31 +13333,6 @@ MonoBehaviour:
1329513333
m_FlexibleWidth: -1
1329613334
m_FlexibleHeight: -1
1329713335
m_LayoutPriority: 1
13298-
--- !u!114 &3787289482742044562
13299-
MonoBehaviour:
13300-
m_ObjectHideFlags: 0
13301-
m_CorrespondingSourceObject: {fileID: 0}
13302-
m_PrefabInstance: {fileID: 0}
13303-
m_PrefabAsset: {fileID: 0}
13304-
m_GameObject: {fileID: 4010956227763224433}
13305-
m_Enabled: 1
13306-
m_EditorHideFlags: 0
13307-
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
13308-
m_Name:
13309-
m_EditorClassIdentifier:
13310-
m_Delegates:
13311-
- eventID: 2
13312-
callback:
13313-
m_PersistentCalls:
13314-
m_Calls: []
13315-
- eventID: 5
13316-
callback:
13317-
m_PersistentCalls:
13318-
m_Calls: []
13319-
- eventID: 3
13320-
callback:
13321-
m_PersistentCalls:
13322-
m_Calls: []
1332313336
--- !u!114 &8960605617001624582
1332413337
MonoBehaviour:
1332513338
m_ObjectHideFlags: 0

0 commit comments

Comments
 (0)