diff --git a/_WIP_Advanced/Create Your Own Template.md b/_WIP_Advanced/Create Your Own Template.md
deleted file mode 100644
index 1515b07..0000000
--- a/_WIP_Advanced/Create Your Own Template.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 1
----
-
-## TODO
diff --git a/_WIP_Advanced/Usage Via NodeJS API.md b/_WIP_Advanced/Usage Via NodeJS API.md
deleted file mode 100644
index 2076f29..0000000
--- a/_WIP_Advanced/Usage Via NodeJS API.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 3
----
-
-## TODO
diff --git a/_WIP_Advanced/assets/new-template.png b/_WIP_Advanced/assets/new-template.png
deleted file mode 100644
index b3af500..0000000
Binary files a/_WIP_Advanced/assets/new-template.png and /dev/null differ
diff --git a/_WIP_Configuration Files/Babel.md b/_WIP_Configuration Files/Babel.md
deleted file mode 100644
index 8e17bee..0000000
--- a/_WIP_Configuration Files/Babel.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-sort: 6
----
-
-To allow developers to use the latest language features without worrying about browser or environment constraints, `Extension` relies on [Babel](#) to transpile cutting-edge JavaScript and TypeScript code, ensuring broad compatibility and enabling developers.
-
-## Feature Support
-
-Here’s how each Babel plugin and preset contributes to this feature:
-
-- [@babel/plugin-proposal-decorators](https://www.npmjs.com/package/@babel/plugin-proposal-decorators): Allows developers to use decorators in their code, providing a convenient and readable way to annotate and modify classes and properties at design time.
-- [@babel/plugin-syntax-dynamic-import](https://www.npmjs.com/package/@babel/plugin-syntax-dynamic-import): Enables the use of dynamic import() syntax, facilitating code-splitting and lazy-loading of modules, which can significantly improve the performance of web applications.
-- [@babel/preset-env](https://www.npmjs.com/package/@babel/preset-env): Automatically determines the Babel plugins and polyfills needed based on the target environment's feature support, ensuring that the output code runs efficiently across all platforms.
-- [@babel/preset-react](https://www.npmjs.com/package/@babel/preset-react): Transforms JSX into standard JavaScript, making it compatible with the browser and enabling the use of React's powerful UI library and its ecosystem.
-- [@babel/preset-typescript](https://www.npmjs.com/package/@babel/preset-typescript): Provides support for TypeScript, allowing developers to leverage type-safe programming, interfaces, and other TypeScript features, which are compiled down to standard JavaScript.
-- [babel-plugin-react-require](https://www.npmjs.com/package/babel-plugin-react-require): Automatically injects the React import statement in files that use JSX, ensuring that the React namespace is always available where needed.
-- [babel-plugin-transform-react-remove-prop-types](https://www.npmjs.com/package/babel-plugin-transform-react-remove-prop-types): Removes PropTypes from the production build of React components, reducing the bundle size and improving the performance of the production app.
-
-This comprehensive setup empowers developers to write modern, efficient, and clean extension code across various modern web technologies, including [[React]] and [[TypeScript]].
-
-## Next Steps
-
-- Add a custom [[Babel]] config (`babel.config.js`) to your extension.
-- To maintain compatibility across diverse browser vendors, see [[Polyfill]].
-- Learn about [[React]] in Extension.
-- Learn about [[TypeScript]] in Extension.
-
----
diff --git a/_WIP_Configuration Files/PostCSS.md b/_WIP_Configuration Files/PostCSS.md
deleted file mode 100644
index c85fd8a..0000000
--- a/_WIP_Configuration Files/PostCSS.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 3
----
-
----
diff --git a/_WIP_Configuration Files/_Eslint.md b/_WIP_Configuration Files/_Eslint.md
deleted file mode 100644
index db54e06..0000000
--- a/_WIP_Configuration Files/_Eslint.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 4
----
-
-TODO
-
----
diff --git a/_WIP_Configuration Files/_Prettier.md b/_WIP_Configuration Files/_Prettier.md
deleted file mode 100644
index ff0dbb5..0000000
--- a/_WIP_Configuration Files/_Prettier.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 5
----
-
-TODO
-
----
diff --git a/_WIP_Configuration Files/_Webpack.md b/_WIP_Configuration Files/_Webpack.md
deleted file mode 100644
index abcbc73..0000000
--- a/_WIP_Configuration Files/_Webpack.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 7
----
-
-TODO
-
----
diff --git a/_WIP_Configuration Files/_extension.config.js.md b/_WIP_Configuration Files/_extension.config.js.md
deleted file mode 100644
index 99abd1e..0000000
--- a/_WIP_Configuration Files/_extension.config.js.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 8
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/Architecture Overview.md b/_WIP_Contribute/Architecture Overview.md
deleted file mode 100644
index 4b6b118..0000000
--- a/_WIP_Contribute/Architecture Overview.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 2
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/Help Ensuring Quality.md b/_WIP_Contribute/Help Ensuring Quality.md
deleted file mode 100644
index ff0dbb5..0000000
--- a/_WIP_Contribute/Help Ensuring Quality.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 5
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/Help Me Fixing Stuff.md b/_WIP_Contribute/Help Me Fixing Stuff.md
deleted file mode 100644
index db54e06..0000000
--- a/_WIP_Contribute/Help Me Fixing Stuff.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 4
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/Run This Project Locally.md b/_WIP_Contribute/Run This Project Locally.md
deleted file mode 100644
index 4abc087..0000000
--- a/_WIP_Contribute/Run This Project Locally.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 3
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/What This Project Is All About.md b/_WIP_Contribute/What This Project Is All About.md
deleted file mode 100644
index 1e361cf..0000000
--- a/_WIP_Contribute/What This Project Is All About.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-sort: 1
----
-
-TODO
-
----
diff --git a/_WIP_Contribute/assets/new-template.png b/_WIP_Contribute/assets/new-template.png
deleted file mode 100644
index b3af500..0000000
Binary files a/_WIP_Contribute/assets/new-template.png and /dev/null differ
diff --git a/_WIP_Development/_Modern CSS/Less.md b/_WIP_Development/_Modern CSS/Less.md
deleted file mode 100644
index d83a538..0000000
--- a/_WIP_Development/_Modern CSS/Less.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-sort: 2
----
-
-#### Demo
-
-
-
-```sh
-npx extension dev @Extension/templates/less
-```
-
-#### In an HTML file
-
-```html
-
-
-
-
-
- New Extension
-
-
-
-
-
-
Hello, Extension.
-
-
-```
-
-#### In a JavaScript File
-
-```js
-// ./NewTabApp.jsx
-
-import "./css/globals.css";
-
-export default function MyNewTabPage() {
- return
Hello, Extension.
;
-}
-```
-
-#### In a content_script file
-
-```js
-// ./content_script.jsx
-
-// There is no HTML in a content_script file, so
-// we import our global CSS file via dynamic import.
-import("./css/globals.css");
-
-export default function MyNewTabPage() {
- return
Hello, Extension!
;
-}
-```
-
-## Next Steps
-
-- Learn how to apply styles to the multiple extension contexts in [[Working With Stylesheets]].
-- Learn how to enable [[PostCSS]] capabilities in your extension.
-- Configure [[Tailwind]] in your extension.
-- Using [[Stylelint]] with Extension to lint your stylesheets.
-
----
diff --git a/_WIP_Development/_Modern CSS/Sass.md b/_WIP_Development/_Modern CSS/Sass.md
deleted file mode 100644
index b36e673..0000000
--- a/_WIP_Development/_Modern CSS/Sass.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-sort: 1
----
-
-From [https://sass-lang.com/](https://sass-lang.com/):
-
-> Sass is the most mature, stable, and powerful professional grade CSS extension language in the world
-
-`Extension` supports both `.scss` and `sass` extensions. It also supports component-level Sass via CSS Modules and the `.module.scss` or `.module.sass` extension.
-
-## Starter Scss Template
-
-`Extension` comes with a default Sass Module template for new projects, which you can use as a starting point for your next Sass Extension. This is the easiest way to have Sass integrated with `Extension`.
-
-
-
-### Try it yourself
-
-```sh
-npx extension dev @Extension/templates/sass
-```
-
-## Usage With An Existing Extension
-
-### Installation & Configuration
-
-```sh
-# Install required dependency
-npm install -D sass
-```
-
-### Usage
-
-#### In An HTML File
-
-```html
-
-
-
-
-
- New Extension
-
-
-
-
-
-
Hello, Extension.
-
-
-```
-
-#### In A JavaScript File
-
-```js
-// ./NewTabApp.jsx
-
-import styles from './styles/button.module.scss'
-
-export default function MyNewTabPage({ Component, pageProps }) {
- return (
-
- )
-}
-```
-
-Now, add `css/button.scss` as an import for the file you want Sass to work. For example:
-
-## Next Steps
-
-- Ensure the semantics and code quality of your CSS files by using [[Stylelint]].
-
----
diff --git a/_WIP_Features/API Resolution.md b/_WIP_Features/API Resolution.md
deleted file mode 100644
index cba09d2..0000000
--- a/_WIP_Features/API Resolution.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-sort: 5
----
-
-## Support for API File Paths
-
-```diff
-- # During development.
-- chrome.action.setIcon({path: "../../images/popup.html"});
-
-+ # During production.
-+ chrome.action.setIcon({path: "/assets/popup.html"});
-```
-
-`Extension` comes with a built-in API resolver. This allows developers to specify the real path of their extension file requests without worrying about whether the output path will be resolved after compilation, allowing your extension to efficiently communicate and interact with web pages and other extension features. Allowing automatic path resolution.
-
----
diff --git a/_WIP_Features/HTML Fields.md b/_WIP_Features/HTML Fields.md
deleted file mode 100644
index 65af140..0000000
--- a/_WIP_Features/HTML Fields.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 2
----
-
-
-
-TODO
diff --git a/_WIP_Features/Icon Fields.md b/_WIP_Features/Icon Fields.md
deleted file mode 100644
index 3b97253..0000000
--- a/_WIP_Features/Icon Fields.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 3
----
-
-
-
-TODO
diff --git a/_WIP_Features/JSON Fields.md b/_WIP_Features/JSON Fields.md
deleted file mode 100644
index 2fc2a74..0000000
--- a/_WIP_Features/JSON Fields.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 6
----
-
-
-
-TODO
diff --git a/_WIP_Features/Locales Files.md b/_WIP_Features/Locales Files.md
deleted file mode 100644
index f66dbf4..0000000
--- a/_WIP_Features/Locales Files.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 7
----
-
-
-
-TODO
diff --git a/_WIP_Features/Migrating Your Extension.md b/_WIP_Features/Migrating Your Extension.md
deleted file mode 100644
index 92d75c3..0000000
--- a/_WIP_Features/Migrating Your Extension.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-sort: 2
----
-
-
-
-## TODO
diff --git a/_WIP_Features/Page Reload And HMR.md b/_WIP_Features/Page Reload And HMR.md
deleted file mode 100644
index 28cd30f..0000000
--- a/_WIP_Features/Page Reload And HMR.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sort: 11
----
-
-
-
-TODO
-
----
diff --git a/_WIP_Features/Script Fields.md b/_WIP_Features/Script Fields.md
deleted file mode 100644
index 0efdf85..0000000
--- a/_WIP_Features/Script Fields.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 3
----
-
-
diff --git a/_WIP_Features/Static Assets.md b/_WIP_Features/Static Assets.md
deleted file mode 100644
index 802761d..0000000
--- a/_WIP_Features/Static Assets.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 5
----
-
-
-
-TODO
diff --git a/_WIP_Features/The Manifest File.md b/_WIP_Features/The Manifest File.md
deleted file mode 100644
index 1880a58..0000000
--- a/_WIP_Features/The Manifest File.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 1
----
-
-
-
-TODO
diff --git a/_WIP_Features/Web Accessible Resources.md b/_WIP_Features/Web Accessible Resources.md
deleted file mode 100644
index 8ec7ec2..0000000
--- a/_WIP_Features/Web Accessible Resources.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-templateEngineOverride: njk,md
-sort: 8
----
-
-
-
-fonts, csv
diff --git a/_WIP_Integrations/Add To This Page.md b/_WIP_Integrations/Add To This Page.md
deleted file mode 100644
index b5cd0f6..0000000
--- a/_WIP_Integrations/Add To This Page.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 5
----
-
-## TODO
diff --git a/_WIP_Integrations/Authentication.md b/_WIP_Integrations/Authentication.md
deleted file mode 100644
index ba654c1..0000000
--- a/_WIP_Integrations/Authentication.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 4
----
-
-## TODO
diff --git a/_WIP_Integrations/Stripe.md b/_WIP_Integrations/Stripe.md
deleted file mode 100644
index 1515b07..0000000
--- a/_WIP_Integrations/Stripe.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 1
----
-
-## TODO
diff --git a/_WIP_Integrations/Supabase.md b/_WIP_Integrations/Supabase.md
deleted file mode 100644
index ede3808..0000000
--- a/_WIP_Integrations/Supabase.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sort: 2
----
-
-## TODO
diff --git a/_WIP_Integrations/assets/new-template.png b/_WIP_Integrations/assets/new-template.png
deleted file mode 100644
index b3af500..0000000
Binary files a/_WIP_Integrations/assets/new-template.png and /dev/null differ
diff --git a/assets/blog/extension-2-0-0-beta.png b/assets/blog/extension-2-0-0-beta.png
new file mode 100644
index 0000000..2d16e19
Binary files /dev/null and b/assets/blog/extension-2-0-0-beta.png differ
diff --git a/components.json b/components.json
index 5e86a46..038beb5 100644
--- a/components.json
+++ b/components.json
@@ -11,7 +11,7 @@
"prefix": ""
},
"aliases": {
- "components": "@/components",
- "utils": "@/lib/utils"
+ "components": "theme/components",
+ "utils": "theme/lib/utils"
}
}
diff --git a/docs/en/blog/announcing-2-0-0-beta.mdx b/docs/en/blog/announcing-2-0-0-beta.mdx
new file mode 100644
index 0000000..41c335c
--- /dev/null
+++ b/docs/en/blog/announcing-2-0-0-beta.mdx
@@ -0,0 +1,21 @@
+# Announcing Extension.js 2.0.0-beta
+
+> October 18, 2024
+
+![](../../../assets/blog/extension-2-0-0-beta.png)
+
+Extension.js is now officially in beta.
+
+**Version 2.0.0-beta**
+
+- Fixed SASS Modules not working in the content script.
+- Add support to Svelte templates.
+- Add preview command.
+- Updated documentation (this one!)
+
+The beta release is focused on making all the existing features stable enough to document and test. New features are locked until the next stable release and the documentation is now up-to-date. This is the last beta release before the release candidate.
+
+Thanks for reading. Talk soon.
+
+Cezar Augusto
+Creator and Lead Developer, Extension.js
diff --git a/docs/en/blog/index.mdx b/docs/en/blog/index.mdx
index e021927..6379250 100644
--- a/docs/en/blog/index.mdx
+++ b/docs/en/blog/index.mdx
@@ -1,5 +1,9 @@
# Latest News
+## [Announcing v2.0.0-beta](/blog/announcing-2-0-0-beta)
+
+> October 18, 2024
+
## [Announcing v2.0.0-alpha](/blog/announcing-2-0-0-alpha)
> September 9, 2024
diff --git a/docs/en/docs/_meta.json b/docs/en/docs/_meta.json
index 1b5e84a..0a63933 100644
--- a/docs/en/docs/_meta.json
+++ b/docs/en/docs/_meta.json
@@ -10,7 +10,32 @@
},
{
"type": "dir",
- "name": "guides",
- "label": "Guides"
+ "name": "features",
+ "label": "Features"
+ },
+ {
+ "type": "dir",
+ "name": "browsers",
+ "label": "Browsers"
+ },
+ {
+ "type": "dir",
+ "name": "languages-and-frameworks",
+ "label": "Languages and Frameworks"
+ },
+ {
+ "type": "dir",
+ "name": "integrations",
+ "label": "Configuration Support"
+ },
+ {
+ "type": "dir",
+ "name": "development",
+ "label": "Development"
+ },
+ {
+ "type": "dir",
+ "name": "commands",
+ "label": "Commands Reference"
}
]
diff --git a/docs/en/docs/browsers/_meta.json b/docs/en/docs/browsers/_meta.json
new file mode 100644
index 0000000..4bdc9e8
--- /dev/null
+++ b/docs/en/docs/browsers/_meta.json
@@ -0,0 +1,22 @@
+[
+ {
+ "name": "available",
+ "label": "Browsers Available"
+ },
+ {
+ "name": "preferences",
+ "label": "Browser Preferences"
+ },
+ {
+ "name": "flags",
+ "label": "Browser Flags"
+ },
+ {
+ "name": "profile",
+ "label": "Browser Profile"
+ },
+ {
+ "name": "unsupported",
+ "label": "Running Browsers From Binary"
+ }
+]
diff --git a/docs/en/docs/browsers/available.mdx b/docs/en/docs/browsers/available.mdx
new file mode 100644
index 0000000..0eb891b
--- /dev/null
+++ b/docs/en/docs/browsers/available.mdx
@@ -0,0 +1,38 @@
+import { AvatarBrowsers } from "../../../../theme/components/avatar-group/browsers";
+
+
+
+# Browsers Available
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+Extension.js provides support for a variety of browsers, enabling you to easily develop and test your extensions across multiple platforms, detecting browser binaries and launching the selected browser with your extension loaded. The plugin also supports custom profiles, browser preferences, flags, and more.
+
+## How Does It Work?
+
+To launch your extension in a specific browser, Extension.js uses the browser's binary path to open a new instance with your extension loaded. For supported browsers (Chrome, Edge, Firefox) you can specify the browser to use by passing the `--browser` flag with the desired browser name. For other browsers, you can specify the path to the browser binary using the `--chromium-binary` or `--gecko-binary` flags, depending on the engine used by the browser.
+
+## Supported Browsers
+
+The following browsers are officially supported by Extension.js:
+
+| Browser | Usage |
+| ------------------ | ------------------------------------------------------------- |
+| **Chrome** | `extension dev --browser=chrome` |
+| **Edge** | `extension dev --browser=edge` |
+| **Firefox** | `extension dev --browser=firefox` |
+| **Chromium-based** | `extension dev --chromium-binary=chromium-based=browser-path` |
+| **Gecko-based** | `extension dev --gecko-binary=gecko-based-browser-path` |
+
+Any browser based on the Chromium engine (e.g., Brave or Opera) is supported with the same configuration options as Chrome.
+
+## Best Practices
+
+- **Use Custom Profiles**: Keep separate profiles for each browser during development for isolated testing.
+- **Polyfill for Compatibility**: Ensure your extension works across older browsers by using the `--polyfill` flag.
+- **Browser Flags**: Use browser flags to enable or disable features for specific testing scenarios, like `--disable-extensions` for clean testing environments.
+
+## Next Steps
+
+- [Customize your browser configuration](./flags.mdx) using the `--browser-args` flag.
+- [Learn more about unsupported browsers](./unsupported.mdx) and how to run your extension on them.
diff --git a/docs/en/docs/browsers/flags.mdx b/docs/en/docs/browsers/flags.mdx
new file mode 100644
index 0000000..a1fce41
--- /dev/null
+++ b/docs/en/docs/browsers/flags.mdx
@@ -0,0 +1,64 @@
+import { AvatarBrowsers } from "../../../../theme/components/avatar-group/browsers.tsx";
+
+
+
+# Browser Flags
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+Browser flags allow you to pass custom command-line flags to the browser during launch.
+This can be useful for enabling experimental features, disabling security policies, or customizing the browser's behavior in development mode.
+
+## How Does It Work?
+
+When you run your extension in development mode, you can specify browser flags to customize the browser's behavior. Extension.js will hook into the browser's launch process and pass the specified flags to the browser binary.
+
+## How to Use Browser Flags
+
+You can configure browser flags in the `extension.config.js` file by using the `browserFlags` key.
+These flags will be passed to the browser when it launches during the development process.
+
+### Example Configuration
+
+Here’s an example of how you can use browser flags in your `extension.config.js`:
+
+```js
+module.exports = {
+ browser: {
+ chrome: {
+ browserFlags: ["--disable-web-security", "--auto-open-devtools-for-tabs"],
+ },
+ firefox: {
+ browserFlags: ["--devtools", "--new-instance"],
+ },
+ },
+};
+```
+
+In this example:
+
+- For **Chrome**, `--disable-web-security` disables web security features like CORS, and `--auto-open-devtools-for-tabs` opens DevTools for each new tab.
+- For **Firefox**, `--devtools` opens DevTools by default, and `--new-instance` launches a new browser instance for testing purposes.
+
+## Available Flags for Supported Browsers
+
+The available flags vary between browsers. Below are links to where you can find more information on the supported flags for each browser.
+
+| Browser | Usage | More Information |
+| -------------- | ---------------------------------------- | -------------------------------------------------------------------------------------- |
+| Chrome | `extension dev --browser=chrome` | [Chrome Flags](https://peter.sh/experiments/chromium-command-line-switches/) |
+| Edge | `extension dev --browser=edge` | [Edge Flags](https://docs.microsoft.com/en-us/deployedge/microsoft-edge-policies) |
+| Firefox | `extension dev --browser=firefox` | [Firefox Flags](https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options) |
+| Chromium-based | `extension dev --browser=chromium-based` | [Chromium Flags](https://peter.sh/experiments/chromium-command-line-switches/) |
+| Gecko-based | `extension dev --browser=gecko-based` | Firefox-based browsers share the same flags as Firefox. |
+
+If your target browser is not listed here, it may not have publicly disclosed its available flags. If you are aware of resources for browser flags for unsupported browsers, please update this documentation.
+
+## Best Practices
+
+- **Test in Different Browsers**: Customize browser flags for each supported browser to test behavior across different environments. This helps in ensuring compatibility across all target platforms.
+
+## Next Steps
+
+- Learn more about [Browser Preferences](./preferences.mdx).
+- Explore [Browser-Specific Environment Files](../features/environment-variables.mdx).
diff --git a/docs/en/docs/browsers/preferences.mdx b/docs/en/docs/browsers/preferences.mdx
new file mode 100644
index 0000000..efc928b
--- /dev/null
+++ b/docs/en/docs/browsers/preferences.mdx
@@ -0,0 +1,90 @@
+import { AvatarBrowsers } from "../../../../theme/components/avatar-group/browsers";
+
+
+
+# Browser Preferences
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+Extension.js allows you to customize browser preferences for Firefox and other Gecko-based browsers.
+These preferences can be configured through the `preferences` property in the `extension.config.js` file,
+which then adds the custom preferences to the browser's user profile during development.
+
+## How Does It Work?
+
+Browser preferences are settings that can be configured to customize the behavior of the browser. Extension.js will hook into the browser's profile directory and modify the preferences file to set the custom preferences you define in the configuration file.
+
+## How to Set Custom Preferences
+
+To set custom preferences, add a `preferences` key to the browser configuration in your `extension.config.js`.
+These preferences will be passed to the browser during the development process, modifying its behavior according to your configuration.
+
+### Example Configuration
+
+Here is an example of how you can set custom preferences for Firefox and Gecko-based browsers in your `extension.config.js`:
+
+```js
+module.exports = {
+ browser: {
+ firefox: {
+ preferences: {
+ "browser.startup.homepage": "https://developer.mozilla.org",
+ "devtools.theme": "dark",
+ "dom.webnotifications.enabled": false,
+ },
+ },
+ },
+};
+```
+
+In this example:
+
+- `browser.startup.homepage` sets the default homepage for Firefox.
+- `devtools.theme` sets the theme of the developer tools to dark mode.
+- `dom.webnotifications.enabled` disables web notifications.
+
+## Using Preferences in the Configuration File
+
+Below is the interface for configuring browser preferences within your `extension.config.js`:
+
+```ts
+interface DevOptions {
+ browser: "firefox" | "gecko-based";
+ preferences?: Record;
+}
+```
+
+> Note from the Author: The `preferences` object can contain any key-value pair that is valid for the browser's preferences. While it is theoretically possible to set any preference on Chromium-based browsers, there is no guarantee that all preferences will work as expected.
+
+This allows you to customize preferences like the homepage, DevTools configuration, or disable certain browser features like web notifications.
+
+### Example with Custom Profile
+
+You can also specify a custom profile for Firefox using the `profile` option along with `preferences`:
+
+```js
+module.exports = {
+ browser: {
+ firefox: {
+ profile: "path/to/custom-profile",
+ preferences: {
+ "browser.startup.homepage": "https://example.com",
+ },
+ },
+ },
+};
+```
+
+## More Detailed Preferences
+
+For a comprehensive list of available Firefox preferences, you can explore the [Firefox source code](https://searchfox.org/mozilla-central/source/) where many default preferences are defined in `all.js` or `firefox.js`.
+
+## Best Practices
+
+- **Use Custom Profiles**: It is a good idea to use separate profiles for different browsers during development to keep testing environments isolated.
+- **Set Browser-Specific Preferences**: Customize browser preferences to optimize your development environment, such as disabling web notifications or setting custom homepages.
+
+## Next Steps
+
+- Learn more about [browser-specific environment files](../features/environment-variables.mdx).
+- Explore how to [configure other browser preferences](./available.mdx).
diff --git a/docs/en/docs/browsers/profile.mdx b/docs/en/docs/browsers/profile.mdx
new file mode 100644
index 0000000..3e9a901
--- /dev/null
+++ b/docs/en/docs/browsers/profile.mdx
@@ -0,0 +1,58 @@
+import { AvatarEmoji } from "../../../../theme/components/avatar-emoji";
+
+
+
+# Browser Profile
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull request. The link that documents this feature can be found at the bottom of the page.
+
+Browser profiles allow you to load a custom browser profile during extension development, which can be useful for replicating real-user behavior, settings, extensions, and session data. You can either use the default profile provided by Extension.js or define your own path using the `--profile` flag in the CLI.
+
+## How Does It Work?
+
+You can specify a custom browser profile to load during the browser launch process. Extension.js will hook into the browser's profile directory and load the specified profile, allowing you to test your extension in a real-world environment.
+
+## How to Use Browser Profiles
+
+### Using the Default Profile
+
+By default, **Extension.js** launches a browser with a fresh, clean profile. This ensures there are no session conflicts or unwanted settings during testing.
+
+### Using a Custom Profile
+
+To use a custom browser profile, you can specify the profile path in the `extension.config.js` file or use the `--profile` flag during the development process.
+
+**Example in `extension.config.js`:**
+
+```js
+module.exports = {
+ browser: {
+ chrome: {
+ profile: "path/to/custom/profile",
+ },
+ firefox: {
+ profile: "path/to/custom/firefox-profile",
+ },
+ },
+};
+```
+
+### CLI Option: Specifying a Custom Profile Path
+
+You can also define a profile path directly in the CLI using the `--profile` flag:
+
+```bash
+extension dev --browser=chrome --profile=/path/to/custom/profile
+```
+
+In this case, the **Chrome** browser will launch with the specified profile from `/path/to/custom/profile`. This is useful for loading existing profiles with user-specific settings like extensions, bookmarks, or cookies.
+
+## Best Practices
+
+- **Separate Profiles for Different Browsers**: It's a good practice to maintain separate profiles for each browser to ensure clean, isolated testing environments.
+- **Real-World Testing**: Use real browser profiles from actual user sessions to test how your extension interacts with real-world data and settings.
+- **Automated Testing**: Define and automate the use of custom profiles to run tests in various user environments.
+
+## Next Steps
+
+- For more detailed documentation and to contribute to this feature, check the [Browser Profiles on GitHub](https://github.com/extension-js/extension.js/tree/main/docs/browser-profile).
diff --git a/docs/en/docs/browsers/unsupported.mdx b/docs/en/docs/browsers/unsupported.mdx
new file mode 100644
index 0000000..cd66dca
--- /dev/null
+++ b/docs/en/docs/browsers/unsupported.mdx
@@ -0,0 +1,90 @@
+import { AvatarBrowsers } from "../../../../theme/components/avatar-group/browsers";
+
+
+
+# Running Browsers From Binary
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull request. The link that documents this feature can be found at the bottom of the page.
+
+While Extension.js natively supports browsers like Chrome, Edge, and Firefox, you can also run unsupported browsers by specifying the path to the browser binary using the `--chromiumBinary` or `--geckoBinary` flags. Additionally, you can add custom binary paths via the `extension.config.js` file for persistent configuration across runs.
+
+## How Does It Work?
+
+If you need to run a browser that is not fully supported by Extension.js, you can specify the path to a custom browser binary using the `--chromiumBinary` or `--geckoBinary` flags. Extension.js will launch the specified browser binary with your extension loaded, allowing you to test your extension in a custom browser environment.
+
+**Example Using CLI Flags:**
+
+```bash
+extension dev --chromiumBinary=/path/to/custom-browser
+```
+
+or for Gecko-based browsers like Firefox:
+
+```bash
+extension dev --geckoBinary=/path/to/custom-firefox
+```
+
+**Example Using `extension.config.js`:**
+
+```js
+module.exports = {
+ browser: {
+ firefox: {
+ geckoBinary: "/path/to/custom-firefox",
+ },
+ "chromium-based": {
+ chromiumBinary: "/path/to/custom-browser",
+ },
+ },
+};
+```
+
+In these scenarios, the browser specified in the `--chromiumBinary` or `--geckoBinary` flag (or in `extension.config.js`) will be launched instead of the default Chrome, Edge, or Firefox binaries.
+
+## Available Browsers
+
+Here is a short list of browsers you can run using these binary flags, along with their official websites for reference:
+
+| **Browser Name** | **Type** | **CLI Flag** | **Official Website** |
+| ----------------------------- | ---------------------- | ------------------ | --------------------------------------------------------- |
+| **Brave** | Chromium-Based Browser | `--chromiumBinary` | [brave.com](https://brave.com) |
+| **Opera** | Chromium-Based Browser | `--chromiumBinary` | [opera.com](https://www.opera.com) |
+| **Vivaldi** | Chromium-Based Browser | `--chromiumBinary` | [vivaldi.com](https://vivaldi.com) |
+| **Waterfox** | Gecko-Based Browser | `--geckoBinary` | [waterfox.net](https://www.waterfox.net) |
+| **Firefox Developer Edition** | Gecko-Based Browser | `--geckoBinary` | [firefox.com](https://www.mozilla.org/firefox/developer/) |
+
+## Example Configuration
+
+Below is an example configuration using the `--geckoBinary` flag to run a custom Firefox instance with specific preferences and flags:
+
+```bash
+extension dev --geckoBinary=/path/to/custom-firefox --profile=/path/to/firefox/profile
+```
+
+Or via `extension.config.js`:
+
+```js
+module.exports = {
+ browser: {
+ firefox: {
+ geckoBinary: "/path/to/custom-firefox",
+ profile: "/path/to/firefox/profile",
+ preferences: {
+ homepage: "https://example.com",
+ },
+ browserFlags: ["--safe-mode"],
+ },
+ },
+};
+```
+
+## Best Practices
+
+- **Set Up Profiles**: Utilize custom profiles for different users or configurations.
+- **Preferences**: Use the `preferences` option to customize browser settings.
+- **Flags**: Leverage browser flags for specialized environments or behaviors.
+- **Binary Paths**: Run custom or unsupported browsers by specifying their binary paths.
+
+## Next Steps
+
+- Check out the [browser preferences](./preferences.mdx) to further configure your environment.
diff --git a/docs/en/docs/guides/commands/_meta.json b/docs/en/docs/commands/_meta.json
similarity index 57%
rename from docs/en/docs/guides/commands/_meta.json
rename to docs/en/docs/commands/_meta.json
index 5cea2d6..fae2438 100644
--- a/docs/en/docs/guides/commands/_meta.json
+++ b/docs/en/docs/commands/_meta.json
@@ -1,7 +1,6 @@
[
- { "name": "reference", "label": "Reference" },
{ "name": "create", "label": "create" },
{ "name": "dev", "label": "dev" },
- { "name": "start", "label": "start" },
+ { "name": "preview", "label": "preview" },
{ "name": "build", "label": "build" }
]
diff --git a/docs/en/docs/commands/build.mdx b/docs/en/docs/commands/build.mdx
new file mode 100644
index 0000000..3b4a570
--- /dev/null
+++ b/docs/en/docs/commands/build.mdx
@@ -0,0 +1,90 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# Build Command
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+The `build` command in Extension.js is responsible for compiling your extension for production.
+This command creates optimized builds for different browsers, ensuring compatibility and performance.
+The `build/` folder will contain subfolders for each targeted browser, each with the necessary code transforms and optimizations.
+
+## Usage
+
+To use the `build` command, run:
+
+
+
+## Build Output
+
+After running the `build` command, Extension.js generates optimized files for the specified browser.
+You will find the output inside the `build/` folder, with separate subfolders for each browser (Chrome, Edge, etc.).
+These folders contain the bundled JavaScript, CSS, HTML, and other necessary assets for the extension to work in the targeted environment.
+
+**Example Output Structure:**
+
+```plaintext
+build/
+├── chrome/
+│ ├── manifest.json
+│ ├── background.js
+│ ├── content.js
+├── edge/
+│ ├── manifest.json
+│ ├── background.js
+│ ├── content.js
+```
+
+## Arguments And Flags
+
+| Flag | Argument | What it does | Defaults to |
+| ------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
+| [path or url] | The extension path or the remote extension URL | If a path is defined, builds the local extension. If a URL is provided, pulls the extension from remote source and builds it as a local extension | `process.cwd()` |
+| -b, --browser | The browser that will run the extension | Specifies the browser to build for (`chrome`, `edge`, `all`) | `"chrome"` |
+
+## Features
+
+- **Cross-Browser Builds:** You can build for multiple browsers in one go by specifying the `--browser` flag.
+ If you set the flag to `"all"`, Extension.js will generate builds for all supported browsers.
+- **Optimized for Production:** The `build` command optimizes the extension for production by applying minification and other performance improvements.
+- **Custom Output:** You can customize the output filename and format for your zip file by setting the `--zipFilename` option.
+
+## Example Build Command
+
+To build for Chrome and generate a zip file, run the following:
+
+
+
+## Build Process Overview
+
+During the build process, the following steps take place:
+
+- **Manifest Handling:** The manifest file is processed, ensuring that all required fields for the targeted browser are present.
+- **Asset Bundling:** JavaScript, CSS, and other assets are bundled and minified for optimal performance.
+- **Browser-Specific Transforms:** Depending on the target browser, Extension.js applies the necessary code transformations.
+- **Zip Generation:** If the `--zip` flag is passed, the build output will be packaged into a zip file for easy distribution to the browser’s extension store.
+
+## Best Practices
+
+- **Target All Browsers:** For cross-browser compatibility, always build for multiple browsers by using the `--browser=all` option.
+- **Check Build Logs:** After the build, review the logs to ensure there are no warnings or errors. The build logs will highlight any issues with compatibility or missing assets.
+- **Optimize Your Manifest:** Ensure that your `manifest.json` is optimized and fully compatible with all targeted browsers to avoid build issues.
+- **Custom Build Artifacts:** You can define custom names for your build artifacts using the `--zipFilename` option, which is useful for organizing builds.
+
+## Next Steps
+
+- Learn more about the [browsers available](../browsers/available.mdx).
diff --git a/docs/en/docs/commands/create.mdx b/docs/en/docs/commands/create.mdx
new file mode 100644
index 0000000..1887e0e
--- /dev/null
+++ b/docs/en/docs/commands/create.mdx
@@ -0,0 +1,95 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# Create Command
+
+The `create` command is responsible for setting up a new browser extension project using Extension.js.
+This command accepts flags like `--template` for initializing your extension with various templates,
+and allows you to define the directory or path where the extension will be created.
+The command is designed to simplify the setup process for developers,
+providing a streamlined way to get started with cross-browser extension development.
+
+## Usage
+
+You can run the `create` command using the following syntax.
+Replace `` with your project name or path and set any required options:
+
+ [options]",
+ pnpm: "pnpx extension@latest create [options]",
+ yarn: "yarn dlx extension@latest create [options]",
+ }}
+/>
+
+**Example Usage with Templates**
+
+
+
+This example demonstrates creating a new extension using the `react` template.
+You can substitute `react` with any available template from the [Templates](../getting-started/templates) section.
+
+## Path Option
+
+The `create` command can also accept a specific directory where you want to create the extension.
+If no path is provided, it defaults to the current working directory.
+
+
+
+In this example, the extension is created in the `path/to/my-extension` directory.
+
+## Arguments and Flags
+
+The `create` command accepts several arguments and flags to customize the behavior of the extension creation:
+
+| Flag | Argument | What it does | Defaults to |
+| ---------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
+| `[path or name]` | The extension path or name | If a path is defined, loads the local extension. If a name is provided, loads the extension in the current working directory. | `process.cwd()` |
+| -t, --template | Name of the template used to bootstrap your extension | Bootstrap your extension using a template | [new](../getting-started/templates#template-new) |
+
+- **Path or Name:** If a path is provided, the extension is created at that location. If a name is provided, it is created in the current working directory.
+- **`--template`:** Specifies the template to use when bootstrapping the extension (e.g., `react`, `typescript`).
+
+## Example Commands
+
+This command creates a new extension named my-new-extension using the React template.
+
+
+
+## Available Templates
+
+Users can choose from a variety of templates when creating their extension projects, including:
+
+- React: For building new tab or content scripts using React.
+- TypeScript: Initializes an extension with TypeScript support.
+- Custom: You can also specify external templates by providing a URL to a GitHub repo or any npm package.
+
+## Best Practices
+
+- Use meaningful names: When naming your extension or path, use meaningful names that reflect the project's purpose.
+- Customizing Templates: You can always customize your extension after it's created. For example, if you want to add TypeScript support to a React template, it's easy to do so afterward.
+- Starting from a Template: Using a template is the fastest way to get started with browser extension development in Extension.js.
+
+## Next Steps
+
+Once your extension is created, you can start developing by running extension dev. For more details on development workflows, check out the Development Guide.
diff --git a/docs/en/docs/commands/dev.mdx b/docs/en/docs/commands/dev.mdx
new file mode 100644
index 0000000..80b2e62
--- /dev/null
+++ b/docs/en/docs/commands/dev.mdx
@@ -0,0 +1,50 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# Dev Command
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+The `dev` command in Extension.js is responsible for running your extension in development mode.
+This command will start a new browser instance with your extension bundled and ready to run,
+while also enabling live-reload as you modify the extension files during development.
+
+## Usage
+
+You can run the `dev` command with the following syntax:
+
+
+
+## Description
+
+The `dev` command is essential for a fast development workflow. It watches for changes in your extension's files,
+recompiles them, and reloads the extension in real time. If you provide a URL, Extension.js will download and run the extension as if it were local.
+
+It supports multiple browsers, and you can specify which one to use by passing the `--browser` flag.
+Setting the `browser` to `"all"` will open the extension in all available browsers.
+If a browser is not installed, the command will throw a compiler error.
+
+## Arguments and Flags
+
+Below is a breakdown of the available flags for the `dev` command:
+
+| Flag | Argument | What it does | Defaults to |
+| ------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
+| [path or url] | The extension path or the remote extension URL | If a path is defined, it loads the local extension. If a URL is provided, it pulls the extension from a remote source and loads it as a local extension | `process.cwd()` |
+| -b, --browser | The browser that will run the extension | Changes the browser (`chrome`, `edge`, `all`) | `"chrome"` |
+
+## Best Practices
+
+- **Browser Specific Configurations:** You can use the `--browser` flag to run your extension in different browsers during the development process.
+
+## Next Steps
+
+- Learn more about the [Create Command](./create).
diff --git a/docs/en/docs/commands/preview.mdx b/docs/en/docs/commands/preview.mdx
new file mode 100644
index 0000000..daaeead
--- /dev/null
+++ b/docs/en/docs/commands/preview.mdx
@@ -0,0 +1,63 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# Preview Command
+
+> **Warning**: This feature is a work in progress and may be incomplete or subject to change. If you see an error or something that could be improved, please make a pull-request. The link that documents this feature can be found at the bottom of the page.
+
+
+
+**The `preview` command allows you to run your extension in a production-like environment without making a final build.** It simulates how the extension will behave in a production browser environment. This is helpful for testing before officially deploying or building the extension.
+
+## Features
+
+- **Production-like Environment:** The `preview` command runs the extension in a browser with production-like settings, providing a realistic preview of the extension's final behavior.
+- **Support for Remote Extensions:** If the path is a URL, `Extension.js` will download and preview the extension from that remote source, just like local extensions.
+- **Browser Selection:** You can specify which browser (`chrome`, `edge`, etc.) should preview the extension.
+- **Minimal Setup:** The preview command avoids full production builds, offering a faster way to check production behavior.
+
+## Arguments And Flags
+
+| Flag | Argument | What it does | Defaults to |
+| ------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
+| [path or url] | The extension path or the remote extension URL | If a path is defined, previews the local extension. If a URL is provided, pulls the extension from remote source and previews it as a local extension | `process.cwd()` |
+| -b, --browser | The browser that will run the extension | Specifies the browser (`chrome`, `edge`, `all`) | `"chrome"` |
+
+## Example Preview Command
+
+To preview your extension for Edge, run the following command:
+
+
+
+## Preview Process Overview
+
+When running the `preview` command, Extension.js follows these steps:
+
+1. **Manifest Validation:** Ensures that the `manifest.json` file exists in the project directory.
+2. **Production-like Bundle:** Bundles the extension files without creating a full production build. The files are optimized but not stored permanently.
+3. **Browser Launch:** Launches a browser instance and previews the extension, simulating a production environment.
+4. **Real-Time Feedback:** Displays progress messages and possible warnings/errors during the preview.
+
+## Best Practices
+
+- **Test Before Building:** Always use `preview` to test how your extension will behave in production before using the `build` command for the final package.
+- **Use Remote URLs:** If you want to test an extension stored in a remote repository, simply provide the repository URL as the argument.
+- **Set Custom Ports:** If you're running multiple browser instances, use custom ports with the `--port` flag to avoid conflicts.
+
+## Next Steps
+
+- After previewing, consider [Building Your Extension](./build.mdx) for the final production package.
diff --git a/docs/en/docs/development/_meta.json b/docs/en/docs/development/_meta.json
new file mode 100644
index 0000000..ade876a
--- /dev/null
+++ b/docs/en/docs/development/_meta.json
@@ -0,0 +1,10 @@
+[
+ { "name": "manifest-json", "label": "Manifest" },
+ { "name": "html", "label": "HTML" },
+ { "name": "scripts", "label": "Scripts" },
+ { "name": "css", "label": "CSS" },
+ { "name": "locales", "label": "Locales" },
+ { "name": "json", "label": "JSON" },
+ { "name": "icons", "label": "Icons" },
+ { "name": "web_accessible_resources", "label": "Web Accessible Resources" }
+]
diff --git a/docs/en/docs/development/css.mdx b/docs/en/docs/development/css.mdx
new file mode 100644
index 0000000..7105bd8
--- /dev/null
+++ b/docs/en/docs/development/css.mdx
@@ -0,0 +1,100 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# CSS
+
+In an extension, CSS files play a key role in defining the visual style of popups, options pages, new tab pages, and injected content. Extension.js ensures that CSS files defined in the `manifest.json` or included in HTML files are properly processed, supporting popular pre-processors like Sass, Less, and standard CSS.
+
+## CSS File Support
+
+Extension.js offers first-class support for CSS and its pre-processor variants (e.g., `.scss`, `.sass`, `.less`). These styles can be used in both `content_scripts` and HTML pages with their original extensions, making development flexible and modern. Additionally, hot-module replacement (HMR) is supported for CSS during development, ensuring rapid feedback and live updates.
+
+The following manifest fields are supported for CSS files:
+
+| Manifest Field | File Type Expected | HMR Support |
+| ----------------------------- | ------------------------- | ----------- |
+| `content_scripts.css` | .css, .scss, .sass, .less | Yes |
+| `background.page` | .css, .scss, .sass, .less | Yes |
+| `action.default_popup` | .css, .scss, .sass, .less | Yes |
+| `chrome_url_overrides.newtab` | .css, .scss, .sass, .less | Yes |
+| `options_ui.page` | .css, .scss, .sass, .less | Yes |
+| `devtools_page` | .css, .scss, .sass, .less | Yes |
+
+## Sample CSS in `manifest.json`
+
+Here’s a basic example of adding CSS files to `content_scripts` in the `manifest.json`:
+
+```json
+{
+ "manifest_version": 3,
+ "name": "My Extension",
+ "version": "1.0",
+ "content_scripts": [
+ {
+ "matches": [""],
+ "css": ["./styles/content-style.less"],
+ "js": ["./scripts/content-script.js"]
+ }
+ ]
+}
+```
+
+## Sample CSS in HTML Files
+
+CSS can be directly imported in HTML files, with full support for pre-processors like Less and Sass. Simply include the styles with their original extensions, and Extension.js will handle the compilation and injection of these styles:
+
+```html
+
+
+
+
+
+ My Extension Page
+
+
+
+
Welcome to My Extension
+
This is a sample extension page.
+
+
+```
+
+## Output Path
+
+The output path for CSS files follows the same logic as scripts or HTML. The CSS will be bundled into `[feature]/index.css` for styles imported in HTML files, based on where it's used. For example, for a `newtab` override, the resulting files would look like this:
+
+```plaintext
+chrome_url_overrides/
+├── index.html
+├── index.js
+└── index.css
+```
+
+For the CSS that represents content scripts in the `manifest.json` file, the output path will be:
+
+```plaintext
+content_scripts/
+├── index.js
+└── index.css
+```
+
+## How Extension.js Handles CSS
+
+The plugin for CSS file support in Extension.js ensures that the following steps occur during compilation:
+
+1. **Add CSS Entries:** CSS entries from the manifest and additional styles from HTML or `/styles` folder are added to the compilation.
+2. **Inject Styles for Content Scripts:** During development, CSS files are dynamically injected into `content_scripts` to benefit from HMR.
+3. **Enable HMR for CSS:** HMR is enabled for CSS files across all relevant extension contexts.
+4. **Support for Pre-processors:** Files with `.scss`, `.sass`, and `.less` extensions are fully supported and compiled during the build process.
+5. **Support for PostCSS:** PostCSS is supported for additional transformations and optimizations on CSS files.
+
+## Best Practices
+
+- Ensure your manifest fields correctly reference CSS files to take advantage of live-reloading and asset handling.
+- Leverage the power of CSS pre-processors like Sass and Less for more organized and maintainable styles.
+
+## Next Steps
+
+- Learn more about handling additional CSS and static files via [Special Folders](../features/special-folders.mdx).
diff --git a/docs/en/docs/development/html.mdx b/docs/en/docs/development/html.mdx
new file mode 100644
index 0000000..103a9a9
--- /dev/null
+++ b/docs/en/docs/development/html.mdx
@@ -0,0 +1,99 @@
+import { PackageManagerTabs } from "@theme";
+import { AvatarImage } from "../../../../theme/components/avatar-image";
+
+
+
+# HTML
+
+In an extension, HTML files serve as the foundation for user interfaces such as popups, options pages, and new tab pages. Extension.js ensures that HTML files defined in the `manifest.json` file are correctly processed, with full support for styles, scripts, and static assets.
+
+## HTML File Support
+
+Extension.js offers first-class support for HTML files, ensuring hot-module replacement (HMR) where applicable. It handles asset injection (images, CSS, JS), live-reloading, and updates.
+
+The following manifest fields use HTML files as entry points:
+
+| Manifest Field | File Type Expected | HMR Support |
+| ------------------------------------ | ------------------ | ----------- |
+| `action.default_popup` | .html | Yes |
+| `background.page` | .html | Yes |
+| `chrome_settings_overrides.homepage` | .html | Yes |
+| `chrome_url_overrides.newtab` | .html | Yes |
+| `chrome_url_overrides.history` | .html | Yes |
+| `chrome_url_overrides.bookmarks` | .html | Yes |
+| `devtools_page` | .html | Yes |
+| `options_ui.page` | .html | Yes |
+| `page_action.default_popup` | .html | Yes |
+| `sandbox.pages` | .html | Yes |
+| `side_panel.default_panel` | .html | Yes |
+| `sidebar_action.default_panel` | .html | Yes |
+
+## Sample HTML File
+
+Here’s a basic example of an HTML file used in an extension:
+
+```html
+
+
+
+
+
+ My Extension Page
+
+
+
+
+
Welcome to My Extension
+
This is a sample extension page.
+
+
+
+
+```
+
+## Handling HTML Files Not Declared in `manifest.json`
+
+If you need to include additional HTML files that are not declared in the `manifest.json`, such as sandboxed iframes or extra pages, you can place these files in the `/pages` folder. Extension.js will process the HTML files in this folder as it would for any HTML entry point defined in the manifest.
+
+**Example Usage:**
+Place your HTML file in the `/pages` folder, and it will be bundled and available for use, with full support for HMR, asset injection, and other processing steps.
+
+```plaintext
+pages/
+└── extra-page.html
+```
+
+This allows you to add extra pages to your extension without cluttering the manifest or needing to specify them directly there.
+
+For more details, refer to the [Special Folders documentation](../features/special-folders.mdx).
+
+## Output Path
+
+The output path for HTML files is always structured as `[feature]/index[ext]`. For example, if you're working on a new tab override, the resulting files would look like this:
+
+```plaintext
+chrome_url_overrides/
+├── index.html
+├── index.css
+└── index.js
+```
+
+## How Extension.js Handles HTML
+
+The plugin for HTML file support in Extension.js ensures that the following steps occur during compilation:
+
+1. **Emit HTML File:** The original HTML file is included in the compilation process.
+2. **Inject Assets:** Static assets like ``, ``, and `
-