diff --git a/release-notes.md b/release-notes.md
index 6f06654..4a17cf3 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -1,6 +1,8 @@
-#### next release
+#### v0.0.8
 
-- Add addRespHeader operator, thanks to Edward <ehmaldonado@google.com>
+- **BREAKING CHNAGE**: Gerrit is moving to `gr-app.js` only, so `gr-app.html` will no longer exists, we have updated default rules to forward to `gr-app.js` as well, in case you are still using `gr-app.html`, please modify that redirect rule by changing `gr-app.js` to `gr-app.html`
+- Add `addRespHeader` operator, thanks to Edward <ehmaldonado@google.com>
+- Add `injectExp` operator, as gerrit now supports experiments, this is a quick way to force enabling certain experiments, experiments should be separated by `,`
 
 #### v0.0.7
 
diff --git a/src/content_script.ts b/src/content_script.ts
index 5d196dc..7e3071a 100644
--- a/src/content_script.ts
+++ b/src/content_script.ts
@@ -1,4 +1,10 @@
-import { isInjectRule, Operator, Rule } from './utils';
+import { isInjectRule, Operator, Rule, getUrlParameter } from './utils';
+
+declare global {
+  interface Window {
+    ENABLED_EXPERIMENGTS?: string[];
+  }
+}
 
 function nextTick(ts: number) {
   return new Promise(resolve => {
@@ -80,16 +86,24 @@
         const link = document.createElement('script');
         link.innerHTML = rule.destination;
         document.head.appendChild(link);
+      } else if (rule.operator === Operator.INJECT_EXP) {
+        const exps = getUrlParameter('experiment');
+        const hasSeachString = !!window.location.search;
+        const injectedExpNotInExps = new Set(rule.destination.trim().split(',').filter(exp => !exps.includes(exp.trim())));
+        if (injectedExpNotInExps.size) {
+          const addedParams = [...injectedExpNotInExps].reduce((str, exp) => str += `experiment=${exp}&`, '');
+          window.location.href += hasSeachString ? `&${addedParams}` : `?${addedParams}`;
+        }
       }
     });
 
     // test redirect rules
     rules.filter(rule => !isInjectRule(rule)).forEach(rule => {
       if (rule.operator === Operator.REDIRECT
-          && !rule.disabled
-          // only test for js/html
-          && /\.(js|html)+$/.test(rule.destination)
-        ) {
+        && !rule.disabled
+        // only test for js/html
+        && /\.(js|html)+$/.test(rule.destination)
+      ) {
         fetch(rule.destination).then(res => {
           if (res.status < 200 || res.status >= 300) throw new Error("Resource not found");
         }).catch(e => {
diff --git a/src/manifest.json b/src/manifest.json
index 978245c..ab7599d 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -2,7 +2,7 @@
   "manifest_version": 2,
   "name": "Gerrit FE Dev Helper",
   "description": "This extension can help you development on gerrit sites, frontend specifically",
-  "version": "0.0.7",
+  "version": "0.0.8",
   "browser_action": {
     "default_icon": "gray-32.png",
     "default_title": "Gerrit FE Dev Helper"
diff --git a/src/popup.ts b/src/popup.ts
index 1928597..653c049 100644
--- a/src/popup.ts
+++ b/src/popup.ts
@@ -281,6 +281,7 @@
     Operator.INJECT_JS_PLUGIN,
     Operator.INJECT_JS_MODULE_PLUGIN,
     Operator.INJECT_JS_CODE,
+    Operator.INJECT_EXP,
     Operator.ADD_REQUEST_HEADER,
     Operator.ADD_RESPONSE_HEADER,
     Operator.REMOVE_RESPONSE_HEADER,
diff --git a/src/utils.ts b/src/utils.ts
index 7cb4475..9d3ff96 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -40,7 +40,7 @@
 export function isInjectRule(rule: Rule) {
   return [
     Operator.INJECT_JS_MODULE_PLUGIN, Operator.INJECT_JS_PLUGIN, Operator.INJECT_HTML_CODE,
-    Operator.INJECT_HTML_PLUGIN, Operator.INJECT_JS_CODE
+    Operator.INJECT_HTML_PLUGIN, Operator.INJECT_JS_CODE, Operator.INJECT_EXP
   ].some(op => op === rule.operator);
 }
 
@@ -58,6 +58,7 @@
   REMOVE_RESPONSE_HEADER = 'rRespHeader',
   ADD_RESPONSE_HEADER = 'addRespHeader',
   ADD_REQUEST_HEADER = 'addReqHeader',
+  INJECT_EXP = 'injectExp',
 }
 
 /**
@@ -69,4 +70,20 @@
   operator: Operator;
   destination: string;
   isNew?: boolean;
+}
+
+/**
+ * Util to get url parameters
+ */
+export function getUrlParameter(param: string) {
+  const qs = window.location.search.substring(1);
+  const partials = qs.split('&');
+  const res = [];
+  for (let i = 0; i < partials.length; i++) {
+    const name = partials[i].split('=');
+    if (name[0] == param) {
+      res.push(name[1]);
+    }
+  }
+  return res;
 }
\ No newline at end of file
