Zero Config
No hardcoded paths, pure introspection discovers your code automatically. Organize any way you want.
TypeScript-first workflow automation framework. Build type-safe procedures and workflows with zero configuration.
import { z } from "zod";
import type { Procedure } from "@c4c/core";
export const createUser: Procedure = {
contract: {
input: z.object({
name: z.string(),
email: z.string().email(),
}),
output: z.object({
id: z.string(),
name: z.string(),
email: z.string(),
}),
},
handler: async (input) => {
return { id: generateId(), ...input };
}
};import type { WorkflowDefinition } from "@c4c/workflow";
export const userOnboarding: WorkflowDefinition = {
id: "user-onboarding",
name: "User Onboarding Flow",
version: "1.0.0",
startNode: "create-user",
nodes: [
{
id: "create-user",
type: "procedure",
procedureName: "users.create",
next: "send-welcome",
},
{
id: "send-welcome",
type: "procedure",
procedureName: "emails.sendWelcome",
},
],
};# Start dev server
c4c dev
# Execute procedure
c4c exec createUser --input '{"name":"Alice","email":"alice@example.com"}'
# Execute workflow
c4c exec userOnboarding| Feature | Visual Tools | c4c |
|---|---|---|
| Development Speed | Click through UI | Type in IDE |
| Version Control | Limited | Full git |
| Type Safety | None | Full TypeScript |
| Testing | Manual | Automated |
| Refactoring | Manual | IDE support |
| Code Reuse | Limited | Full |
| Feature | Others | c4c |
|---|---|---|
| Learning Curve | Complex DSLs | Just TypeScript |
| Setup | Configuration heavy | Zero config |
| Organization | Prescribed structure | Any structure |
| Introspection | Limited | Full automatic |
| Developer Tools | CLI, SDKs | Everything built-in |
Framework shouldn't dictate architecture.
c4c embraces introspection over configuration. Organize your code the way that makes sense for your project - the framework will find your procedures and workflows automatically.
Developer experience first:
Build workflows like code, not clicks.