Skip to content

Migrate from Appweb Skill

Migrate Appweb embedded web server applications to the Ioto platform with API conversion, configuration migration, and verification testing.

Invoke with: /migrate-appweb

Migration Workflow

Appweb Application

  Phase 1: Analysis & Planning

  Phase 2: Code Transformation

  Phase 3: Verification & Testing

  Migrated Ioto Application

Phase 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

httpGetParam(conn, "name", NULL)  →  webGetVar(req, "name", NULL)
mprAlloc(size)                    →  rAlloc(size)
httpWrite(conn, format, ...)      →  webWrite(req, format, ...)
httpSetStatus(conn, code)         →  webSetStatus(req, code)
httpFinalize(conn)                →  (not needed)
httpGetHeader(conn, "name")       →  webGetHeader(req, "name")

Request Handling

c
// Appweb
static void myHandler(HttpConn *conn) {
    cchar *name = httpGetParam(conn, "name", NULL);
    httpSetStatus(conn, 200);
    httpWrite(conn, "Hello %s", name);
    httpFinalize(conn);
}

// Ioto
static void myHandler(Web *web, WebRequest *req) {
    cchar *name = webGetVar(req, "name", NULL);
    webWriteResponse(req, 200, "Hello %s", name);
}

Configuration Migration

Converts Appweb appweb.conf to Ioto web.json5:

json5
{
    web: {
        listen: ['http://*:80'],
        name: 'example.com',
        documents: '/var/www',
        routes: [{
            match: '/',
            handler: 'file',
            auth: 'basic',
            role: 'user'
        }]
    }
}

Phase 3: Verification

  1. Build the migrated application without errors or warnings
  2. Generate test suites to verify functional equivalence
  3. Validate configuration, routing, authentication, and protocol compliance
  4. Benchmark performance against the original Appweb application

Key Differences

  • Appweb GC-based memory management converts to explicit R allocation/free
  • Appweb's httpFinalize() / httpFlush() calls are not needed in Ioto
  • Appweb's multi-threaded model maps to Ioto's single-threaded fiber model — remove thread locks and synchronization code