diff --git a/compiler/api/pom.xml b/compiler/api/pom.xml
index fd80dc2..e2398a6 100644
--- a/compiler/api/pom.xml
+++ b/compiler/api/pom.xml
@@ -25,10 +25,7 @@
     </parent>
 
     <artifactId>onos-yang-compiler-api</artifactId>
-    <packaging>pom</packaging>
-    <!--
-        Change packaging to jar
-    -->
+    <packaging>jar</packaging>
     <build>
         <plugins>
             <plugin>
diff --git a/compiler/api/src/main/java/org/onosproject/yang/YangModel.java b/compiler/api/src/main/java/org/onosproject/yang/YangModel.java
new file mode 100644
index 0000000..cd5f403
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/YangModel.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yang;
+
+import java.util.Set;
+
+/**
+ * Representation of a compiled YANG model.
+ */
+public interface YangModel {
+
+    /**
+     * Returns set of YANG module with information.
+     *
+     * @return YANG module info
+     */
+    Set<YangModule> getYangModules();
+
+    /**
+     * Returns set of YANG modules identifier.
+     *
+     * @return YANG module identifier
+     */
+    Set<YangModuleId> getYangModulesId();
+
+    /**
+     * Returns YANG module information corresponding to a given module
+     * identifier.
+     *
+     * @param id module identifier
+     * @return YANG module information
+     */
+    YangModule getYangModule(YangModuleId id);
+}
diff --git a/compiler/api/src/main/java/org/onosproject/yang/YangModule.java b/compiler/api/src/main/java/org/onosproject/yang/YangModule.java
new file mode 100644
index 0000000..70990f9
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/YangModule.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yang;
+
+import java.io.InputStream;
+
+/**
+ * Representation of YANG module information.
+ */
+public interface YangModule {
+
+    /**
+     * Returns YANG module identifier.
+     *
+     * @return module identifier
+     */
+    YangModuleId getYangModuleId();
+
+    /**
+     * Returns input stream corresponding to a given YANG file path.
+     *
+     * @return stream
+     */
+    InputStream getYangSource();
+
+    /**
+     * Returns metadata stream.
+     *
+     * @return stream
+     */
+    InputStream getMetadata();
+}
diff --git a/compiler/api/src/main/java/org/onosproject/yang/YangModuleId.java b/compiler/api/src/main/java/org/onosproject/yang/YangModuleId.java
new file mode 100644
index 0000000..44872df
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/YangModuleId.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang;
+
+/**
+ * Representation of an entity which provides YANG module identifiers.
+ * Reference RFC 7895.
+ */
+public interface YangModuleId {
+
+    /**
+     * Returns the name of the YANG module.
+     *
+     * @return name of the YANG module
+     */
+    String moduleName();
+
+    /**
+     * Returns revision of the YANG module.
+     * <p>
+     * Reference RFC 7895
+     * Each YANG module and submodule within the library has a
+     * revision. This is derived from the most recent revision statement
+     * within the module or submodule.  If no such revision statement
+     * exists, the module's or submodule's revision is the zero-length
+     * string.
+     *
+     * @return revision of the YANG module
+     */
+    String revision();
+}
diff --git a/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilationParam.java b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilationParam.java
new file mode 100644
index 0000000..b44814f
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilationParam.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.api;
+
+import java.nio.file.Path;
+import java.util.Set;
+
+/**
+ * Representation of parameters required for YANG compilation.
+ */
+public interface YangCompilationParam {
+
+    /**
+     * Returns set of YANG files path. This could be a directory in which
+     * YANG files resides, all files under that directory will be taken.
+     *
+     * @return set of YANG file path
+     */
+    Set<Path> getYangFiles();
+
+    /**
+     * Adds YANG file path. This could be a directory in which YANG files are
+     * available.
+     *
+     * @param path YANG file path
+     */
+    void addYangFile(Path path);
+
+    /**
+     * Returns set of dependent metadata paths.
+     *
+     * @return set of dependent metadata path
+     */
+    Set<Path> getDependentSchemas();
+
+    /**
+     * Adds dependent metadata path.
+     *
+     * @param path metadata path
+     */
+    void addDependentSchema(Path path);
+
+    /**
+     * Returns the desired path of generated code. If its not specified default
+     * path will be taken.
+     *
+     * @return path to generated code destination directory
+     */
+    Path getCodeGenDir();
+
+    /**
+     * Sets code generation directory.
+     *
+     * @param path expected code generation directory
+     */
+    void setCodeGenDir(Path path);
+
+    /**
+     * Returns the desired path of metadata. If its not specified default
+     * path will be taken.
+     *
+     * @return path to generated metadata destination directory.
+     */
+    Path getMetadataGenDir();
+
+    /**
+     * Sets metadata generation directory.
+     *
+     * @param path expected metadata generation directory
+     */
+    void setMetadataGenDir(Path path);
+}
diff --git a/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompiledOutput.java b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompiledOutput.java
new file mode 100644
index 0000000..4caedb8
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompiledOutput.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.api;
+
+import org.onosproject.yang.YangModel;
+
+import java.nio.file.Path;
+import java.util.Set;
+
+/**
+ * Representation of an entity that provides YANG compiled output.
+ */
+public interface YangCompiledOutput {
+
+    /**
+     * Returns compiled YANG model.
+     *
+     * @return YANG model
+     */
+    YangModel getYangModel();
+
+    /**
+     * Returns generated JAVA files.
+     *
+     * @return generated JAVA files.
+     */
+    Set<Path> getGeneratedJava();
+}
\ No newline at end of file
diff --git a/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerException.java b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerException.java
new file mode 100644
index 0000000..6857a31
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerException.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.api;
+
+import java.nio.file.Path;
+
+/**
+ * Represents base class for exceptions in YANG tool operations.
+ */
+public class YangCompilerException extends RuntimeException {
+
+    private static final long serialVersionUID = 20161028L;
+
+    private Path yangFile;
+
+    /**
+     * Creates a new YANG tool exception with given message. It's expected
+     * that caller of YANG compiler display's exception message to communicate
+     * error information with user.
+     *
+     * @param message the detail of exception in string
+     */
+    public YangCompilerException(String message) {
+        super(message);
+    }
+
+    /**
+     * Creates a new tool exception from given message and cause. It's expected
+     * that caller of YANG compiler display's exception cause and message to
+     * communicate error information with user.
+     *
+     * @param message the detail of exception in string
+     * @param cause   underlying cause of the error
+     */
+    public YangCompilerException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Creates a new tool exception from cause. It's expected
+     * that caller of YANG compiler display's exception cause to communicate
+     * error information with user.
+     *
+     * @param cause underlying cause of the error
+     */
+    public YangCompilerException(final Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * Retrieves the current YANG files for which exception has occured.
+     *
+     * @return current YANG file
+     */
+    public Path getYangFile() {
+        return yangFile;
+    }
+
+
+    /**
+     * Updates the YANG file which caused the exception.
+     *
+     * @param yangFile YANG files being processed
+     */
+    public void setYangFile(Path yangFile) {
+        this.yangFile = yangFile;
+    }
+}
diff --git a/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerService.java b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerService.java
new file mode 100644
index 0000000..6fb9643
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/YangCompilerService.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.api;
+
+import java.io.IOException;
+
+/**
+ * Representation of an entity that provides YANG compilation service.
+ */
+public interface YangCompilerService {
+
+    /**
+     * Compiles YANG files and generates the required code with serialized
+     * metadata.
+     *
+     * @param param YANG compilation parameters
+     * @return compiled output
+     * @throws IOException           a violation in IO rule
+     * @throws YangCompilerException a violation in YANG compilation rule
+     */
+    YangCompiledOutput compileYangFiles(YangCompilationParam param)
+            throws IOException, YangCompilerException;
+}
diff --git a/runtime/src/main/java/org/onosproject/yang/package-info.java b/compiler/api/src/main/java/org/onosproject/yang/package-info.java
similarity index 90%
rename from runtime/src/main/java/org/onosproject/yang/package-info.java
rename to compiler/api/src/main/java/org/onosproject/yang/package-info.java
index e1a76c3..d720de4 100644
--- a/runtime/src/main/java/org/onosproject/yang/package-info.java
+++ b/compiler/api/src/main/java/org/onosproject/yang/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Basic constructs for compiling and working with YANG models.
+ * Representation of a compiled YANG model.
  */
 package org.onosproject.yang;
\ No newline at end of file
diff --git a/runtime/pom.xml b/runtime/pom.xml
index c3ca80a..372f8bb 100644
--- a/runtime/pom.xml
+++ b/runtime/pom.xml
@@ -43,6 +43,11 @@
             <artifactId>slf4j-api</artifactId>
             <version>1.7.21</version>
         </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-compiler-api</artifactId>
+            <version>1.12-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/runtime/src/main/java/org/onosproject/yang/YangModel.java b/runtime/src/main/java/org/onosproject/yang/YangModel.java
deleted file mode 100644
index dbfcfee..0000000
--- a/runtime/src/main/java/org/onosproject/yang/YangModel.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yang;
-
-import java.io.InputStream;
-import java.util.Set;
-
-/**
- * Representation of a compiled YANG model.
- */
-public interface YangModel {
-
-    // name
-    // schema meta-data!!!
-
-    // set of source yang files (names & streams)
-    Set<String> getYangFiles();
-
-    InputStream getYangSource(String name);
-
-    // set of generated model classes
-    Set<String> getJavaModelClasses();
-
-}
