Identifiers
Identifiers protocol schemas
System Identifier Schema
Universal naming convention for all machine identifiers (API Names) in ObjectStack.
Enforces lowercase with underscores or dots to ensure:
-
Cross-platform compatibility (case-insensitive filesystems)
-
URL-friendliness (no encoding needed)
-
Database consistency (no collation issues)
-
Security (no case-sensitivity bugs in permission checks)
Applies to all metadata that acts as a machine identifier:
-
Object names (tables/collections)
-
Field names
-
Role names
-
Permission set names
-
Action/trigger names
-
Event keys
-
App IDs
-
Menu/page IDs
-
Select option values
-
Workflow names
-
Webhook names
Naming Convention Summary:
| Type | Pattern | Example |
|------|---------|---------|
| Machine ID | snake_case | crm_account, btn_submit, role_admin |
| Event keys | dot.notation | user.login, order.created |
| Labels | Any case | Client Account, Submit Form |
@example Valid identifiers
-
'account'
-
'crm_account'
-
'user_profile'
-
'order.created' (for events)
-
'api_v2_endpoint'
@example Invalid identifiers (will be rejected)
-
'Account' (uppercase)
-
'CrmAccount' (camelCase)
-
'crm-account' (kebab-case - use underscore instead)
-
'user profile' (spaces)
Source: packages/spec/src/shared/identifiers.zod.ts
TypeScript Usage
import { EventName, SnakeCaseIdentifier, SystemIdentifier } from '@objectstack/spec/shared';
import type { EventName, SnakeCaseIdentifier, SystemIdentifier } from '@objectstack/spec/shared';
// Validate data
const result = EventName.parse(data);