Quick Start
ont-run supports both TypeScript and Go backends. Choose your preferred language below.
Installation
# TypeScript backend (default)npx ont-run init my-api
# Go backendnpx ont-run init-go my-apiTypeScript Quick Start
1. Initialize project
npx ont-run init my-apicd my-api2. Create your ontology
The generated ontology.config.ts defines your API:
import { defineOntology, z } from 'ont-run';import healthCheck from './resolvers/healthCheck.js';import getUser from './resolvers/getUser.js';
export default defineOntology({ name: 'my-api',
accessGroups: { public: { description: 'Unauthenticated users' }, user: { description: 'Authenticated users' }, admin: { description: 'Administrators' }, },
entities: { User: { description: 'A user account' }, },
functions: { healthCheck: { description: 'Check API health status', access: ['public', 'user', 'admin'], entities: [], inputs: z.object({}), outputs: z.object({ status: z.string() }), resolver: healthCheck, },
getUser: { description: 'Get user details by ID', access: ['user', 'admin'], entities: ['User'], inputs: z.object({ userId: z.string().uuid() }), outputs: z.object({ id: z.string(), name: z.string(), email: z.string(), }), resolver: getUser, }, },});3. Create a resolver
Create resolvers/getUser.ts:
import type { ResolverContext } from 'ont-run';
export default async function getUser( ctx: ResolverContext, args: { userId: string }) { ctx.logger.info(`Getting user: ${args.userId}`); return { id: args.userId, name: 'Example User', email: 'user@example.com', };}4. Start the server
npm run devThis starts the REST API at http://localhost:3000 and MCP server for AI integration.
5. Review ontology changes
npx ont-run reviewGo Quick Start
1. Initialize project
npx ont-run init-go my-apicd my-api/backend2. Define your ontology
Edit ontology.config.go:
package main
import ( ont "github.com/vanna-ai/ont-run/pkg/ontology" "myapp/resolvers")
func DefineOntology() *ont.Config { return &ont.Config{ Name: "my-api", UUID: "your-uuid-here", // Generated by init Cloud: true, // Enable cloud registration
AccessGroups: map[string]ont.AccessGroup{ "public": {Description: "Unauthenticated users"}, "user": {Description: "Authenticated users"}, "admin": {Description: "Administrators"}, },
Entities: map[string]ont.Entity{ "User": {Description: "A user account"}, },
Functions: map[string]ont.Function{ "healthCheck": { Description: "Check API health status", Access: []string{"public", "user", "admin"}, Entities: []string{}, Inputs: ont.Object(map[string]ont.Schema{}), Outputs: ont.Object(map[string]ont.Schema{ "status": ont.String(), }), Resolver: resolvers.HealthCheck, }, "getUser": { Description: "Get user details by ID", Access: []string{"user", "admin"}, Entities: []string{"User"}, Inputs: ont.Object(map[string]ont.Schema{ "userId": ont.String().UUID(), }), Outputs: ont.Object(map[string]ont.Schema{ "id": ont.String(), "name": ont.String(), "email": ont.String().Email(), }), Resolver: resolvers.GetUser, }, }, }}3. Create a resolver
Create resolvers/get_user.go:
package resolvers
import ( ont "github.com/vanna-ai/ont-run/pkg/ontology")
func GetUser(ctx ont.Context, input any) (any, error) { args := input.(map[string]any) userID := args["userId"].(string)
ctx.Logger().Info("Getting user", "userId", userID)
return map[string]any{ "id": userID, "name": "Example User", "email": "user@example.com", }, nil}4. Start the server
package main
import ( "log" ont "github.com/vanna-ai/ont-run/pkg/ontology" "github.com/vanna-ai/ont-run/pkg/server")
func main() { ontology := DefineOntology()
if err := ontology.Validate(); err != nil { log.Fatalf("Invalid ontology: %v", err) }
// Auto-generate lock and SDK in dev mode ontology.WriteLock("../ont.lock")
log.Println("Starting server on :8080") server.Serve(ontology, ":8080", server.WithLogger(ont.ConsoleLogger()))}Run:
go run .The server:
- Generates
ont.lockautomatically - Generates TypeScript SDK to
../frontend/src/sdk/ - Starts REST API at
http://localhost:8080 - Registers with ont-run.com (if Cloud enabled)
Next steps
- Learn about Entities for organizing your functions
- Add Field References for categorical fields
- Configure Access Control for fine-grained permissions
- Set up Cloud Integration for AI agent access control