       log "Error Loading Manifest: #{err.message}"
       return process.exit 1
 
-    # ## CLI & Manifest Defaults
-    # Now that we have a manifest loaded, assign our defaults, letting the
-    # CLI opts override everything.
-
-    # If they declared pipe and file, warn that file is ignored.
-    if opts.file? and opts.pipe
-      log 'Warning: --pipe and --file are both defined, file will be ignored.'
-
-    # Since pipe desn't make sense as a manifest option, lets warn it.
-    if manifest.pipe is true
-      log 'Warning: "pipe" is not supported in the manifest'
-
-    opts.bare ?= false
-
-    if opts.file? or manifest.file?
-      opts.file = opts.file ? manifest.file
-    else
-      opts.file = 'index.js'
-
-    if opts.commonjs? or manifest.commonjs?
-      opts.commonjs = opts.commonjs ? manifest.commonjs
-    else
-      opts.commonjs = false
-
-    if opts.coffee? or manifest.coffee?
-      opts.coffee = opts.coffee ? manifest.coffee
-    else
-      opts.coffee = false
-
     if vwarns? then log warning for warning in vwarns
     if vfails?
       log failure for failure in vfails
       return process.exit 1
+
+    callback manifest
+
+
+
+# ## Compile
+#
+# The function called when `kdc-plus compile` is used.
+compile = (appPath, unknownArgs..., opts={}, log=console.error) ->
+  if typeof appPath is 'object' then [opts, appPath] = [appPath, undefined]
+
+  appPath ?= process.cwd()
+  appPath = path.resolve appPath
+
+  _loadManifest appPath, (manifest) ->
+    # ## CLI & Manifest Defaults
+    # Now that we have a manifest loaded, assign our defaults, letting the
+    # CLI opts override everything.
+
+    # If they declared pipe and file, warn that file is ignored.
+    if opts.file? and opts.pipe
+      log 'Warning: --pipe and --file are both defined, file will be ignored.'
+
+    # Since pipe desn't make sense as a manifest option, lets warn it.
+    if manifest.pipe is true
+      log 'Warning: "pipe" is not supported in the manifest'
+
+    opts.bare ?= false
+
+    if opts.file? or manifest.file?
+      opts.file = opts.file ? manifest.file
+    else
+      opts.file = 'index.js'
+
+    if opts.commonjs? or manifest.commonjs?
+      opts.commonjs = opts.commonjs ? manifest.commonjs
+    else
+      opts.commonjs = false
+
+    if opts.coffee? or manifest.coffee?
+      opts.coffee = opts.coffee ? manifest.coffee
+    else
+      opts.coffee = false
 
     # Take all of our files and make them relative to our appPath if
     # they are relative.

# also the corrisponding dependency files *(package.json, bower.json, etc)*.
outdated = (appPath, unknownArgs..., opts={}, log=console.error) ->
  if typeof appPath is 'object' then [opts, appPath] = [appPath, undefined]
  log 'Error: Not Implemented'
  process.exit 1







# ## Load Manifest
#
# Since many of the commands load the manifest, and have to deal with
# failures/etc in the same manner, this is a little convenience function
# which handles the grunt work and returns the manifest.
_loadManifest = (appPath, callback) ->
  loadOpts =
    validate: true

