Migrate from GoAhead Skill
Migrate GoAhead embedded web server applications to the Ioto platform with API conversion, configuration migration, and verification testing.
Invoke with: /migrate-goahead
Migration Workflow
GoAhead Application
↓
Phase 1: Analysis & Planning
↓
Phase 2: Code Transformation
↓
Phase 3: Verification & Testing
↓
Migrated Ioto ApplicationPhase 1: Analysis
- Identify web server configuration, request handlers, and URL routing patterns
- Map authentication and authorization schemes
- Generate a feature comparison matrix with migration effort estimates
- Identify risks and platform-specific code
Phase 2: Code Transformation
API Substitution Table
websGetVar(wp, "name", NULL) → webGetVar(req, "name", NULL)
websWrite(wp, format, ...) → webWrite(req, format, ...)
websSetStatus(wp, code) → webSetStatus(req, code)
websDone(wp) → (not needed)
websOpen(docs, ports) → webAlloc() + webSetDocuments() + webListen()
websDefineHandler(name, fn) → webAddHandler(web, pattern, fn)
websRedirect(wp, url) → webRedirect(req, code, url)
websError(wp, code, msg) → webError(req, code, msg)Request Processing
c
// GoAhead
static int testHandler(Webs *wp) {
char *name = websGetVar(wp, "name", "World");
websSetStatus(wp, 200);
websWrite(wp, "Hello %s", name);
websDone(wp);
return 1;
}
// Ioto
static void testHandler(Web *web, WebRequest *req) {
cchar *name = webGetVar(req, "name", "World");
webWriteResponse(req, 200, "Hello %s", name);
}Configuration Migration
Converts GoAhead route.txt to Ioto web.json5:
json5
{
web: {
listen: ['http://*:80'],
documents: '/var/www',
routes: [{
match: '/',
handler: 'file',
auth: 'basic',
role: 'user'
}]
}
}Phase 3: Verification
- Build the migrated application without errors or warnings
- Generate test suites to verify functional equivalence
- Validate configuration, routing, authentication, and protocol compliance
- Benchmark performance against the original GoAhead application
Key Differences
- GoAhead handlers return
int(1 = handled); Ioto handlers returnvoid - GoAhead's
websDone()is not needed in Ioto — response completion is automatic - GoAhead's
Webs *wpparameter maps to two Ioto parameters:Web *webandWebRequest *req - GoAhead's single-threaded event model maps naturally to Ioto's fiber model
