Giter Club home page Giter Club logo

cezaraugusto / extension Goto Github PK

View Code? Open in Web Editor NEW
2.4K 15.0 56.0 3.5 MB

🧩 Plug-and-play, zero-config, cross-browser extension development tool.

Home Page: https://extension.js.org

License: MIT License

JavaScript 13.56% HTML 2.91% CSS 3.46% TypeScript 80.07%
webextensions webextension browser-extensions browser-extension extensions extension chrome firefox edge safari chromium browser generator boilerplate template kit starter-kit cli runner

extension's Introduction

Extension.js npm fossa workflow downloads PR's welcome

Plug-and-play, zero-config, cross-browser extension development tool.

Screenshot 2024-03-25 at 13 06 15

Logo

Create cross-browser extensions with no build configuration.

Extension.js is a plug-and-play, zero-config, cross-browser extension development tool with built-in support for TypeScript, WebAssembly, React, and modern JavaScript.

Create A New Extension

npx extension create my-extension
cd my-extension
npm run dev

A new browser instance will open up with your extension ready for development.

You are done. Time to hack on your extension!

create-a-new-extension.mp4

Get Started Immediately

Kickstart Any Sample from Chrome Extension Samples

Dive right into development by starting with a sample from the Chrome Extension Samples repository. It's a great way to get acquainted with best practices and save time:

  1. Open your terminal.
  2. Navigate to the directory where you want your project.
  3. Run the command:
    npx extension dev <sample-name>
    Replace <sample-name> with the name of the sample you wish to use from Chrome Extension Samples.

See the example below where we request the sample page-redder from Google Chrome Extension Samples.

npx extension dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.page-redder --browser=edge
chrome-extension-sample-page-redder-on-edge.mp4

Use Microsoft Edge to kickstart any sample from chrome-extesions-sample

Extension.js supports a variety of browsers, including Microsoft Edge. To start an Edge-compatible extension, simply:

  1. Open your terminal.
  2. Navigate to your desired project directory.
  3. Execute:
    npx extension dev  <sample-name> --browser=edge
    Tailor your command by replacing <sample-name> with the specific sample you're interested in.

See the example below where we request the sample magic8ball from from Google Chrome Extension Samples using Edge as the runtime browser.

npx extension dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/topSites/magic8ball --browser=edge
chrome-extension-sample-magic8ball-on-edge.mp4

Run Mozilla Add-Ons Using Edge

Bridge the gap between Firefox and Edge by running Mozilla Add-Ons using Edge:

  1. Navigate to your project directory.
  2. Use the command:
    npx extension dev <addon-name> --browser=edge --polyfill=true
    This will fetch a Mozilla Add-On and adapt it for Edge.

See the example below where we request the sample Apply CSS from MDN WebExtensions Examples using Edge as the runtime browser.

npx extension dev https://github.com/mdn/webextensions-examples/tree/main/apply-css --browser=edge --polyfill=true
mdn-webextensions-examples-apply-css-on-edge.mp4

I have An Extension

usage-with-an-existing-extension.mp4

If you have an existing extension which is using a package manager, you can install the Extension.js package and manually create the scripts used to run your extension. See the demo above or follow these instructions to get it done:

Step 1 - Install extension as a devDependency

npm install extension --save-dev

Step 2 - Link your npm scripts with the executable Extension.js commands

{
  "scripts": {
    "build": "extension build",
    "dev": "extension dev",
    "start": "extension start"
  },
  "devDependencies": {
    // ...other deps,s
    "extension": "latest"
  }
}

Done. You are all set!

  • To develop the extension, run npm run dev.
  • To visualize the extension in production mode, run npm run start.
  • To build the extension in production mode, run npm run build.

Using a specific browser for development

Desktop Browsers

☑️ = Likely works but no browser runner support yet.

Brave Browser Google Chrome Microsoft Edge Mozilla Firefox Opera Browser Apple Safari Vivaldi Browser
☑️ ☑️ ⛔️ ☑️

Mobile Browsers

Firefox For Android Safari On iOS
⛔️ ⛔️

If you want to target a specific browser, just pass the --browser flag to the dev/start command (based on the list available above), like npx extension dev path/to/extension --browser=edge.

Hint Pass --browser="all" to load all available browsers at once.

extension dev --browser=all
Screenshot 2024-03-25 at 13 06 15

License

MIT (c) Cezar Augusto.

extension's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

extension's Issues

Content scripts CSS doesn't reload

It seems that bundling the CSS content_script along with the JS file is not enough for reloading the CSS files. A strategy can be appending these styles as dynamic imports into the .js files and targeting the CSS chunk names to where the manifest.json expects.

Improve original template

Add visual tools to show users how to develop HTML interfaces and add some other functionality to get users up-to-speed into development.

List reload capabilities and bugs

There are a few undocumented bugs/workarounds to make global extension reload that need to be listed and patched. This is for the future.

Support global installs

Currently, extension-create is too heavy to run via npx which is useful only for demonstration purposes. It's best to let users npm install -g extension-create and add an update notification for when it needs update.

  1. Fix types reference. In extension.d.ts the path to the default types should be absolute.
  2. Add update-check to handle package updates: https://www.npmjs.com/package/update-check.

Error: Cannot find module 'webpack-run-edge-extension'

I'm trying to create a extension with typescript react template

npx extension create my-extension --template=react-typescript

I'm getting an error related to edge

node:internal/modules/cjs/loader:1147
  throw err;
  ^

Error: Cannot find module 'webpack-run-edge-extension'
Require stack:
- /home/***/.npm/_npx/3b1fc9cdc75022aa/node_modules/@extension-create/develop/dist/module.js
- /home/***/.npm/_npx/3b1fc9cdc75022aa/node_modules/extension/dist/cli.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (/home/***/.npm/_npx/3b1fc9cdc75022aa/node_modules/@extension-create/develop/dist/module.js:10:10676)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/home/***/.npm/_npx/3b1fc9cdc75022aa/node_modules/@extension-create/develop/dist/module.js',
    '/home/***/.npm/_npx/3b1fc9cdc75022aa/node_modules/extension/dist/cli.js'
  ]
}

Node.js v20.11.0

I'm on ubuntu, so dont have edge browser installed

Versions

node: 20.11.0
npm 10.2.4
ubuntu: 22.04.1 LTS

Improve Environment Variables support

Would be nice to allow extension developers to access which is the current browser and whether we are in development/production mode.

  • Support .env files based on current mode, namely .env.local, .env.production and .env.development.
  • Support .env files based on browser vendor, namely .env.edge, .env.safari, etc.

Unable to run; erroneously claims address 127.0.0.1:8000 is in use

No matter what I do, I cannot seem to get the thing to launch. I am consistently rebuked by an error informing me that its preferred localhost address is already in use. I experience this same effect with or without the --port flag, including after a clean boot, with literally no other web processes in use (see attached imagery below).

image

As you can see from the stack trace, I'm not seeing anything that would be a whole lotta help (though I have no issues spinning up servers through any other means, including atop 8000).

Any ideas?

I'm running on Wayland (GNOME 45.2)/Ubuntu 23.10, on a 12-core Intel i7 10750H with 32GB of memory, and well over a half terabyte free. Active shell is Bash v.5.2.15, npm is at v10.5.0, and node is on v20.9.0 (lts/iron).

error in npx start

I am new in npx, can anyone help me with this.

I am getting this on execution of npx extension-create start

npm ERR! cb.apply is not a function npm ERR! A complete log of this run can be found in: npm ERR! /home/ashutosh/.npm/_logs/2021-07-29T22_36_15_037Z-debug.log Install for [ 'extension-create@latest' ] failed with code 1

node --verison: 16.4.2
npx --verison : 10.2.2

Add tests for programs

@extension-create/create and @extension-create/develop can benefit from some e2e tests. It should cover whatever we say we support in the documentation.

Installation fails on Windows

Installation fails on Windows because of the usage of UNIX-only executable "sh"

'sh' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] preinstall: `sh preinstall.sh`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] preinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\s-che\AppData\Roaming\npm-cache\_logs\2021-03-02T15_17_57_063Z-debug.log
Install for [ 'extension-create@latest' ] failed with code 1

Support Chrome Extensions samples

Ref: https://github.com/GoogleChrome/chrome-extensions-samples

Tests conducted

  1. No deprecated functionality
  2. Extension must load without errors
  3. Changes on any file declared in manifest should trigger proper reload

Browser Extension Manual Tests

chrome-api-samples

Index Done MV Source Name
0 3 src chrome-api-samples/action
1 3 src chrome-api-samples/alarms
2 3 src chrome-api-samples/bookmarks
3 3 src chrome-api-samples/browsingData
4 3 src chrome-api-samples/contentSettings
5 3 src chrome-api-samples/contextMenus/basic
6 3 src chrome-api-samples/contextMenus/global_context_search
7 3 src chrome-api-samples/cookies
8 3 src chrome-api-samples/debugger
9 3 src chrome-api-samples/declarativeNetRequest/no-cookies
10 3 src chrome-api-samples/declarativeNetRequest/url-blocker
11 3 src chrome-api-samples/declarativeNetRequest/url-redirect
12 3 src chrome-api-samples/default_command_override
13 3 src chrome-api-samples/devtools/inspectedWindow
14 3 src chrome-api-samples/devtools/panels
15 3 src chrome-api-samples/favicon
16 3 src chrome-api-samples/fontSettings/fontSettings Advanced
17 3 src chrome-api-samples/fontSettings/fontSettings Basic
18 3 src chrome-api-samples/history/historyOverride
19 3 src chrome-api-samples/history/showHistory
20 3 src chrome-api-samples/idle
21 3 src chrome-api-samples/il8n
22 3 src chrome-api-samples/omnibox/new-tab-search
23 3 src chrome-api-samples/omnibox/simple-example
24 3 src chrome-api-samples/override/blank_ntp
25 3 src chrome-api-samples/power
26 3 src chrome-api-samples/printing
27 3 src chrome-api-samples/privacy
28 3 src chrome-api-samples/readingList
29 3 src chrome-api-samples/richNotification
30 3 src chrome-api-samples/sandbox/sandbox
31 3 src chrome-api-samples/sandbox/sandboxed-content
32 3 src chrome-api-samples/scripting
33 3 src chrome-api-samples/storage/stylizr
34 3 src chrome-api-samples/tabCapture
35 3 src chrome-api-samples/tabs/inspector
36 3 src chrome-api-samples/tabs/pin
37 3 src chrome-api-samples/tabs/screenshot
38 3 src chrome-api-samples/tabs/zoom
39 3 src chrome-api-samples/topSites/basic
40 3 src chrome-api-samples/topSites/magic8ball
41 3 src chrome-api-samples/userScripts
42 3 src chrome-api-samples/web-accessible-resources
43 3 src chrome-api-samples/webNavigation/basic
44 3 src chrome-api-samples/webRequest/http-auth
45 3 src chrome-api-samples/windows

chrome-archive

Index Done MV Source Name
0 2 src chrome-archive/apps/samples/analytics
1 2 src chrome-archive/apps/samples/appengine-channelapi/app
2 2 src chrome-archive/apps/samples/appsquare
3 2 src chrome-archive/apps/samples/appview/embedded-app
4 2 src chrome-archive/apps/samples/appview/host-app
5 2 src chrome-archive/apps/samples/blink1
6 undefined src chrome-archive/apps/samples/bluetooth-samples/battery-service-demo
7 undefined src chrome-archive/apps/samples/bluetooth-samples/device-info-demo
8 undefined src chrome-archive/apps/samples/bluetooth-samples/heart-rate-sensor
9 2 src chrome-archive/apps/samples/calculator
10 2 src chrome-archive/apps/samples/camera-capture
11 2 src chrome-archive/apps/samples/clock
12 2 src chrome-archive/apps/samples/context-menu
13 2 src chrome-archive/apps/samples/dart
14 2 src chrome-archive/apps/samples/desktop-capture
15 2 src chrome-archive/apps/samples/dialog-element
16 2 src chrome-archive/apps/samples/diff
17 2 src chrome-archive/apps/samples/filesystem-access
18 2 src chrome-archive/apps/samples/frameless-window
19 2 src chrome-archive/apps/samples/gcm-notifications
20 2 src chrome-archive/apps/samples/gdrive
21 2 src chrome-archive/apps/samples/github-auth
22 2 src chrome-archive/apps/samples/hello-world
23 2 src chrome-archive/apps/samples/hello-world-sync
24 2 src chrome-archive/apps/samples/hid
25 2 src chrome-archive/apps/samples/identity
26 2 src chrome-archive/apps/samples/image-edit
27 2 src chrome-archive/apps/samples/instagram-auth
28 2 src chrome-archive/apps/samples/io2012-presentation/helloworld
29 2 src chrome-archive/apps/samples/io2012-presentation
30 2 src chrome-archive/apps/samples/io2012-presentation/servo
31 2 src chrome-archive/apps/samples/ioio
32 2 src chrome-archive/apps/samples/keyboard-handler
33 2 src chrome-archive/apps/samples/managed-in-app-payments
34 2 src chrome-archive/apps/samples/manga-cam
35 2 src chrome-archive/apps/samples/mdns-browser
36 2 src chrome-archive/apps/samples/media-gallery
37 2 src chrome-archive/apps/samples/messaging/app1
38 2 src chrome-archive/apps/samples/messaging/app2
39 2 src chrome-archive/apps/samples/messaging/extension
40 2 src chrome-archive/apps/samples/mini-code-edit
41 2 src chrome-archive/apps/samples/multicast
42 2 src chrome-archive/apps/samples/one-time-payment
43 2 src chrome-archive/apps/samples/optional-permissions
44 2 src chrome-archive/apps/samples/parrot-ar-drone
45 2 src chrome-archive/apps/samples/platform-title
46 2 src chrome-archive/apps/samples/printing
47 2 src chrome-archive/apps/samples/restarted-demo
48 2 src chrome-archive/apps/samples/rich-notifications
49 2 src chrome-archive/apps/samples/sandbox
50 2 src chrome-archive/apps/samples/sandboxed-content
51 2 src chrome-archive/apps/samples/serial/adkjs/app
52 2 src chrome-archive/apps/samples/serial/espruino
53 2 src chrome-archive/apps/samples/serial/ledtoggle
54 2 src chrome-archive/apps/samples/serial-control-signals
55 2 src chrome-archive/apps/samples/servo
56 2 src chrome-archive/apps/samples/storage
57 2 src chrome-archive/apps/samples/syncfs-editor
58 2 src chrome-archive/apps/samples/systemInfo
59 2 src chrome-archive/apps/samples/tasks
60 2 src chrome-archive/apps/samples/tcpserver
61 2 src chrome-archive/apps/samples/telnet
62 2 src chrome-archive/apps/samples/text-editor
63 2 src chrome-archive/apps/samples/todomvc
64 2 src chrome-archive/apps/samples/tts
65 2 src chrome-archive/apps/samples/udp
66 2 src chrome-archive/apps/samples/url-handler
67 2 src chrome-archive/apps/samples/usb/device-info
68 2 src chrome-archive/apps/samples/usb/knob
69 2 src chrome-archive/apps/samples/usb-label-printer
70 2 src chrome-archive/apps/samples/weather
71 2 src chrome-archive/apps/samples/web-store
72 2 src chrome-archive/apps/samples/webgl-pointer-lock
73 2 src chrome-archive/apps/samples/webserver
74 2 src chrome-archive/apps/samples/websocket-server
75 2 src chrome-archive/apps/samples/webview-samples/browser
76 2 src chrome-archive/apps/samples/webview-samples/declarative-web-request
77 2 src chrome-archive/apps/samples/webview-samples/insert-css
78 2 src chrome-archive/apps/samples/webview-samples/local-resources
79 2 src chrome-archive/apps/samples/webview-samples/multi-tab-browser
80 2 src chrome-archive/apps/samples/webview-samples/new-window
81 2 src chrome-archive/apps/samples/webview-samples/new-window-user-agent
82 2 src chrome-archive/apps/samples/webview-samples/shared-script
83 2 src chrome-archive/apps/samples/webview-samples/user-agent
84 2 src chrome-archive/apps/samples/webview-samples/webview
85 2 src chrome-archive/apps/samples/window-options
86 2 src chrome-archive/apps/samples/window-state
87 2 src chrome-archive/apps/samples/windows
88 2 src chrome-archive/mv2/api/bookmarks/basic
89 2 src chrome-archive/mv2/api/browserAction/make_page_red
90 2 src chrome-archive/mv2/api/browserAction/print
91 2 src chrome-archive/mv2/api/browserAction/set_icon_path
92 2 src chrome-archive/mv2/api/browserAction/set_page_color
93 2 src chrome-archive/mv2/api/browsingData/basic
94 2 src chrome-archive/mv2/api/commands
95 2 src chrome-archive/mv2/api/contentSettings
96 2 src chrome-archive/mv2/api/contextMenus/basic
97 2 src chrome-archive/mv2/api/contextMenus/event_page
98 2 src chrome-archive/mv2/api/contextMenus/global_context_search
99 2 src chrome-archive/mv2/api/cookies
100 2 src chrome-archive/mv2/api/debugger/live-headers
101 2 src chrome-archive/mv2/api/debugger/pause-resume
102 2 src chrome-archive/mv2/api/default_command_override
103 3 src chrome-archive/mv2/api/desktopCapture
104 2 src chrome-archive/mv2/api/deviceInfo/basic
105 2 src chrome-archive/mv2/api/devtools/network/chrome-firephp
106 2 src chrome-archive/mv2/api/devtools/panels/chrome-query
107 2 src chrome-archive/mv2/api/displaySource/tabCast
108 2 src chrome-archive/mv2/api/document_scan
109 2 src chrome-archive/mv2/api/downloads/download_filename_controller
110 2 src chrome-archive/mv2/api/downloads/download_links
111 2 src chrome-archive/mv2/api/downloads/download_manager
112 2 src chrome-archive/mv2/api/downloads/download_open
113 2 src chrome-archive/mv2/api/downloads/downloads_overwrite
114 2 src chrome-archive/mv2/api/eventPage/basic
115 2 src chrome-archive/mv2/api/extension/isAllowedAccess
116 2 src chrome-archive/mv2/api/fileSystemProvider/archive
117 2 src chrome-archive/mv2/api/fileSystemProvider/basic
118 2 src chrome-archive/mv2/api/fontSettings
119 2 src chrome-archive/mv2/api/history/historyOverride
120 2 src chrome-archive/mv2/api/history/showHistory
121 2 src chrome-archive/mv2/api/i18n/cld
122 2 src chrome-archive/mv2/api/i18n/detectLanguage
123 2 src chrome-archive/mv2/api/i18n/getMessage
124 2 src chrome-archive/mv2/api/i18n/localizedHostedApp
125 2 src chrome-archive/mv2/api/idle/idle_simple
126 2 src chrome-archive/mv2/api/input.ime/basic
127 2 src chrome-archive/mv2/api/messaging/timer
128 2 src chrome-archive/mv2/api/nativeMessaging/app
129 2 src chrome-archive/mv2/api/notifications
130 2 src chrome-archive/mv2/api/omnibox/newtab_search
131 2 src chrome-archive/mv2/api/omnibox/simple-example
132 2 src chrome-archive/mv2/api/override/blank_ntp
133 2 src chrome-archive/mv2/api/override/override_igoogle
134 2 src chrome-archive/mv2/api/pageAction/pageaction_by_content
135 2 src chrome-archive/mv2/api/pageAction/pageaction_by_url
136 2 src chrome-archive/mv2/api/pageAction/set_icon
137 2 src chrome-archive/mv2/api/permissions/extension-questions
138 2 src chrome-archive/mv2/api/power
139 2 src chrome-archive/mv2/api/preferences/allowThirdPartyCookies
140 2 src chrome-archive/mv2/api/preferences/enableReferrer
141 2 src chrome-archive/mv2/api/printing
142 2 src chrome-archive/mv2/api/printingMetrics
143 2 src chrome-archive/mv2/api/processes/process_monitor
144 2 src chrome-archive/mv2/api/processes/show_tabs
145 2 src chrome-archive/mv2/api/storage/stylizr
146 2 src chrome-archive/mv2/api/tabCapture
147 2 src chrome-archive/mv2/api/tabs/inspector
148 2 src chrome-archive/mv2/api/tabs/pin
149 2 src chrome-archive/mv2/api/tabs/screenshot
150 2 src chrome-archive/mv2/api/tabs/zoom
151 2 src chrome-archive/mv2/api/topsites/basic
152 2 src chrome-archive/mv2/api/topsites/magic8ball
153 2 src chrome-archive/mv2/api/ttsEngine/console_tts_engine
154 2 src chrome-archive/mv2/api/water_alarm_notification
155 2 src chrome-archive/mv2/api/webNavigation/basic
156 2 src chrome-archive/mv2/api/webview/capturevisibleregion
157 2 src chrome-archive/mv2/api/webview/comm_demo_app
158 2 src chrome-archive/mv2/api/webview/comm_demo_ext
159 2 src chrome-archive/mv2/api/windows/merge_windows
160 2 src chrome-archive/mv2/extensions/app_launcher
161 2 src chrome-archive/mv2/extensions/buildbot
162 2 src chrome-archive/mv2/extensions/calendar
163 2 src chrome-archive/mv2/extensions/catblock
164 2 src chrome-archive/mv2/extensions/catifier
165 2 src chrome-archive/mv2/extensions/chrome_search
166 2 src chrome-archive/mv2/extensions/constant_context
167 2 src chrome-archive/mv2/extensions/download_images
168 2 src chrome-archive/mv2/extensions/email_this_page
169 2 src chrome-archive/mv2/extensions/fx
170 undefined src chrome-archive/mv2/extensions/gdocs
171 2 src chrome-archive/mv2/extensions/gmail
172 2 src chrome-archive/mv2/extensions/imageinfo
173 2 src chrome-archive/mv2/extensions/irc/app
174 2 src chrome-archive/mv2/extensions/managed_bookmarks
175 2 src chrome-archive/mv2/extensions/mappy
176 2 src chrome-archive/mv2/extensions/maps_app
177 undefined src chrome-archive/mv2/extensions/news
178 2 src chrome-archive/mv2/extensions/news_a11y
179 2 src chrome-archive/mv2/extensions/news_i18n
180 2 src chrome-archive/mv2/extensions/no_cookies
181 2 src chrome-archive/mv2/extensions/oauth_contacts
182 2 src chrome-archive/mv2/extensions/optional_permissions
183 2 src chrome-archive/mv2/extensions/plugin_settings
184 2 src chrome-archive/mv2/extensions/proxy_configuration
185 2 src chrome-archive/mv2/extensions/speak_selection
186 2 src chrome-archive/mv2/extensions/talking_alarm_clock
187 2 src chrome-archive/mv2/extensions/ttsdebug
188 2 src chrome-archive/mv2/extensions/ttsdemo
189 2 src chrome-archive/mv2/howto/sandbox
190 2 src chrome-archive/mv2/howto/tab_shortcuts
191 2 src chrome-archive/mv2/tutorials/analytics
192 2 src chrome-archive/mv2/tutorials/broken_background_color
193 2 src chrome-archive/mv2/tutorials/get_started
194 2 src chrome-archive/mv2/tutorials/get_started_complete
195 2 src chrome-archive/mv2/tutorials/getstarted
196 2 src chrome-archive/mv2/tutorials/hello_extensions
197 2 src chrome-archive/mv2/tutorials/oauth_starter
198 2 src chrome-archive/mv2/tutorials/oauth_tutorial_complete

chrome-functional-samples

Index Done MV Source Name
0 3 src chrome-functional-samples/cookbook.file_handlers
1 3 src chrome-functional-samples/cookbook.geolocation-contentscript
2 3 src chrome-functional-samples/cookbook.geolocation-offscreen
3 3 src chrome-functional-samples/cookbook.geolocation-popup
4 3 src chrome-functional-samples/cookbook.offscreen-clipboard-write
5 3 src chrome-functional-samples/cookbook.offscreen-dom
6 3 src chrome-functional-samples/cookbook.push
7 3 src chrome-functional-samples/cookbook.sidepanel-global
8 3 src chrome-functional-samples/cookbook.sidepanel-multiple
9 3 src chrome-functional-samples/cookbook.sidepanel-open
10 3 src chrome-functional-samples/cookbook.sidepanel-site-specific
11 3 src chrome-functional-samples/cookbook.wasm-helloworld-print
12 3 src chrome-functional-samples/cookbook.wasm-helloworld-print-nomodule
13 3 src chrome-functional-samples/reference.mv3-content-scripts
14 3 src chrome-functional-samples/sample.bookmarks
15 3 src chrome-functional-samples/sample.catifier
16 3 src chrome-functional-samples/sample.co2meter
17 3 src chrome-functional-samples/sample.dnr-rule-manager
18 3 src chrome-functional-samples/sample.favicon-cs
19 3 src chrome-functional-samples/sample.milestones
20 3 src chrome-functional-samples/sample.optional_permissions
21 3 src chrome-functional-samples/sample.page-redder
22 3 src chrome-functional-samples/sample.sidepanel-dictionary
23 3 src chrome-functional-samples/sample.tabcapture-recorder
24 3 src chrome-functional-samples/sample.water_alarm_notification
25 3 src chrome-functional-samples/tutorial.broken-color
26 3 src chrome-functional-samples/tutorial.focus-mode
27 3 src chrome-functional-samples/tutorial.focus-mode-debugging
28 3 src chrome-functional-samples/tutorial.getting-started
29 3 src chrome-functional-samples/tutorial.google-analytics
30 3 src chrome-functional-samples/tutorial.hello-world
31 3 src chrome-functional-samples/tutorial.quick-api-reference
32 3 src chrome-functional-samples/tutorial.reading-time
33 3 src chrome-functional-samples/tutorial.tabs-manager
34 3 src chrome-functional-samples/tutorial.websockets

Setup test command

yarn extension-create test my-extension-hello should be equivalent to running jest in the project root.

Add auto option

Auto option (correct flag TBD) should trigger both create and run commands, and kickoff a new browser instance immediately after the command.

Support MDN WebExtensions examples

Ref: https://github.com/mdn/webextensions-examples

Index Done MV Source Name
0 2 src mdn-all/annotate-page
1 2 src mdn-all/apply-css
2 2 src mdn-all/beastify
3 2 src mdn-all/bookmark-it
4 2 src mdn-all/borderify
5 2 src mdn-all/chill-out
6 2 src mdn-all/commands
7 2 src mdn-all/content-script-register
8 2 src mdn-all/context-menu-copy-link-with-types
9 2 src mdn-all/contextual-identities
10 2 src mdn-all/cookie-bg-picker
11 2 src mdn-all/devtools-inspector-sidebar
12 2 src mdn-all/devtools-panels
13 2 src mdn-all/discogs-search
14 3 src mdn-all/dnr-block-only
15 3 src mdn-all/dnr-dynamic-with-options
16 3 src mdn-all/dnr-redirect-url
17 2 src mdn-all/dynamic-theme
18 2 src mdn-all/emoji-substitution
19 2 src mdn-all/eslint-example
20 2 src mdn-all/export-helpers
21 2 src mdn-all/favourite-colour
22 2 src mdn-all/find-across-tabs
23 2 src mdn-all/firefox-code-search
24 2 src mdn-all/forget-it
25 2 src mdn-all/google-userinfo
26 2 src mdn-all/history-deleter
27 2 src mdn-all/http-response
28 2 src mdn-all/imagify
29 2 src mdn-all/latest-download
30 2 src mdn-all/list-cookies
31 2 src mdn-all/menu-accesskey-visible
32 2 src mdn-all/menu-demo
33 2 src mdn-all/menu-labelled-open
34 2 src mdn-all/menu-remove-element
35 2 src mdn-all/menu-search
36 2 src mdn-all/mocha-client-tests/addon
37 2 src mdn-all/native-messaging/add-on
38 2 src mdn-all/navigation-stats
39 2 src mdn-all/notify-link-clicks-i18n
40 2 src mdn-all/open-irc-links
41 2 src mdn-all/open-my-page-button
42 2 src mdn-all/page-to-extension-messaging
43 2 src mdn-all/permissions
44 2 src mdn-all/private-browsing-theme
45 2 src mdn-all/proxy-blocker
46 2 src mdn-all/quicknote
47 2 src mdn-all/root-cert-stats
48 2 src mdn-all/runtime-examples
49 2 src mdn-all/selection-to-clipboard
50 2 src mdn-all/session-state
51 2 src mdn-all/store-collected-images/webextension-plain
52 2 src mdn-all/store-collected-images/webextension-with-webpack/extension
53 2 src mdn-all/stored-credentials
54 2 src mdn-all/tabs-tabs-tabs
55 2 src mdn-all/theme-integrated-sidebar
56 2 src mdn-all/theme-switcher
57 2 src mdn-all/themes/animated
58 2 src mdn-all/themes/temp
59 2 src mdn-all/themes/weta_fade
60 2 src mdn-all/themes/weta_fade_chrome
61 2 src mdn-all/themes/weta_mirror
62 2 src mdn-all/themes/weta_tiled
63 2 src mdn-all/top-sites
64 2 src mdn-all/user-agent-rewriter
65 2 src mdn-all/user-script-register
66 2 src mdn-all/webpack-modules/addon
67 2 src mdn-all/window-manipulator

Content scripts can't recover from a page reload

If the user has a content_script and decides to reload the tab, we lose HMR and need to fully reload the extension. This is a bug but needs investigation but not top priority at the moment.

Shadow DOM powered Content Scripts UI

Hey! Love the project, amazing work!

I was wondering what the plans are for supporting UI that's injected into the current web page using shadow DOM or other isolation techniques. This is similar to Plasmo's Content Scripts UI.

My use case involves displaying a chatbot on specific websites and enhancing the experience.

Create output throws error in local dev

Due to symlink bugs. See output:

npm ERR! code EEXIST
npm ERR! syscall symlink
npm ERR! path ../lib/node_modules/extension-create/cli.js
npm ERR! dest /usr/local/bin/extension-create
npm ERR! errno -17
npm ERR! EEXIST: file already exists, symlink '../lib/node_modules/extension-create/cli.js' -> '/usr/local/bin/extension-create'
npm ERR! File exists: /usr/local/bin/extension-create
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/cezar/.npm/_logs/2021-01-27T13_37_52_386Z-debug.log

STR:

  • create an extension locally using yarn extension-create HELLO

Reduce package size

Core packages combined are enourmous sizing +250mb.

@extension-create/create
Image

@extension-create/develop
Image

In the future we can remove "pacote" from @extension-create/create and use go-git-it like @extension-create/develop does. This can save us up to 10mb.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.