ComputeService
Last validated: 2026-05-20
ComputeService is the largest Ignite API domain and covers app lifecycle, draft/version lifecycle, invocation, execution retrieval, app observability, MCP export, and public catalog APIs.
App Lifecycle RPCs
| RPC | HTTP annotation | Purpose |
|---|---|---|
CreateApp | POST /v1/ignite/app/{organization_name} | Create app metadata shell |
UpdateAppConfig | PATCH /v1/ignite/app/{organization_name}/{app_name}/config | Update mutable app config |
GetApp | GET /v1/ignite/app/{organization_name}/{app_name} | Get app metadata |
ListApps | GET /v1/ignite/app/{organization_name} | List tenant apps |
DeleteApp | DELETE /v1/ignite/app/{organization_name}/{app_name} | Delete app |
GetAppState | GET /v1/ignite/app/{organization_name}/{app_name}/state | Deployment state and serving posture |
ListCatalog | GET /v1/ignite/catalog/{organization_name} | Tenant catalog view |
Draft and Version RPCs
| RPC | HTTP annotation | Purpose |
|---|---|---|
SaveDraft | POST /v1/ignite/app/{organization_name}/{app_name}/draft | Upload/replace draft code |
GetDraftInfo | GET /v1/ignite/app/{organization_name}/{app_name}/draft | Draft status and compile metadata |
CompileDraft | POST /v1/ignite/app/{organization_name}/{app_name}/draft/compile | Trigger compile flow |
TestDraft | POST /v1/ignite/app/{organization_name}/{app_name}/draft/test | Execute draft without publish |
PublishDraft | POST /v1/ignite/app/{organization_name}/{app_name}/draft/publish | Promote draft to immutable version |
ListAppVersions | GET /v1/ignite/app/{organization_name}/{app_name}/versions | Version history |
GetAppVersion | GET /v1/ignite/app/{organization_name}/{app_name}/versions/{version} | Version details |
TestAppVersion | POST /v1/ignite/app/{organization_name}/{app_name}/versions/{version}/test | Test specific version |
RollbackApp | POST /v1/ignite/app/{organization_name}/{app_name}/rollback | Roll back active version |
GetAppCode | GET /v1/ignite/app/{organization_name}/{app_name}/code (+ version binding) | Retrieve source snapshot |
Invocation and Execution RPCs
| RPC | HTTP annotation | Purpose |
|---|---|---|
Invoke | POST /v1/ignite/app/{organization_name}/{app_name}/invoke | Streaming invoke (head/chunk/trailer) |
InvokeAsync | POST /v1/ignite/app/{organization_name}/{app_name}/invoke-async | Deprecated compatibility invoke path |
GetExecution | GET /v1/ignite/executions/{execution_id} | Fetch execution state/result |
WatchExecution | GET /v1/ignite/executions/{execution_id}/watch | Stream execution updates |
StreamExecutionInput | gRPC stream only | Push streamed input chunks to active execution |
Compute invocation can also be reached through app-specific host URLs on gateway, using the same app identity and auth model.
App Observability and Runtime Diagnostics RPCs
| RPC | HTTP annotation | Purpose |
|---|---|---|
GetAppLogs | GET /v1/ignite/app/{organization_name}/{app_name}/logs | Retrieve recent app logs |
StreamAppLogs | GET /v1/ignite/app/{organization_name}/{app_name}/logs/stream | Tail logs |
GetAppEvents | GET /v1/ignite/app/{organization_name}/{app_name}/events | Retrieve pod/platform lifecycle events |
StreamAppEvents | GET /v1/ignite/app/{organization_name}/{app_name}/events/stream | Stream events |
ListAppReplicas | GET /v1/ignite/app/{organization_name}/{app_name}/replicas | List current replicas |
GetExecutionStats | GET /v1/ignite/app/{organization_name}/{app_name}/stats/executions | Time-bucketed execution stats |
GetBuildLog | GET /v1/ignite/app/{organization_name}/{app_name}/builds/{build_id}/log | Replay persisted build log |
StreamCompileLogs | GET /v1/ignite/compile/{deploy_id}/logs | Stream compile logs |
Note: StreamCompileLogs uses a dedicated route shape to avoid gateway path ambiguity with app log routes.
MCP and Public Catalog RPCs
| RPC | HTTP annotation | Purpose |
|---|---|---|
GetMcpToolDefinition | GET /v1/ignite/app/{organization_name}/{app_name}/mcp | Tool descriptor for app |
ListMcpTools | GET /v1/ignite/app/{organization_name}/mcp/tools | List MCP-exported app tools |
ListPublicCatalog | GET /v1/ignite/public/catalog | Browse public catalog |
GetPublicCatalogDetail | GET /v1/ignite/public/catalog/{name} | Public catalog item detail |
HealthCheck | GET /v1/ignite/health | Service health RPC contract |
Supported Runtimes and BYOI Modes
Compile-source runtimes supported in Compute draft/code flows:
- Python
- Rust (native and wasm targets)
- Go
- Deno
Image mode (SaveDraft.code.image) supports BYOI and builder-assisted variants:
prebuilt: run a prebuilt container image directlyfrom_code: build image from archive (Dockerfile or Buildpacks path)from_git: build image from git source
BYOI can be used to:
- Run existing containerized apps without SDK rewrites
- Keep custom dependency/runtime stacks
- Use private registries with
registry_secret_ref - Expose multiple service ports and custom health paths through app config
gRPC and HTTP Examples
Create app metadata (gRPC)
grpcurl \
-H "authorization: Bearer $TOKEN" \
-d '{
"organization_name":"my-org",
"name":"hello",
"resource_tier":"RESOURCE_TIER_SMALL",
"description":"hello app"
}' \
rpc.dev.dodil.io:443 dodil.ignite.v1.ComputeService/CreateAppCreate app metadata (HTTP)
curl -sS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://api.dev.dodil.io/v1/ignite/app/myorg" \
-d '{
"organization_name":"myorg",
"name":"hello",
"resource_tier":"RESOURCE_TIER_SMALL"
}'Save draft using BYOI prebuilt image (gRPC)
grpcurl \
-H "authorization: Bearer $TOKEN" \
-d '{
"organization_name":"myorg",
"app_name":"hello",
"code":{
"image":{
"prebuilt":{
"image_ref":"ghcr.io/acme/hello:1.0.0",
"registry_secret_ref":"ghcr-creds"
}
}
}
}' \
rpc.dev.dodil.io:443 dodil.ignite.v1.ComputeService/SaveDraftInvoke published app (HTTP annotation contract)
curl -sS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://api.dev.dodil.io/v1/ignite/app/myorg/hello/invoke" \
-d '{
"http":{"method":"POST","path":"/"},
"body":"eyJuYW1lIjoid29ybGQifQ=="
}'Invoke via app-specific host URL (direct gateway path)
# Port 80 form
curl -sS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://warehouse-query-public.ignite.dodil.cloud/" \
-d '{"query":"status"}'
# Non-default port form
curl -sS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://warehouse-query-public-8080.ignite.dodil.cloud/infer" \
-d '{"input":"hello"}'Host URL behavior is derived from FunctionId DNS encoding:
<app>-<org>.<base_domain>for port 80<app>-<org>-<port>.<base_domain>for non-default ports- dots in function names are encoded as
-dot-
Watch execution updates (gRPC stream)
grpcurl \
-H "authorization: Bearer $TOKEN" \
-d '{"execution_id":"<execution_id>"}' \
rpc.dev.dodil.io:443 dodil.ignite.v1.ComputeService/WatchExecutionPractical Caveats
Invokeis the canonical invocation method; prefer it overInvokeAsyncfor new integrations.- Not every ComputeService RPC currently has first-class CLI coverage.
- App logs/events APIs expose runtime state that may be naturally time-windowed/ephemeral depending on underlying infrastructure retention.
- MCP export behavior depends on app config (
mcp_enabled) and publish lifecycle completion.