diff --git a/framework/META-INF/plugin.xml b/framework/META-INF/plugin.xml
new file mode 100644
index 000000000..3cc67f1d9
--- /dev/null
+++ b/framework/META-INF/plugin.xml
@@ -0,0 +1,43 @@
+
+ com.intellij.demo.framework
+ Framework example
+ 1.0
+ YourCompany
+
+
+ most HTML tags may be used
+ ]]>
+
+
+ most HTML tags may be used
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/framework/framework.iml b/framework/framework.iml
new file mode 100644
index 000000000..de3c6c143
--- /dev/null
+++ b/framework/framework.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/framework/src/com/intellij/tutorials/framework/DemoFramework.java b/framework/src/com/intellij/tutorials/framework/DemoFramework.java
new file mode 100644
index 000000000..6c4db74e7
--- /dev/null
+++ b/framework/src/com/intellij/tutorials/framework/DemoFramework.java
@@ -0,0 +1,71 @@
+package com.intellij.tutorials.framework;
+
+import com.intellij.framework.FrameworkTypeEx;
+import com.intellij.framework.addSupport.FrameworkSupportInModuleConfigurable;
+import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
+import com.intellij.icons.AllIcons;
+import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleType;
+import com.intellij.openapi.roots.ModifiableModelsProvider;
+import com.intellij.openapi.roots.ModifiableRootModel;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author Anna Bulenkova
+ */
+public class DemoFramework extends FrameworkTypeEx {
+ public static final String FRAMEWORK_ID = "Demo";
+ protected DemoFramework() {
+ super(FRAMEWORK_ID);
+ }
+
+ @NotNull
+ @Override
+ public FrameworkSupportInModuleProvider createProvider() {
+ return new FrameworkSupportInModuleProvider() {
+ @NotNull
+ @Override
+ public FrameworkTypeEx getFrameworkType() {
+ return DemoFramework.this;
+ }
+
+ @NotNull
+ @Override
+ public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull FrameworkSupportModel model) {
+ return new FrameworkSupportInModuleConfigurable() {
+ @Nullable
+ @Override
+ public JComponent createComponent() {
+ return new JCheckBox("Extra Option");
+ }
+
+ @Override
+ public void addSupport(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ModifiableModelsProvider provider) {
+ //do what you want here: setup a library, generate a specific file, etc
+ }
+ };
+ }
+
+ @Override
+ public boolean isEnabledForModuleType(@NotNull ModuleType type) {
+ return true;
+ }
+ };
+ }
+
+ @NotNull
+ @Override
+ public String getPresentableName() {
+ return "Demo Framework";
+ }
+
+ @NotNull
+ @Override
+ public Icon getIcon() {
+ return AllIcons.Providers.Apache;
+ }
+}