Overview
Welcome to the Stado developer documentation, here you will find information on integrating with the Stado Service.
If you haven't already now is a good time to create a free account: https://stado.io/signup).
Game Engine Integrations
Stado provides first party integrations with Unity, Unreal and an easy to use open source native SDK for custom integrations.
Unity
Installation
Prerequisites:
- A Stado project (created through https://stado.io/signup)
- Unity environment 2021+
You can either install the Stado Unity Integration through UPM or manually
Installing with UPM
Installing Manually:
Download the official Stado plugin from github and unzip the contents into the Packages folder of your Unity Project.
.
└───Assets
│
└───Library
│
└───Packages
└───`stado-unity`
Unreal
Prerequisites:
- A Stado project (created through https://stado.io/signup)
- Unreal Engine 5
Download the official Stado plugin from github and unzip the contents into the Plugins folder of your Unreal Project.
.
└───Config
│
└───Content
│
└───Plugins
│ └───`stado-unreal`
│
└───Source
Godot
Prerequisites:
- A Stado project (created through https://stado.io/signup)
- Godot 4.2+
Download the official Stado Godot plugin from github
Open Source
Prerequisites:
Examples:
- BGFX
- SDL
Instant Issue Tracking
celc
celc [ Linux64 | macos | Win64 ] [ clang | gcc | vs2015 ]
$ celc -c 'file'
PlayTesting
External Testing
After long internal development cycles it is often beneficial to get external testers,
REST API | AnnotationComments
Create a new session annotation comment
Request
POST /api/v1/projects/{project}/sessions/:session_id/annotations/:annotation_id/comments
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| session_annotation | The annotation details | body | SessionAnnotationCommentRequest | false | {"text":"Example"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Session annotation created OK | SessionAnnotationCommentResponse |
| 400 | Bad Request |
Example | POST /api/v1/projects/:project/sessions/:session/annotations/:annotation/comments
POST /api/v1/projects/some-title/sessions/2453583812202856462/annotations/204/comments
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"body": "<p>testing creation of annotations</p>"
}
Response | status: 201
{
"data": {
"body": "<p>testing creation of annotations</p>",
"id": 143,
"inserted_at": "2024-08-19T15:36:31",
"parent_id": null,
"session_annotation_id": 204,
"updated_at": "2024-08-19T15:36:31",
"user": {
"email": "some@email.com",
"id": 697
},
"user_id": 697
},
"status": "ok"
}
Example | Failed POST /api/v1/projects/:project/sessions/:session/annotations missing body
POST /api/v1/projects/some-title/sessions/2453583801448660997/annotations/201/comments
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
Response | status: 400
{
"status": "[body: {\"can't be blank\", [validation: :required]}]"
}
Delete a Session annotation comment
Request
DELETE /api/v1/projects/:project_slug/sessions/:session_id/annotations/:annotation_id/comments/:comment_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| session_id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 | |
| comment_id | SessionAnnotationComment | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Comment deleted OK | |
| 204 | No content |
Example | DELETE /api/v1/projects/:project/sessions/:session/annotations/:annotation
DELETE /api/v1/projects/some-title/sessions/2453583815658962961/annotations/205/comments/144
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"status": ":ok"
}
List Sessions Annotation Comment Replies
List all sessions annotation replies to a comment
Request
GET /api/v1/projects/{project}/sessions/:session_id/annotations/:annotation_id/comments/:comment_id/replies
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| session_id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 | |
| comment_id | SessionAnnotationComment | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | SessionAnnotationCommentsResponse |
Example | GET /api/v1/projects/:project/sessions/:session/annotations/:annotation/comments/:comment/replies
GET /api/v1/projects/some-title/sessions/2453583805122871304/annotations/202/comments/140/replies
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"body": "hello world",
"id": 141,
"inserted_at": "2024-08-19T15:36:31",
"parent_id": 140,
"session_annotation_id": 202,
"updated_at": "2024-08-19T15:36:31",
"user": {
"email": "some@email.com",
"id": 695
},
"user_id": 695
}
],
"status": "ok"
}
List Sessions Annotation Comments
List all sessions annotation comments for the annotation
Request
GET /api/v1/projects/{project}/sessions/:session_id/annotations/:annotation_id/comments
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| session_id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | SessionAnnotationCommentsResponse |
Example | GET /api/v1/projects/:project/sessions/:session/annotations/:annotation/comments
GET /api/v1/projects/some-title/sessions/2453583796348387330/annotations/200/comments
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"body": "hello world",
"id": 139,
"inserted_at": "2024-08-19T15:36:30",
"parent_id": null,
"session_annotation_id": 200,
"updated_at": "2024-08-19T15:36:30",
"user": {
"email": "some@email.com",
"id": 693
},
"user_id": 693
}
],
"status": "ok"
}
Show Session Annotation Comment
Show a session annotation comment by session id, annotation id and comment id
Request
GET /api/v1/projects/:project_slug/sessions/:session_id/annotations/:annotation_id/comments/:comment_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_slug | Project | path | string | true | my_test_project | |
| session_id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 | |
| comment_id | SessionAnnotationComment | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | SessionAnnotationCommentResponse |
Example | GET /api/v1/projects/:project/sessions/:session/annotations/:annotation/comments/:comment
GET /api/v1/projects/some-title/sessions/2453583808562200587/annotations/203/comments/142
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"body": "hello world",
"id": 142,
"inserted_at": "2024-08-19T15:36:31",
"parent_id": null,
"session_annotation_id": 203,
"updated_at": "2024-08-19T15:36:31",
"user": {
"email": "some@email.com",
"id": 696
},
"user_id": 696
},
"status": "ok"
}
REST API | Annotations
Create a new session annotation
Request
POST /api/v1/projects/{project}/sessions/:id/annotations
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| session_annotation | The annotation details | body | SessionAnnotationRequest | false | {"begin":32,"end":45,"text":"Example"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Session annotation created OK | SessionAnnotationResponse |
Example | POST /api/v1/projects/:project/sessions/:session/annotations
POST /api/v1/projects/2453583850236805153/sessions/2453583850270359587/annotations
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"begin": 32,
"end": 43,
"text": "testing"
}
Response | status: 201
{
"data": {
"begin": 32,
"end": 43,
"id": 207,
"session_id": 2453583850270359587,
"text": "testing",
"user_id": 704
},
"status": "ok"
}
Delete a Session annotation
Request
DELETE /api/v1/projects/:project_id/sessions/:session_id/annotations/:annotation_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_id | Project | path | integer | true | 123 | |
| session_id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Issue deleted OK |
Example | DELETE /api/v1/projects/:project/sessions/:session/annotations/:annotation
DELETE /api/v1/projects/2453583856662478887/sessions/2453583856696033321/annotations/209
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"status": ":ok"
}
Show Session Annotation
Show a session annotation by session id and annotation id
Request
GET /api/v1/projects/:project_id/sessions/:id/annotations/:annotation_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_id | Project | path | string | true | my_test_project | |
| id | Session | path | integer | true | 123 | |
| annotation_id | SessionAnnotation | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | SessionAnnotationResponse |
Example | GET /api/v1/projects/:project/sessions/:session/annotations/:annotation
GET /api/v1/projects/some-title/sessions/2453583853508362278/annotations/208
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"begin": 32,
"end": 42,
"id": 208,
"session_id": 2453583853508362278,
"text": "testing",
"user_id": 705
},
"status": "ok"
}
Example | GET /api/v1/projects/:project/sessions/:session/annotations
GET /api/v1/projects/some-title/sessions/2453583846680035360/annotations
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"begin": 32,
"end": 42,
"id": 206,
"session_id": 2453583846680035360,
"text": "testing",
"user_id": 703
}
],
"status": "ok"
}
REST API | Devices
Create a new device
Request
POST /api/v1/users/:user_id/devices
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| device | The device details | body | DeviceRequest | false | {"name":"Johns Macbook 2019","platform_id":2} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Device created OK | DeviceResponse |
Example | POST /api/v1/users/:user_id/devices
POST /api/v1/devices
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"name": "test",
"platform_id": 22
}
Response | status: 201
{
"data": {
"id": 28,
"name": "test",
"platform": {
"id": 22,
"name": "Linux"
},
"secret": "S8ZShKIFx5DK6aWZhQOK1/c39b6VHwUXg5utR6dydNE="
},
"status": "ok"
}
Delete a device
Request
DELETE /api/v1/users/:user_id/devices/:device_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| device | The device details | body | DeviceRequest | false | {"name":"Johns Macbook 2019","platform_id":2} |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | Device created OK | DeviceResponse |
Example | DELETE /api/v1/users/:user_id/devices/:device
DELETE /api/v1/devices/30
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"id": 30,
"name": "test",
"platform": {
"id": 24,
"name": "Linux"
},
"secret": "kQzdu0cItS+vigyIRdbdnn3YGGKfzIrYmhi/eQALQ0Y="
},
"status": "ok"
}
Show Device
Show a device by device id
Request
GET /api/v1/users/:user_id/devices/:device_id
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| user_id | User | path | integer | true | 1232132 | |
| device_id | Device | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | DeviceResponse |
Example | GET /api/v1/users/:user_id/devices/:device_id
GET /api/v1/devices/29
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"id": 29,
"name": "test",
"platform": {
"id": 23,
"name": "Linux"
},
"secret": "AIkIt6AWTM1g751ie3WgXRs182E0pxBSefirL33d8NY="
},
"status": "ok"
}
Example | GET /api/v1/users/:user_id/devices
GET /api/v1/devices
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"id": 26,
"name": "Gamer PC",
"platform": {
"id": 21,
"name": "Linux"
},
"secret": "nVXktGLJ8eAY31RvvmzWwTFgMVcrE4gU3TnB1dCHEEg="
},
{
"id": 27,
"name": "Laptop",
"platform": {
"id": 21,
"name": "Linux"
},
"secret": "AJd1lftJQGTPBZj7b/4nRKDUoeEwD+8rDq+V8A3HRo0="
}
],
"status": "ok"
}
REST API | Issues
Create a new issue
Request
POST /api/v1/projects/{project}/issues
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| issue | The issue details | body | IssueRequest | false | {"title":"Acme Corp"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Issue created OK | IssueResponse |
Example | POST /api/v1/projects/:project/issues
POST /api/v1/projects/some-title/issues
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"title": "test"
}
Response | status: 201
{
"data": {
"issue_number": 1,
"issue_sessions": [],
"issue_state": {},
"issue_state_id": null,
"title": "test"
},
"status": "ok"
}
Example | POST /api/v1/projects/:project/issues with session
POST /api/v1/projects/some-title/issues
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"session_id": 2453583939088941123,
"title": "test"
}
Response | status: 201
{
"data": {
"issue_number": 1,
"issue_sessions": [
{
"session_focus_begin": null,
"session_focus_end": null,
"session_id": "2453583939088941123"
}
],
"issue_state": {},
"issue_state_id": null,
"title": "test"
},
"status": "ok"
}
Delete an issue
Request
DELETE /api/v1/projects/{project}/issues/{issue}
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| issue | The issue details | body | IssueRequest | false | {"issue":{"title":"Acme Corp"}} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Issue deleted OK | IssueResponse |
Example | DELETE /api/v1/projects/:project/issues/:issue
DELETE /api/v1/projects/some-title/issues/1
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"status": ":ok"
}
List Issues
List all issues for the project in the database
Request
GET /api/v1/projects/{project}/issues
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | IssuesResponse |
Example | GET /api/v1/projects/:project/issues
GET /api/v1/projects/some-title/issues
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"issue_number": 1,
"issue_sessions": [],
"issue_state": {},
"issue_state_id": null,
"title": "test"
}
],
"status": "ok"
}
Show Issue
Show an issue by issue number
Request
GET /api/v1/projects/:project_slug/issues/:issue
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_slug | Project | path | string | true | mytestproject | |
| issue_number | Issue | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | IssueResponse |
Example | GET /api/v1/projects/:project/issues/:issue
GET /api/v1/projects/some-title/issues/1
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"issue_number": 1,
"issue_sessions": [],
"issue_state": {},
"issue_state_id": null,
"title": "test"
},
"status": "ok"
}
REST API | Playtests
Create a new playtest
Request
POST /api/v1/projects/{project}/playtests
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| playtest | The playtest details | body | PlaytestRequest | false | {"playtest":{"title":"Acme Corp"}} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Playtest created OK | PlaytestResponse |
Example | POST /api/v1/projects/:project/playtests with session
POST /api/v1/projects/some-title/playtests
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"session_id": 2453583913688236082,
"title": "test"
}
Response | status: 201
{
"data": {
"description": "",
"id": 39,
"session_id": 2453583913688236082,
"title": "test"
},
"status": "ok"
}
Delete a playtest
Request
DELETE /api/v1/projects/{project}/playtests/{playtest}
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| playtest | The playtest details | body | PlaytestRequest | false | {"playtest":{"title":"Acme Corp"}} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Playtest deleted OK | PlaytestResponse |
Example | DELETE /api/v1/projects/:project/playtests/:playtest
DELETE /api/v1/projects/some-title/playtests/41
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"status": ":ok"
}
List playtests
List all playtests for the project in the database
Request
GET /api/v1/projects/{project}/playtests
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | PlaytestsResponse |
Example | GET /api/v1/projects/:project/playtests
GET /api/v1/projects/some-title/playtests
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": [
{
"description": "",
"id": 37,
"session_id": 2453583873322254380,
"title": "test"
}
],
"status": "ok"
}
Show playtest
Show an playtest by id
Request
GET /api/v1/projects/{project}/playtests/:playtest
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| id | Playtest | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | PlaytestResponse |
Example | GET /api/v1/projects/:project/playtests/:playtest
GET /api/v1/projects/some-title/playtests/40
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"description": "",
"id": 40,
"session_id": 2453583917177897013,
"title": "test"
},
"status": "ok"
}
REST API | Project
Create a new project
Request
POST /api/v1/projects
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| issue | The issue details | body | ProjectRequest | false | {"title":"Acme Corp"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 201 | Project created OK | ProjectResponse |
Example | POST /api/v1/projects
POST /api/v1/projects
accept: application/json
authorization: Bearer <YOUR-TOKEN>
content-type: multipart/mixed; boundary=plug_conn_test
{
"title": "test"
}
Response | status: 201
{
"data": {
"id": 2453583993380012114,
"title": "test"
},
"status": "ok"
}
REST API | Sessions
Count Session
Count number of sessions since
Request
GET /api/v1/projects/{project}/sessions/count
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_id | Project | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | CountResponse |
Example | GET /api/v1/projects/:project/sessions/count
GET /api/v1/projects/some-title/sessions/count
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"count": 1
},
"status": "ok"
}
Get session metrics
Get metrics associated with session
Request
GET /api/v1/projects/:project_slug/sessions/{session_id}/metrics
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| project_slug | Project | path | string | true | my_test_project | |
| session_id | Session | path | integer | true | 123 |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | OK | MetricsResponse |
Example | GET /api/v1/projects/:project_slug/sessions/:id/metrics
GET /api/v1/projects/2453583828493533205/sessions/2453583829332394007/metrics/fps
accept: application/json
authorization: Bearer <YOUR-TOKEN>
Response | status: 200
{
"data": {
"times": [],
"values": []
},
"status": "ok"
}
REST | Models
CountResponse
Response schema for listing amount of a resource
| Property | Description | Type | Required |
|---|---|---|---|
| count | Count | integer | false |
Device
A gaming device
| Property | Description | Type | Required |
|---|---|---|---|
| id | Device id | integer | false |
| name | User defined name | string | false |
| platform | An operating system platform | Platform | false |
| secret | Device secret generated by the platform | string | false |
DeviceRequest
Request schema for device
| Property | Description | Type | Required |
|---|---|---|---|
| name | User defined name | string | false |
| platform_id | The platform id | integer | false |
DeviceResponse
Request schema for device
| Property | Description | Type | Required |
|---|---|---|---|
| data | A gaming device | Device | false |
DevicesResponse
Response schema for device
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Device details | array(Device) | false |
Issue
An issue
| Property | Description | Type | Required |
|---|---|---|---|
| issue_number | Issue number | integer | false |
| session_focus_begin | Session focus begin | integer | false |
| session_focus_end | Session focus end | integer | false |
| session_id | Session id | integer | false |
| title | Issue title | string | true |
IssueRequest
Request schema for issue
| Property | Description | Type | Required |
|---|---|---|---|
| issue | An issue | Issue | false |
IssueResponse
Request schema for issue
| Property | Description | Type | Required |
|---|---|---|---|
| data | An issue | Issue | false |
IssuesResponse
Response schema for issue
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Issue details | array(Issue) | false |
Metrics
Metrics package
| Property | Description | Type | Required |
|---|---|---|---|
| times | Metric times | array(any) | false |
MetricsResponse
Response schema for metrics
| Property | Description | Type | Required |
|---|---|---|---|
| data | Metrics package | Metrics | false |
Platform
An operating system platform
| Property | Description | Type | Required |
|---|---|---|---|
| id | Platform id | integer | false |
| name | User defined name | string | false |
Playtest
An playtest
| Property | Description | Type | Required |
|---|---|---|---|
| description | Playtest description | string | false |
| id | id | integer | false |
| session_focus_begin | Session focus begin | integer | false |
| session_focus_end | Session focus end | integer | false |
| session_id | Session id | integer | false |
| title | Playtest title | string | true |
PlaytestRequest
Request schema for playtest
| Property | Description | Type | Required |
|---|---|---|---|
| playtest | An playtest | Playtest | false |
PlaytestResponse
Response schema for playtest
| Property | Description | Type | Required |
|---|---|---|---|
| data | An playtest | Playtest | false |
PlaytestsResponse
Response schema for multiple playtests
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Playtest details | array(Playtest) | false |
Project
A project
| Property | Description | Type | Required |
|---|---|---|---|
| title | Project title | string | true |
ProjectRequest
Request schema for project
| Property | Description | Type | Required |
|---|---|---|---|
| project | A project | Project | false |
ProjectResponse
Request schema for project
| Property | Description | Type | Required |
|---|---|---|---|
| data | A project | Project | false |
Session
An session
| Property | Description | Type | Required |
|---|---|---|---|
| engine | Engine name | string | false |
| engine_version | Engine version | string | false |
| id | Session id | integer | false |
| os | Operating System | string | false |
| os_version | Operating System Version | string | false |
SessionAnnotation
An annotation to a session
| Property | Description | Type | Required |
|---|---|---|---|
| begin | Begin time of annotation | integer | false |
| end_time | End time of annotation | integer | false |
| session_id | Session id | integer | false |
| text | Details | string | false |
| user_id | Author id | integer | false |
SessionAnnotationComment
A comment for a session annotation
| Property | Description | Type | Required |
|---|---|---|---|
| body | Comment body | string | true |
| inserted_at | Comment DB insertion time | string | true |
| session_annotation_id | Session annotation id | integer | true |
| updated_at | Comment DB update time | string | true |
| user_id | Author id | integer | true |
SessionAnnotationCommentRequest
Request schema for session annotation comment
| Property | Description | Type | Required |
|---|---|---|---|
| body | Comment body | string | true |
| parent_id | Parent comment id | integer | false |
| user_id | Author id | integer | false |
SessionAnnotationCommentResponse
Response schema for session annotation comment
| Property | Description | Type | Required |
|---|---|---|---|
| data | A comment for a session annotation | SessionAnnotationComment | false |
SessionAnnotationCommentsResponse
Response schema for session annotation comment
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Session annotation comment details | array(SessionAnnotationComment) | false |
SessionAnnotationRequest
Request schema for session annotation
| Property | Description | Type | Required |
|---|---|---|---|
| begin | Begin time of annotation | integer | true |
| end_time | End time of annotation | integer | true |
| text | Details | string | true |
SessionAnnotationResponse
Response schema for session annotation
| Property | Description | Type | Required |
|---|---|---|---|
| data | An annotation to a session | SessionAnnotation | false |
SessionAnnotationsResponse
Response schema for session annotation
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Session annotation details | array(SessionAnnotation) | false |
SessionRequest
Request schema for session
| Property | Description | Type | Required |
|---|---|---|---|
| session | An session | Session | false |
SessionResponse
Response schema for session
| Property | Description | Type | Required |
|---|---|---|---|
| data | An session | Session | false |
SessionsResponse
Response schema for session
| Property | Description | Type | Required |
|---|---|---|---|
| data | The Session details | array(Session) | false |
Native SDK
Prerequisites:
- A Stado project (created through https://stado.io/signup)
Supported Platforms:
- Windows
- Mac
- Linux
- Android
Enums
stado_set_on_connected
Register a callback when the client succesfully connects to the server.
Decleration:
void stado_set_on_connected(stado_configuration* configuration, PFN_OnConnected _OnConnected);
Parameters
| Parameter | Description |
|---|---|
| stado_configuration* | A pointer to the stado configuration struct. |
| PFN_OnConnected | A function protoype with the following specs: 'void (uint64_t cid)' |
Example
void onConnected(uint64_t cid)
{
}
stado_configuration configuration;
stado_set_on_connected(&configuration, onConnected);
stado_is_connected
Returns 1 when connected and 0 when disconnected.
Decleration:
int stado_is_connected(stado_context *context);
Parameters
| Parameter | Description |
|---|---|
| stado_context* | A pointer to the stado initialization. |
Example
stado_context context = {0};
if(stado_is_connected(stado_context *context))
{
// Is connected
}
stado_update
This function updates the internal state of input and metric gathering.
Decleration:
stado_result stado_update(stado_context *context);
Parameters
| Parameter | Description |
|---|---|
| stado_context* | A pointer to the stado initialization. |
Example
stado_context context = {0};
// An example application loop
while(1)
{
stado_update(stado_context *context);
}
stado_metric
Send a 64 bit float metric value to Stado. The value can later be displayed on dashboards.
Decleration:
stado_result stado_metric(stado_context *context, uint64_t ts, const char *id, int id_size, double val);
Parameters
| Parameter | Description |
|---|---|
| stado_context* | A pointer to the stado initialization. |
| ts | Timestamp for metric event, if zero gets current timestamp. |
| id | String representing the lookup id. |
| id_size | Size of string representing id. |
| val | The value to be stored. |
Example
stado_context context = {0};
// stado_init has to be called prior to stado_metric
char* metric_id = "example.metric";
stado_metric(&context, 0, 123, metric_id, strlen(metric_id));
stado_log
Send a log message.
Decleration:
stado_result stado_log(stado_context *context, enum stado_log_level level, const char *file, uint32_t line, uint64_t ts, const char *msg);
Parameters
| Parameter | Description |
|---|---|
| stado_context* | A pointer to the stado initialization. |
| level | Log level, can either be debug, info, warning, error |
| file | The origin file. |
| line | The line where logged. |
| ts | Timestamp for log, if zero gets current timestamp. |
| msg | The actual log message |
Example
stado_context context = {0};
// stado_init has to be called prior to stado_metric
//
stado_log(&context, STADO_LOG_LEVEL_INFO, __FILE__, __LINE__, 0, "Initializing subsystem");
stado_quit
Decleration:
void stado_quit(stado_context *context, enum stado_quit_reason quit_reason);
Parameters
| Parameter | Description |
|---|---|
| stado_context* | A pointer to the stado initialization. |
| stado_quit_reason | Specify why stado was shutdown. |
Example
stado_context context = {0};
// stado_init has to be called prior to stado_quit
stado_quit(&context, STADO_QUIT_NORMAL);
Release Notes
Cel 0.1.3
General
- Lexing multiline comments. Nested comments.
- Implemented boolean operators, and arithmetic operators.
- Scalar regex for floats.
Cel 0.1.2
General
- Cel code will now be generated inline.
- Created frontend for compiler.
- Redesign of testing system.
- Switched to union desctinction of different expression types.
- Compile time resource embedding with aerc.
- LibCel source code amalgamator. aemalagamate.
- Continious integration script for generating MSI installers.
Compiler
- Command line arguments parsing.
- Colorized console writer, for errors and warnings.
Node Graph
- Succesfully ported to the web platform with Emscripten and WebGL.
- Web platform runs on WASM.
Cel 0.1.1
General
- Unicode string support.
- Ditching LLVM, as prefering C output.
Compiler
- LibClang notifies about errors in C files, when including.
CeL 0.1.0
Compiler
- Abstract syntax tree.
- Added Bison and Flex, for scanning and parsing.
- Libclang abstract syntax reading from header files.
Node Graph
- Fixed a bug when disconnecting edges.
Cel 0.0.9
Node Graph
- Recursive calculation of weights on node graph.
- Rectangular navigation image. Has problems with identifying viewport bounds.
Cel 0.0.8
Node Graph
- Added resizeable region nodes. That behave like C## regions.
- Clicking regions selects the union of nodes.
Cel 0.0.7
Node Graph
- Line clickable selection.
- DPI font scaling.
Cel 0.0.6
Node Graph
- Recursive graph cycle finder.
Cel 0.0.5
General
- Build Generator aemake.
- Full support for Linux and Windows.
Node Graph
- Added controllers for booleans, integers and scalars. Sets members, when input is disconnected.
Cel 0.0.4
General
- Added winres information for executables.
Node Graph
- Add nodes from sidebar.
- FontAwesome support for truetype icons.
Cel 0.0.3
General
- Rectangular intersection.
Node Graph
- Rectangular selection.
- Scrolling added to node graph.
Cel 0.0.2
Node Graph
- Added a sidebar.
- Connector dragging to connectors. Identifies, when connector types do not match.
- Added a context menu.
Cel 0.0.1
Node Graph
- CelGraph datastructure created, the top level container of the node graph.
- State machine for draging events.