├── .circleci ├── .gitignore ├── build_profiles.sh ├── config.yml ├── dist │ └── index.js ├── package-lock.json ├── package.json └── src │ └── build_profiles.ts ├── .github ├── actions │ └── directory │ │ ├── .gitignore │ │ ├── action.yml │ │ ├── dist │ │ └── index.js │ │ ├── package-lock.json │ │ ├── package.json │ │ └── src │ │ └── index.ts └── workflows │ └── plugin-directory.yml ├── .gitignore ├── LICENSE ├── README.md ├── build └── metadata.json ├── docs ├── .DS_Store ├── Makefile ├── assets │ ├── ipfs.png │ ├── loadplugin.png │ ├── plugin.png │ └── pluginmanager.png ├── conf.py ├── getting_help.md ├── getting_started.md ├── guidelines.md ├── index.rst ├── make.bat ├── publishing_your_plugin.md └── watch.sh ├── plugins ├── arbitrum-stylus │ └── profile.json ├── bif-solidity │ └── profile.json ├── bif-udapp-js │ └── profile.json ├── bif-udapp │ └── profile.json ├── buildbear │ └── profile.json ├── contract-deployer │ └── profile.json ├── cookbookdev │ └── profile.json ├── coti │ └── profile.json ├── dapp-draft │ └── profile.json ├── defender-deploy │ └── profile.json ├── klaytn │ └── profile.json ├── learneth │ └── profile.json ├── nahmii │ └── profile.json ├── restorebackupzip │ └── profile.json ├── script-runner │ └── profile.json ├── sentio │ └── profile.json ├── solhint │ └── profile.json ├── solidityscan │ └── profile.json ├── starknet │ └── profile.json ├── tenderly │ └── profile.json ├── wallet-connect │ └── profile.json ├── wds-code-remix │ └── profile.json ├── zksync │ └── profile.json └── zokrates │ └── profile.json └── tools └── ipfs-upload ├── .gitignore ├── bin ├── upload-remix-plugin └── upload-single-file ├── generateProfile.js ├── package-lock.json └── package.json /.circleci/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | src/index.js -------------------------------------------------------------------------------- /.circleci/build_profiles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | SHA=`git rev-parse --short --verify HEAD` 6 | 7 | git config user.name "$COMMIT_AUTHOR" 8 | git config user.email "$COMMIT_AUTHOR_EMAIL" 9 | 10 | node ./.circleci/dist/index.js 11 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Javascript Node CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-javascript/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # specify the version you desire here 10 | - image: circleci/node:10 11 | 12 | # Specify service dependencies here if necessary 13 | # CircleCI maintains a library of pre-built images 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/mongo:3.4.4 16 | 17 | working_directory: ~/repo 18 | 19 | environment: 20 | - COMMIT_AUTHOR_EMAIL: "yann@ethereum.org" 21 | - COMMIT_AUTHOR: "Circle CI" 22 | 23 | steps: 24 | - checkout 25 | 26 | - run: cd .circleci && npm install 27 | 28 | - run: npm install 29 | 30 | # build profiles 31 | - run: 32 | name: Build_Profiles 33 | command: ./.circleci/build_profiles.sh 34 | -------------------------------------------------------------------------------- /.circleci/dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | var __generator = (this && this.__generator) || function (thisArg, body) { 12 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 13 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 14 | function verb(n) { return function (v) { return step([n, v]); }; } 15 | function step(op) { 16 | if (f) throw new TypeError("Generator is already executing."); 17 | while (_) try { 18 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 19 | if (y = 0, t) op = [op[0] & 2, t.value]; 20 | switch (op[0]) { 21 | case 0: case 1: t = op; break; 22 | case 4: _.label++; return { value: op[1], done: false }; 23 | case 5: _.label++; y = op[1]; op = [0]; continue; 24 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 25 | default: 26 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 27 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 28 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 29 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 30 | if (t[2]) _.ops.pop(); 31 | _.trys.pop(); continue; 32 | } 33 | op = body.call(thisArg, _); 34 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 35 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 36 | } 37 | }; 38 | exports.__esModule = true; 39 | var fs = require("fs-extra"); 40 | var util = require("util"); 41 | var child_process = require("child_process"); 42 | var promisifyExec = util.promisify(child_process.exec); 43 | var buildProfiles = function () { 44 | return new Promise(function (resolve, reject) { 45 | try { 46 | var path = './plugins'; 47 | fs.readdir(path, function (error, files) { return __awaiter(void 0, void 0, void 0, function () { 48 | var profilesPromises, profiles, e_1; 49 | return __generator(this, function (_a) { 50 | switch (_a.label) { 51 | case 0: 52 | if (error) 53 | return [2 /*return*/, reject(error)]; 54 | console.log('profiles', files); 55 | _a.label = 1; 56 | case 1: 57 | _a.trys.push([1, 3, , 4]); 58 | profilesPromises = files.map(function (path) { return __awaiter(void 0, void 0, void 0, function () { 59 | var jsonProfile, e_2; 60 | return __generator(this, function (_a) { 61 | switch (_a.label) { 62 | case 0: 63 | _a.trys.push([0, 2, , 3]); 64 | return [4 /*yield*/, readFile("./plugins/" + path + "/profile.json")]; 65 | case 1: 66 | jsonProfile = _a.sent(); 67 | return [2 /*return*/, JSON.parse(jsonProfile)]; 68 | case 2: 69 | e_2 = _a.sent(); 70 | reject(e_2); 71 | return [3 /*break*/, 3]; 72 | case 3: return [2 /*return*/]; 73 | } 74 | }); 75 | }); }); 76 | return [4 /*yield*/, Promise.all(profilesPromises)]; 77 | case 2: 78 | profiles = _a.sent(); 79 | console.log('built', JSON.stringify(profiles, null, '\t')); 80 | resolve(profiles); 81 | return [3 /*break*/, 4]; 82 | case 3: 83 | e_1 = _a.sent(); 84 | reject(e_1); 85 | return [3 /*break*/, 4]; 86 | case 4: return [2 /*return*/]; 87 | } 88 | }); 89 | }); }); 90 | } 91 | catch (e) { 92 | reject(e); 93 | } 94 | }); 95 | }; 96 | var readFile = function (path) { 97 | return new Promise(function (resolve, reject) { 98 | fs.readFile(path, 'utf8', function (error, data) { 99 | error ? reject(error) : resolve(data); 100 | }); 101 | }); 102 | }; 103 | console.log('branch', process.env.CIRCLE_BRANCH); 104 | console.log('pull request', process.env.CIRCLE_PULL_REQUEST); 105 | function run() { 106 | return __awaiter(this, void 0, void 0, function () { 107 | var profiles, target_1, profileAsString, currentMetadata, e_3; 108 | var _this = this; 109 | return __generator(this, function (_a) { 110 | switch (_a.label) { 111 | case 0: 112 | _a.trys.push([0, 4, , 5]); 113 | return [4 /*yield*/, buildProfiles()]; 114 | case 1: 115 | profiles = _a.sent(); 116 | if (!(process.env.CIRCLE_BRANCH === 'master')) return [3 /*break*/, 3]; 117 | target_1 = "./build/metadata.json"; 118 | profileAsString = JSON.stringify(profiles, null, '\t'); 119 | return [4 /*yield*/, readFile("./build/metadata.json") 120 | // check if we need to update it 121 | ]; 122 | case 2: 123 | currentMetadata = _a.sent(); 124 | // check if we need to update it 125 | if (!currentMetadata || currentMetadata !== profileAsString) { 126 | console.log('building and pushing metadata.json'); 127 | fs.writeFile(target_1, profileAsString, 'utf8', function (error) { return __awaiter(_this, void 0, void 0, function () { 128 | var rev, revHash; 129 | return __generator(this, function (_a) { 130 | switch (_a.label) { 131 | case 0: 132 | if (error) 133 | return [2 /*return*/, console.error(error)]; 134 | console.log('done', target_1); 135 | return [4 /*yield*/, promisifyExec('git rev-parse --short --verify HEAD')]; 136 | case 1: 137 | rev = _a.sent(); 138 | revHash = rev.stdout.replace('\n', ''); 139 | return [4 /*yield*/, promisifyExec('git add ./build/metadata.json')]; 140 | case 2: 141 | _a.sent(); 142 | return [4 /*yield*/, promisifyExec("git commit -m \"Built profiles from " + revHash + "\" --allow-empty")]; 143 | case 3: 144 | _a.sent(); 145 | return [4 /*yield*/, promisifyExec('git push origin master')]; 146 | case 4: 147 | _a.sent(); 148 | return [2 /*return*/]; 149 | } 150 | }); 151 | }); }); 152 | } 153 | else 154 | console.log('no need to rebuild metadata.json'); 155 | _a.label = 3; 156 | case 3: return [3 /*break*/, 5]; 157 | case 4: 158 | e_3 = _a.sent(); 159 | console.error(e_3); 160 | process.exit(1); 161 | return [3 /*break*/, 5]; 162 | case 5: return [2 /*return*/]; 163 | } 164 | }); 165 | }); 166 | } 167 | run(); 168 | -------------------------------------------------------------------------------- /.circleci/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remix-plugins-directory-ci", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/fs-extra": { 8 | "version": "8.0.1", 9 | "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.1.tgz", 10 | "integrity": "sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw==", 11 | "requires": { 12 | "@types/node": "*" 13 | }, 14 | "dependencies": { 15 | "@types/node": { 16 | "version": "13.7.0", 17 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz", 18 | "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==" 19 | } 20 | } 21 | }, 22 | "@types/node": { 23 | "version": "12.12.26", 24 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", 25 | "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==", 26 | "dev": true 27 | }, 28 | "@zeit/ncc": { 29 | "version": "0.20.5", 30 | "resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.20.5.tgz", 31 | "integrity": "sha512-XU6uzwvv95DqxciQx+aOLhbyBx/13ky+RK1y88Age9Du3BlA4mMPCy13BGjayOrrumOzlq1XV3SD/BWiZENXlw==", 32 | "dev": true 33 | }, 34 | "fs-extra": { 35 | "version": "8.1.0", 36 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 37 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 38 | "requires": { 39 | "graceful-fs": "^4.2.0", 40 | "jsonfile": "^4.0.0", 41 | "universalify": "^0.1.0" 42 | } 43 | }, 44 | "graceful-fs": { 45 | "version": "4.2.3", 46 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 47 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" 48 | }, 49 | "jsonfile": { 50 | "version": "4.0.0", 51 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 52 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 53 | "requires": { 54 | "graceful-fs": "^4.1.6" 55 | } 56 | }, 57 | "typescript": { 58 | "version": "3.7.5", 59 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 60 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", 61 | "dev": true 62 | }, 63 | "universalify": { 64 | "version": "0.1.2", 65 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 66 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /.circleci/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remix-plugins-directory-ci", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build": "tsc src/build_profiles.ts || ncc build src/build_profiles.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "@types/node": "^12.7.8", 14 | "@zeit/ncc": "^0.20.5", 15 | "typescript": "^3.6.3" 16 | }, 17 | "dependencies": { 18 | "@types/fs-extra": "^8.0.1", 19 | "fs-extra": "^8.1.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.circleci/src/build_profiles.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs-extra' 2 | import * as util from 'util' 3 | import * as child_process from 'child_process' 4 | const promisifyExec = util.promisify(child_process.exec) 5 | 6 | const buildProfiles = () => { 7 | return new Promise((resolve, reject) => { 8 | try { 9 | const path = './plugins' 10 | fs.readdir(path, async (error, files) => { 11 | if (error) return reject(error) 12 | console.log('profiles', files) 13 | try { 14 | const profilesPromises = files.map(async (path) => { 15 | try { 16 | const jsonProfile: any = await readFile(`./plugins/${path}/profile.json`) 17 | return JSON.parse(jsonProfile) 18 | } catch (e) { 19 | reject(e) 20 | } 21 | }) 22 | const profiles = await Promise.all(profilesPromises) 23 | console.log('built', JSON.stringify(profiles, null, '\t')) 24 | resolve(profiles) 25 | } catch (e) { 26 | reject(e) 27 | } 28 | }) 29 | } catch (e) { 30 | reject(e) 31 | } 32 | }) 33 | } 34 | 35 | const readFile = (path) => { 36 | return new Promise((resolve, reject) => { 37 | fs.readFile(path, 'utf8', (error, data) => { 38 | error ? reject(error) : resolve(data) 39 | }) 40 | }) 41 | } 42 | 43 | console.log('branch', process.env.CIRCLE_BRANCH) 44 | console.log('pull request', process.env.CIRCLE_PULL_REQUEST) 45 | 46 | async function run () { 47 | try { 48 | const profiles = await buildProfiles() 49 | if (process.env.CIRCLE_BRANCH === 'master') { 50 | const target = `./build/metadata.json` 51 | const profileAsString = JSON.stringify(profiles, null, '\t') 52 | const currentMetadata = await readFile(`./build/metadata.json`) 53 | // check if we need to update it 54 | if (!currentMetadata || currentMetadata !== profileAsString) { 55 | console.log('building and pushing metadata.json') 56 | fs.writeFile(target, profileAsString, 'utf8', async (error) => { 57 | if (error) return console.error(error) 58 | console.log('done', target) 59 | const rev = await promisifyExec('git rev-parse --short --verify HEAD') 60 | const revHash = rev.stdout.replace('\n', '') 61 | await promisifyExec('git add ./build/metadata.json') 62 | await promisifyExec(`git commit -m "Built profiles from ${revHash}" --allow-empty`) 63 | await promisifyExec('git push origin master') 64 | }) 65 | } else console.log('no need to rebuild metadata.json') 66 | } 67 | } catch (e) { 68 | console.error(e) 69 | process.exit(1) 70 | } 71 | } 72 | 73 | run() -------------------------------------------------------------------------------- /.github/actions/directory/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | src/index.js -------------------------------------------------------------------------------- /.github/actions/directory/action.yml: -------------------------------------------------------------------------------- 1 | name: 'build-plugin' 2 | author: 'Grandschtroumpf' 3 | description: 'Create a file with the whole list of plugins' 4 | runs: 5 | using: 'node12' 6 | main: 'dist/index.js' -------------------------------------------------------------------------------- /.github/actions/directory/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remix-plugins-directory-actions", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@actions/core": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz", 10 | "integrity": "sha512-O5G6EmlzTVsng7VSpNtszIoQq6kOgMGNTFB/hmwKNNA4V71JyxImCIrL27vVHCt2Cb3ImkaCr6o27C2MV9Ylwg==" 11 | }, 12 | "@actions/github": { 13 | "version": "1.1.0", 14 | "resolved": "https://registry.npmjs.org/@actions/github/-/github-1.1.0.tgz", 15 | "integrity": "sha512-cHf6PyoNMdei13jEdGPhKprIMFmjVVW/dnM5/9QmQDJ1ZTaGVyezUSCUIC/ySNLRvDUpeFwPYMdThSEJldSbUw==", 16 | "requires": { 17 | "@octokit/graphql": "^2.0.1", 18 | "@octokit/rest": "^16.15.0" 19 | } 20 | }, 21 | "@octokit/endpoint": { 22 | "version": "5.3.6", 23 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.6.tgz", 24 | "integrity": "sha512-XuerByak8H+jW9J/rVMEdBXfI4UTsDWUwAKgIP/uhQjXIUVdPRwt2Zg+SmbWQ+WY7pRkw/hFVES8C4G/Kle7oA==", 25 | "requires": { 26 | "is-plain-object": "^3.0.0", 27 | "universal-user-agent": "^4.0.0" 28 | }, 29 | "dependencies": { 30 | "universal-user-agent": { 31 | "version": "4.0.0", 32 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", 33 | "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", 34 | "requires": { 35 | "os-name": "^3.1.0" 36 | } 37 | } 38 | } 39 | }, 40 | "@octokit/graphql": { 41 | "version": "2.1.3", 42 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz", 43 | "integrity": "sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==", 44 | "requires": { 45 | "@octokit/request": "^5.0.0", 46 | "universal-user-agent": "^2.0.3" 47 | } 48 | }, 49 | "@octokit/request": { 50 | "version": "5.1.0", 51 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.1.0.tgz", 52 | "integrity": "sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg==", 53 | "requires": { 54 | "@octokit/endpoint": "^5.1.0", 55 | "@octokit/request-error": "^1.0.1", 56 | "deprecation": "^2.0.0", 57 | "is-plain-object": "^3.0.0", 58 | "node-fetch": "^2.3.0", 59 | "once": "^1.4.0", 60 | "universal-user-agent": "^4.0.0" 61 | }, 62 | "dependencies": { 63 | "universal-user-agent": { 64 | "version": "4.0.0", 65 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", 66 | "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", 67 | "requires": { 68 | "os-name": "^3.1.0" 69 | } 70 | } 71 | } 72 | }, 73 | "@octokit/request-error": { 74 | "version": "1.0.4", 75 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.4.tgz", 76 | "integrity": "sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig==", 77 | "requires": { 78 | "deprecation": "^2.0.0", 79 | "once": "^1.4.0" 80 | } 81 | }, 82 | "@octokit/rest": { 83 | "version": "16.30.1", 84 | "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.30.1.tgz", 85 | "integrity": "sha512-1n2QzTbbaBXNLpx7WHlcsSMdJvxSdKmerXQm+bMYlKDbQM19uq446ZpGs7Ynq5SsdLj1usIfgJ9gJf4LtcWkDw==", 86 | "requires": { 87 | "@octokit/request": "^5.0.0", 88 | "@octokit/request-error": "^1.0.2", 89 | "atob-lite": "^2.0.0", 90 | "before-after-hook": "^2.0.0", 91 | "btoa-lite": "^1.0.0", 92 | "deprecation": "^2.0.0", 93 | "lodash.get": "^4.4.2", 94 | "lodash.set": "^4.3.2", 95 | "lodash.uniq": "^4.5.0", 96 | "octokit-pagination-methods": "^1.1.0", 97 | "once": "^1.4.0", 98 | "universal-user-agent": "^4.0.0" 99 | }, 100 | "dependencies": { 101 | "universal-user-agent": { 102 | "version": "4.0.0", 103 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", 104 | "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", 105 | "requires": { 106 | "os-name": "^3.1.0" 107 | } 108 | } 109 | } 110 | }, 111 | "@types/node": { 112 | "version": "12.7.8", 113 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.8.tgz", 114 | "integrity": "sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A==", 115 | "dev": true 116 | }, 117 | "@zeit/ncc": { 118 | "version": "0.20.5", 119 | "resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.20.5.tgz", 120 | "integrity": "sha512-XU6uzwvv95DqxciQx+aOLhbyBx/13ky+RK1y88Age9Du3BlA4mMPCy13BGjayOrrumOzlq1XV3SD/BWiZENXlw==", 121 | "dev": true 122 | }, 123 | "atob-lite": { 124 | "version": "2.0.0", 125 | "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", 126 | "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" 127 | }, 128 | "before-after-hook": { 129 | "version": "2.1.0", 130 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", 131 | "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" 132 | }, 133 | "btoa-lite": { 134 | "version": "1.0.0", 135 | "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", 136 | "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" 137 | }, 138 | "cross-spawn": { 139 | "version": "6.0.5", 140 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 141 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 142 | "requires": { 143 | "nice-try": "^1.0.4", 144 | "path-key": "^2.0.1", 145 | "semver": "^5.5.0", 146 | "shebang-command": "^1.2.0", 147 | "which": "^1.2.9" 148 | } 149 | }, 150 | "deprecation": { 151 | "version": "2.3.1", 152 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 153 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 154 | }, 155 | "end-of-stream": { 156 | "version": "1.4.4", 157 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 158 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 159 | "requires": { 160 | "once": "^1.4.0" 161 | } 162 | }, 163 | "execa": { 164 | "version": "1.0.0", 165 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 166 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 167 | "requires": { 168 | "cross-spawn": "^6.0.0", 169 | "get-stream": "^4.0.0", 170 | "is-stream": "^1.1.0", 171 | "npm-run-path": "^2.0.0", 172 | "p-finally": "^1.0.0", 173 | "signal-exit": "^3.0.0", 174 | "strip-eof": "^1.0.0" 175 | } 176 | }, 177 | "get-stream": { 178 | "version": "4.1.0", 179 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 180 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 181 | "requires": { 182 | "pump": "^3.0.0" 183 | } 184 | }, 185 | "is-plain-object": { 186 | "version": "3.0.0", 187 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", 188 | "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", 189 | "requires": { 190 | "isobject": "^4.0.0" 191 | } 192 | }, 193 | "is-stream": { 194 | "version": "1.1.0", 195 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 196 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 197 | }, 198 | "isexe": { 199 | "version": "2.0.0", 200 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 201 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 202 | }, 203 | "isobject": { 204 | "version": "4.0.0", 205 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", 206 | "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" 207 | }, 208 | "lodash.get": { 209 | "version": "4.4.2", 210 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 211 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 212 | }, 213 | "lodash.set": { 214 | "version": "4.3.2", 215 | "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", 216 | "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" 217 | }, 218 | "lodash.uniq": { 219 | "version": "4.5.0", 220 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 221 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" 222 | }, 223 | "macos-release": { 224 | "version": "2.3.0", 225 | "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", 226 | "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" 227 | }, 228 | "nice-try": { 229 | "version": "1.0.5", 230 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 231 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 232 | }, 233 | "node-fetch": { 234 | "version": "2.6.1", 235 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 236 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 237 | }, 238 | "npm-run-path": { 239 | "version": "2.0.2", 240 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 241 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 242 | "requires": { 243 | "path-key": "^2.0.0" 244 | } 245 | }, 246 | "octokit-pagination-methods": { 247 | "version": "1.1.0", 248 | "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", 249 | "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==" 250 | }, 251 | "once": { 252 | "version": "1.4.0", 253 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 254 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 255 | "requires": { 256 | "wrappy": "1" 257 | } 258 | }, 259 | "os-name": { 260 | "version": "3.1.0", 261 | "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", 262 | "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", 263 | "requires": { 264 | "macos-release": "^2.2.0", 265 | "windows-release": "^3.1.0" 266 | } 267 | }, 268 | "p-finally": { 269 | "version": "1.0.0", 270 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 271 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 272 | }, 273 | "path-key": { 274 | "version": "2.0.1", 275 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 276 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 277 | }, 278 | "pump": { 279 | "version": "3.0.0", 280 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 281 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 282 | "requires": { 283 | "end-of-stream": "^1.1.0", 284 | "once": "^1.3.1" 285 | } 286 | }, 287 | "semver": { 288 | "version": "5.7.1", 289 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 290 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 291 | }, 292 | "shebang-command": { 293 | "version": "1.2.0", 294 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 295 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 296 | "requires": { 297 | "shebang-regex": "^1.0.0" 298 | } 299 | }, 300 | "shebang-regex": { 301 | "version": "1.0.0", 302 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 303 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 304 | }, 305 | "signal-exit": { 306 | "version": "3.0.2", 307 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 308 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 309 | }, 310 | "strip-eof": { 311 | "version": "1.0.0", 312 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 313 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 314 | }, 315 | "typescript": { 316 | "version": "3.6.3", 317 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", 318 | "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", 319 | "dev": true 320 | }, 321 | "universal-user-agent": { 322 | "version": "2.1.0", 323 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.1.0.tgz", 324 | "integrity": "sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==", 325 | "requires": { 326 | "os-name": "^3.0.0" 327 | } 328 | }, 329 | "which": { 330 | "version": "1.3.1", 331 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 332 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 333 | "requires": { 334 | "isexe": "^2.0.0" 335 | } 336 | }, 337 | "windows-release": { 338 | "version": "3.2.0", 339 | "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", 340 | "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", 341 | "requires": { 342 | "execa": "^1.0.0" 343 | } 344 | }, 345 | "wrappy": { 346 | "version": "1.0.2", 347 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 348 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 349 | } 350 | } 351 | } 352 | -------------------------------------------------------------------------------- /.github/actions/directory/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remix-plugins-directory-actions", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build": "tsc src/index.ts || ncc build src/index.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@actions/core": "^1.1.1", 14 | "@actions/github": "^1.1.0" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^12.7.8", 18 | "@zeit/ncc": "^0.20.5", 19 | "typescript": "^3.6.3" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.github/actions/directory/src/index.ts: -------------------------------------------------------------------------------- 1 | import { setFailed, getInput, warning } from '@actions/core'; 2 | import { context, GitHub } from '@actions/github'; 3 | import { ReposGetContentsResponseItem } from '@octokit/rest'; 4 | 5 | async function createFile() { 6 | try { 7 | const token = getInput('GITHUB_TOKEN'); 8 | 9 | if (!token) { 10 | warning(`Github env with value ${token} is not provided`); 11 | throw new Error('Cannot find token'); 12 | } else { 13 | const { repos } = new GitHub(token); 14 | const { data: plugins } = await repos.getContents({ ...context.repo, path: 'plugins' }); 15 | const requests = (plugins as Array).map(async plugin => { 16 | const path = `${plugin.path}/profile.json`; 17 | const { data: profile } = await repos.getContents({ ...context.repo, path }); 18 | const buff = Buffer.from(profile['content'], 'base64'); 19 | return JSON.parse(buff.toString()); 20 | }); 21 | const profiles = await Promise.all(requests); 22 | const buff = Buffer.from(JSON.stringify(profiles), 'utf8'); 23 | const content = buff.toString('base64'); 24 | 25 | const path = 'build/profile.json'; 26 | const file = await repos.getContents({ ...context.repo, path }); 27 | await repos.createOrUpdateFile({ 28 | ...context.repo, 29 | message: '[Action] build plugin list', 30 | sha: file.data['sha'], 31 | content, 32 | path, 33 | }); 34 | } 35 | } catch(err) { 36 | setFailed(err); 37 | } 38 | } 39 | 40 | createFile(); -------------------------------------------------------------------------------- /.github/workflows/plugin-directory.yml: -------------------------------------------------------------------------------- 1 | name: 'Add Plugin Profile' 2 | on: 3 | push: 4 | branches: 5 | - master 6 | paths: 7 | - 'plugins/*/profile.json' 8 | 9 | jobs: 10 | build: 11 | name: Push job 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v1 16 | - name: Create plugins directory 17 | uses: ./.github/actions/directory 18 | with: 19 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .vscode/settings.json 3 | .DS_store 4 | docs/_build 5 | tools/ipfs-upload/bin/plugins-directory-docs.code-workspace -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright 2025 Remix labs 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Remix Plugins Directory 2 | 3 | This repository hosts a plugins directory. 4 | The directory is used by [Remix IDE](https://remix.ethereum.org) for loading the list of available plugins. 5 | 6 | # Getting started with plugin development 7 | 8 | Read all about getting started with plugin development and guidelines on how to make it work for you 9 | https://remix-plugins-directory.readthedocs.io/en/latest/ 10 | 11 | # Conditions for adding a new plugin 12 | 13 | - The plugin should work on both light and dark theme types. The best would be to check them before approving any change or any new plugin. 14 | - No `svg` file is acceptable as a plugin icon for security reasons. We recommend using `webp` or png formats. 15 | - Profile `json` should contain as much info as possible. Having a short, reasonable description as well as the link to docs and the repo will improve the onboarding of users 16 | - Maintained by Remix should be added to plugins 100% controlled by the Remix team only. 17 | 18 | # Community 19 | 20 | Feel free to join our discord server if you have any questions 21 | 22 | - [Join Remix Discord Server](https://discord.com/invite/mh9hFCKkEq) 23 | -------------------------------------------------------------------------------- /build/metadata.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "arbitrum-stylus", 4 | "displayName": "ARBITRUM STYLUS", 5 | "description": "Deployment and execution of smart contracts via Arbitrum Stylus", 6 | "events": [], 7 | "methods": [], 8 | "url": "https://remix-plugin-arbitrum.welldonestudio.io", 9 | "icon": "https://remix-plugin.welldonestudio.io/icon.png", 10 | "repo": "https://github.com/dsrvlabs/arbitrum-stylus", 11 | "documentation": "https://docs.welldonestudio.io/code", 12 | "maintainedBy": "DSRV", 13 | "authorContact": "", 14 | "version": "0.1.0-beta", 15 | "location": "sidePanel" 16 | }, 17 | { 18 | "description": "Compile Solidity Contracts (Xinghuo BIF)", 19 | "displayName": "Solidity Compiler (Xinghuo BIF)", 20 | "events": [], 21 | "icon": "//remix.bitfactory.cn/solidity-compiler/assets/img/bif-solidity.webp", 22 | "location": "sidePanel", 23 | "methods": [], 24 | "name": "bif-solidity", 25 | "url": "//remix.bitfactory.cn/solidity-compiler/", 26 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 27 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/solidity-compiler/README.md", 28 | "maintainedBy": "caict-4iot-dev", 29 | "version": "0.1.0" 30 | }, 31 | { 32 | "description": "Deploy Solidity contracts & Run Transactions on Xinghuo BIF", 33 | "displayName": "Deploy & Run Solidity on Xinghuo BIF", 34 | "events": [], 35 | "icon": "//remix.bitfactory.cn/udapp/assets/img/bif-udapp.webp", 36 | "location": "sidePanel", 37 | "methods": [], 38 | "name": "bif-udapp", 39 | "url": "//remix.bitfactory.cn/udapp/", 40 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 41 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/udapp/README.md", 42 | "maintainedBy": "caict-4iot-dev", 43 | "version": "0.1.0" 44 | }, 45 | { 46 | "description": "Deploy JS Contracts & Run Transactions on Xinghuo BIF", 47 | "displayName": "Deploy & Run JS on Xinghuo BIF", 48 | "events": [], 49 | "icon": "//remix.bitfactory.cn/udapp-js/assets/img/bif-udapp-js.webp", 50 | "location": "sidePanel", 51 | "methods": [], 52 | "name": "bif-udapp-js", 53 | "url": "//remix.bitfactory.cn/udapp-js/", 54 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 55 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/udapp-js/README.md", 56 | "maintainedBy": "caict-4iot-dev", 57 | "version": "0.1.0" 58 | }, 59 | { 60 | "name": "buildbear", 61 | "displayName": "BuildBear", 62 | "methods": [], 63 | "version": "0.1.0", 64 | "url": "https://remix.buildbear.io/", 65 | "description": "Create a Private Sandbox for various EVM and EVM-compatible blockchain networks, complete with a Faucet and Explorer.", 66 | "icon": "https://www.buildbear.io/remix-logo.webp", 67 | "location": "sidePanel", 68 | "targets": [ 69 | "remix", 70 | "vscode" 71 | ], 72 | "documentation": "https://docs.buildbear.io/docs/BuildBear-Remix-Plugin", 73 | "repo": "https://github.com/BuildBearLabs/buildbear-remix-plugin", 74 | "maintainedBy": "BuildBear Team", 75 | "authorContact": "team@buildbear.io" 76 | }, 77 | { 78 | "name": "contract_deployer", 79 | "displayName": "Contract Deployer", 80 | "methods": [], 81 | "version": "0.1.0-alpha", 82 | "url": "https://contract-deployer-plugin.surge.sh/", 83 | "repo": "https://github.com/hexdivision/remix-contract-deployer-plugin", 84 | "documentation": "https://github.com/hexdivision/remix-contract-deployer-plugin#getting-started-with-contract-deployer-plugin", 85 | "maintainedBy": "", 86 | "authorContact": "", 87 | "description": "Deploy a compiled contract to the same address on multiple networks", 88 | "icon": "data:image/webp;base64,UklGRmYCAABXRUJQVlA4TFkCAAAvVoAVEL+goG0jx8f9YI+fIBS0bcO43At7R0HbNozLvbB3DESS4ZOoon8ZKwGCSZpqOwaVbddMAAsAgMN/H8kDrP8AwPof0JJtt25cnQYPIbYtmU5TsOc/VkC0IjK5j6+I/k8ATq7sXQHA2FsAwNirACDs/hrnNSuZlf1lvSa0OZTZqCFM97ncE473PBFFt01E+rBNY4VP70cLUp7F7kRJrg5lFl9upTe3zQJeg+bqcHv05Upgc2iRuVcmWeDLLDYHud8qvHAWObnO5zR46xPOg88e0ZnwJge/Mg+XMapLekTe3mb7I7OzjrE5iHZ8XjGGJgfR0yrCX5fjGkD0pIrwh9fjkhxET6kIfzgCF3GQfMKK8IdjUMXhfsIr+OEoXE77cjvHof2WMlKd1XtW7U+0DFTE7frRBr/rKGo4fPctgsM6hgo6X7ljSehsQwi630cq6N4GeODDctDQn/L1xEnJ+gzekcK/Sl6aw3a5BV5JsjqJvp0oSZrbL/ftjD47RNW96b+dXG51e8DPalDGWFzKrrgUbc6CzdnlcgKARlLFWbQ4VJIluffluDvIbgl+jWgO0gxhuZ4mdyw8LMFx4/X46BI94rNLdAQ+OmRh77PjpRyC2oL0zOxXC15PfnwZMpd1XXhiLuuqPPFCV/8/US6lFI2Kj7SUUnSkFQBqoPBRA4D7vz43M7M1oJlZi6qZWRnp6v87u/r934F6AubYPluw6OBvlz5bUTl4digfCZIORnOSP6gARAdbHVrfAi86FsVh1457CoCmQ5UAUjUoht5XGzkFAKy1lhADAA==", 89 | "location": "sidePanel" 90 | }, 91 | { 92 | "name": "cookbookdev", 93 | "displayName": "Cookbook.dev", 94 | "description": "Find any smart contract, protocol, and library.", 95 | "version": "0.1.3", 96 | "events": [], 97 | "methods": [ 98 | "openContract", 99 | "openProtocol", 100 | "openPattern" 101 | ], 102 | "kind": "none", 103 | "icon": "https://www.cookbook.dev/img/cookbook.webp", 104 | "location": "sidePanel", 105 | "documentation": "https://www.cookbook.dev", 106 | "url": "https://www.cookbook.dev/remix-plugin", 107 | "maintainedBy": "Cookbook", 108 | "authorContact": "tyler@cookbook.dev", 109 | "targets": [ 110 | "remix", 111 | "vscode" 112 | ], 113 | "repo": "https://github.com/Breakthrough-Labs/cookbook-remix-plugin" 114 | }, 115 | { 116 | "name": "coti-remix-plugin", 117 | "displayName": "COTI", 118 | "description": "Deploy and interact with contracts on the COTI privacy-preserving network", 119 | "events": [], 120 | "methods": [], 121 | "url": "https://remix.coti.io", 122 | "icon": "https://remix.coti.io/coti-plugin-logo.png", 123 | "documentation": "https://docs.coti.io/coti-v2-documentation/developer-tooling/coti-remix-plugin", 124 | "version": "0.1.1-beta", 125 | "location": "sidePanel", 126 | "maintainedBy": "COTI team", 127 | "authorContact": "product@coti.io" 128 | }, 129 | { 130 | "name": "dapp-draft", 131 | "displayName": "Quick Dapp", 132 | "description": "Edit & deploy a Dapp", 133 | "version": "0.2.0", 134 | "methods": [ 135 | "edit" 136 | ], 137 | "kind": "none", 138 | "icon": "https://remix-dapp-draft-plugin.pages.dev/dappDraft.webp", 139 | "location": "mainPanel", 140 | "url": "https://remix-dapp-draft-plugin.pages.dev/", 141 | "repo": "https://github.com/drafish/remix-dapp-draft-plugin", 142 | "maintainedBy": "Remix", 143 | "authorContact": "https://github.com/drafish", 144 | "targets": [ 145 | "remix" 146 | ] 147 | }, 148 | { 149 | "name": "defender-deploy", 150 | "displayName": "Defender Deploy", 151 | "description": "Secure Deployments using OpenZeppelin Defender", 152 | "events": [], 153 | "methods": [], 154 | "url": "https://defeder-remix-deploy.netlify.app/", 155 | "icon": "https://defeder-remix-deploy.netlify.app/logo.png", 156 | "repo": "https://github.com/OpenZeppelin/defender-deploy-plugin", 157 | "documentation": "https://docs.openzeppelin.com/defender/remix-plugin", 158 | "maintainedBy": "OpenZeppelin Defender team", 159 | "authorContact": "", 160 | "version": "0.1.0-beta", 161 | "location": "sidePanel" 162 | }, 163 | { 164 | "name": "klaytn-remix-plugin", 165 | "displayName": "Kaia", 166 | "description": "Deploy and Run Transactions with Kaia.", 167 | "events": [], 168 | "methods": [], 169 | "url": "//klaytn-remix-plugin.ozys.io", 170 | "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAyNDggMzYwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMTI2Ljc4NCA4OS4zNjgyQzEyNi43ODQgNzUuMDIyNyAxMzguNDcxIDYzLjMzNTkgMTUyLjgxNyA2My4zMzU5SDE5OS4zOThWMEgxNzYuMTA3SDE1Mi44MTdDMTAzLjQ2NiAwIDYzLjQ0ODUgNDAuMDE3NyAKNjMuNDQ4NSA4OS4zNjgyQzYzLjQ0ODUgMTAyLjI0NiA2Ni4xOTAyIDExNC40ODcgNzEuMDkyIDEyNS41MzZDMzIuNzYzNyAxNDEuNzM3IDcuMzEzMDIgMTc2LjE2MSAxLjM4NjUzIDIxOS43MjNDLTUuNTM2OTQgCjI2Ny41NTEgMTMuNjI3MiAzMTkuMTQ0IDU1LjM2MTkgMzQ0LjA2OUM5Mi42MTAyIDM2Ny41MjYgMTUwLjg1IDM2NS45NzUgMTgyLjMxMSAzMzMuNDM0VjM1NS4wMzZIMjQ3LjE0MlYxMTUuNEgxNTIuODQ0QzEzOC40OTkgCjExNS40IDEyNi43ODQgMTAzLjcxNCAxMjYuNzg0IDg5LjM2ODJaTTE4My43NTEgMTc4Ljc2NFYyMzguOTE1QzE4My43NTEgMjcyLjE0OCAxNTYuODA1IDI5OS4wNjYgMTIzLjYgMjk5LjA2NkM5MC4zOTQ3IDI5OS4wNjYgNjMuNDQ4NSAKMjcyLjEyIDYzLjQ0ODUgMjM4LjkxNUM2My40NDg1IDIwNS43MSA5MC4zOTQ3IDE3OC43NjQgMTIzLjYgMTc4Ljc2NEgxODMuNzUxWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==", 171 | "documentation": "https://github.com/klaytn-ozys/plug-and-klay", 172 | "version": "1.0.0", 173 | "location": "sidePanel", 174 | "repo": "https://github.com/klaytn-ozys/plug-and-klay", 175 | "maintainedBy": "Ozys Co., Ltd", 176 | "authorContact": "support@ozys.io" 177 | }, 178 | { 179 | "name": "LearnEth", 180 | "displayName": "LearnEth", 181 | "description": "Learn Ethereum with Remix!", 182 | "documentation": "https://remix-learneth-plugin.readthedocs.io/en/latest/index.html", 183 | "version": "0.1.0-beta.8", 184 | "methods": [ 185 | "startTutorial", 186 | "addRepository" 187 | ], 188 | "kind": "none", 189 | "icon": "https://raw.githubusercontent.com/bunsenstraat/remix-learneth-plugin/master/src/assets/Font_Awesome_5_solid_book-reader.svg", 190 | "location": "sidePanel", 191 | "url": "https://learneth.web.app", 192 | "repo": "https://github.com/bunsenstraat/remix-learneth-plugin", 193 | "maintainedBy": "Remix", 194 | "authorContact": "", 195 | "targets": [ 196 | "remix", 197 | "vscode" 198 | ] 199 | }, 200 | { 201 | "name": "nahmii-compiler", 202 | "displayName": "Nahmii Compiler", 203 | "description": "Compiler for Nahmii 2.0.", 204 | "version": "0.1.0", 205 | "events": [], 206 | "methods": [], 207 | "kind": "none", 208 | "icon": "https://cdn-images-1.medium.com/max/140/1*d5P-r_Ax5zx-Q70plxwIfQ@2x.png", 209 | "location": "sidePanel", 210 | "url": "https://remix-nahmii-compiler-plugin.surge.sh", 211 | "repo": "https://github.com/nahmii-community/remix-nahmii-compiler-plugin", 212 | "maintainedBy": "", 213 | "authorContact": "" 214 | }, 215 | { 216 | "name": "restorebackupzip", 217 | "displayName": "Restore Backup Zip", 218 | "description": "Use this to restore your Remix backup zip files to the new workspaces.", 219 | "documentation": "", 220 | "version": "0.1.0", 221 | "events": [], 222 | "methods": [], 223 | "icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/OOjs_UI_icon_upload.svg/20px-OOjs_UI_icon_upload.svg.png", 224 | "location": "mainPanel", 225 | "url": "https://restorebackupremix.web.app", 226 | "targets": [ 227 | "remix" 228 | ], 229 | "repo": "https://github.com/bunsenstraat/restorezip", 230 | "maintainedBy": "", 231 | "authorContact": "" 232 | }, 233 | { 234 | "name": "scriptRunner", 235 | "displayName": "Script Runner", 236 | "description": "Execute script and emit logs", 237 | "version": "1.0.0-alpha.1", 238 | "methods": [ 239 | "execute" 240 | ], 241 | "kind": "none", 242 | "icon": "data:image/png;base64,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", 243 | "location": "hiddenPanel", 244 | "url": "https://remix-project-org.github.io/script-runner", 245 | "repo": "https://github.com/remix-project-org/script-runner", 246 | "maintainedBy": "Remix", 247 | "authorContact": "" 248 | }, 249 | { 250 | "name": "sentio-remix-plugin", 251 | "displayName": "Sentio", 252 | "description": "Search and view function related transactions directly in Remix, service is provided by Sentio", 253 | "events": [], 254 | "methods": [], 255 | "url": "https://remix.sentio.xyz/index.html", 256 | "icon": "https://remix.sentio.xyz/plugin-logo.webp", 257 | "documentation": "https://docs.sentio.xyz/docs/remix-ide-plugin", 258 | "version": "1.0.0", 259 | "location": "sidePanel", 260 | "maintainedBy": "sentio team", 261 | "authorContact": "support@sentio.xyz" 262 | }, 263 | { 264 | "name": "solhint", 265 | "displayName": "Solhint Linter", 266 | "methods": [], 267 | "version": "0.0.2", 268 | "documentation": "https://protofire.github.io/solhint/docs/rules.html", 269 | "url": "https://solhint.web.app", 270 | "description": "Linter for Solidity", 271 | "icon": "https://raw.githubusercontent.com/protofire/solhint/master/solhint-icon.png", 272 | "location": "sidePanel", 273 | "targets": [ 274 | "remix", 275 | "vscode" 276 | ], 277 | "repo": "https://github.com/protofire/remix-solhint-plugin", 278 | "maintainedBy": "protofire", 279 | "authorContact": "" 280 | }, 281 | { 282 | "name": "solidityScan", 283 | "displayName": "SolidityScan", 284 | "methods": [], 285 | "version": "0.1.0", 286 | "url": "https://remix.solidityscan.com/", 287 | "description": "An automated smart contract auditing & vulnerability scanning tool built to discover vulnerabilities & proactively address risks within your code.", 288 | "icon": "https://web-assets.solidityscan.com/web-assets/solidity_scan_assets/images/logo/logo192.png", 289 | "location": "sidePanel", 290 | "documentation": "https://docs.solidityscan.com/remix/", 291 | "maintainedBy": "Credshields", 292 | "authorContact": "info@credshields.com" 293 | }, 294 | { 295 | "name": "Starknet", 296 | "displayName": "Starknet", 297 | "methods": [], 298 | "version": "0.2.2", 299 | "url": "https://cairo-remix.nethermind.io/", 300 | "description": "Compile and deploy contracts with Cairo, a native smart contract language for Starknet.", 301 | "icon": "https://res.cloudinary.com/lianahus/image/upload/v1643013278/webp/StarkNetLogo_2_izzamu.webp", 302 | "location": "sidePanel", 303 | "documentation": "https://github.com/NethermindEth/starknet-remix-plugin", 304 | "repo": "https://github.com/NethermindEth/starknet-remix-plugin", 305 | "maintainedBy": "Nethermind", 306 | "authorContact": "rohit@nethermind.io" 307 | }, 308 | { 309 | "name": "tenderly", 310 | "displayName": "Tenderly", 311 | "methods": [], 312 | "version": "1.0.0", 313 | "url": "https://remix-plugin.tenderly.co/", 314 | "description": "Remix & Tenderly Project Integration. Verify Contracts. Import To Remix From your Tenderly project.", 315 | "icon": "data:image/png;base64,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", 316 | "location": "sidePanel", 317 | "targets": [ 318 | "remix", 319 | "vscode" 320 | ], 321 | "documentation": "https://docs.tenderly.co/simulations-and-forks/integrations#remix", 322 | "repo": "https://github.com/Tenderly/remix-tenderly", 323 | "maintainedBy": "", 324 | "authorContact": "" 325 | }, 326 | { 327 | "name": "walletconnect", 328 | "kind": "provider", 329 | "displayName": "Wallet Connect", 330 | "events": [], 331 | "version": "2.0.0", 332 | "methods": [ 333 | "sendAsync" 334 | ], 335 | "url": "https://walletconnect.web.app/", 336 | "description": "Use an external wallet for transacting", 337 | "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAlIiBjeT0iNTAlIiByPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1ZDlkZjYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDZmZmYiLz48L3JhZGlhbEdyYWRpZW50PjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0ibTI1NiAwYzE0MS4zODQ4OTYgMCAyNTYgMTE0LjYxNTEwNCAyNTYgMjU2cy0xMTQuNjE1MTA0IDI1Ni0yNTYgMjU2LTI1Ni0xMTQuNjE1MTA0LTI1Ni0yNTYgMTE0LjYxNTEwNC0yNTYgMjU2LTI1NnoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtNjQuNjkxNzU1OCAzNy43MDg4Mjk4YzUxLjUzMjgwNzItNTAuMjc4NDM5NyAxMzUuMDgzOTk0Mi01MC4yNzg0Mzk3IDE4Ni42MTY3OTkyIDBsNi4yMDIwNTcgNi4wNTEwOTA2YzIuNTc2NjQgMi41MTM5MjE4IDIuNTc2NjQgNi41ODk3OTQ4IDAgOS4xMDM3MTc3bC0yMS4yMTU5OTggMjAuNjk5NTc1OWMtMS4yODgzMjEgMS4yNTY5NjE5LTMuMzc3MSAxLjI1Njk2MTktNC42NjU0MjEgMGwtOC41MzQ3NjYtOC4zMjcwMjA1Yy0zNS45NTA1NzMtMzUuMDc1NDk2Mi05NC4yMzc5NjktMzUuMDc1NDk2Mi0xMzAuMTg4NTQ0IDBsLTkuMTQwMDI4MiA4LjkxNzU1MTljLTEuMjg4MzIxNyAxLjI1Njk2MDktMy4zNzcxMDE2IDEuMjU2OTYwOS00LjY2NTQyMDggMGwtMjEuMjE1OTk3My0yMC42OTk1NzU5Yy0yLjU3NjY0MDMtMi41MTM5MjI5LTIuNTc2NjQwMy02LjU4OTc5NTggMC05LjEwMzcxNzd6bTIzMC40OTM0ODUyIDQyLjgwODkxMTcgMTguODgyMjc5IDE4LjQyMjcyNjJjMi41NzY2MjcgMi41MTM5MTAzIDIuNTc2NjQyIDYuNTg5NzU5My4wMDAwMzIgOS4xMDM2ODYzbC04NS4xNDE0OTggODMuMDcwMzU4Yy0yLjU3NjYyMyAyLjUxMzk0MS02Ljc1NDE4MiAyLjUxMzk2OS05LjMzMDg0LjAwMDA2Ni0uMDAwMDEtLjAwMDAxLS4wMDAwMjMtLjAwMDAyMy0uMDAwMDMzLS4wMDAwMzRsLTYwLjQyODI1Ni01OC45NTc0NTFjLS42NDQxNi0uNjI4NDgxLTEuNjg4NTUtLjYyODQ4MS0yLjMzMjcxIDAtLjAwMDAwNC4wMDAwMDQtLjAwMDAwOC4wMDAwMDctLjAwMDAxMi4wMDAwMTFsLTYwLjQyNjk2ODMgNTguOTU3NDA4Yy0yLjU3NjYxNDEgMi41MTM5NDctNi43NTQxNzQ2IDIuNTEzOTktOS4zMzA4NDA4LjAwMDA5Mi0uMDAwMDE1MS0uMDAwMDE0LS4wMDAwMzA5LS4wMDAwMjktLjAwMDA0NjctLjAwMDA0NmwtODUuMTQzODY3NzQtODMuMDcxNDYzYy0yLjU3NjYzOTI4LTIuNTEzOTIxLTIuNTc2NjM5MjgtNi41ODk3OTUgMC05LjEwMzcxNjNsMTguODgyMzEyNjQtMTguNDIyNjk1NWMyLjU3NjYzOTMtMi41MTM5MjIyIDYuNzU0MTk5My0yLjUxMzkyMjIgOS4zMzA4Mzk3IDBsNjAuNDI5MTM0NyA1OC45NTgyNzU4Yy42NDQxNjA4LjYyODQ4IDEuNjg4NTQ5NS42Mjg0OCAyLjMzMjcxMDMgMCAuMDAwMDA5NS0uMDAwMDA5LjAwMDAxODItLjAwMDAxOC4wMDAwMjc3LS4wMDAwMjVsNjAuNDI2MTA2NS01OC45NTgyNTA4YzIuNTc2NTgxLTIuNTEzOTggNi43NTQxNDItMi41MTQwNzQzIDkuMzMwODQtLjAwMDIxMDMuMDAwMDM3LjAwMDAzNTQuMDAwMDcyLjAwMDA3MDkuMDAwMTA3LjAwMDEwNjNsNjAuNDI5MDU2IDU4Ljk1ODM1NDhjLjY0NDE1OS42Mjg0NzkgMS42ODg1NDkuNjI4NDc5IDIuMzMyNzA5IDBsNjAuNDI4MDc5LTU4Ljk1NzE5MjVjMi41NzY2NC0yLjUxMzkyMzEgNi43NTQxOTktMi41MTM5MjMxIDkuMzMwODM5IDB6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDk4IDE2MCkiLz48L2c+PC9zdmc+", 338 | "location": "mainPanel", 339 | "documentation": "", 340 | "repo": "https://github.com/yann300/remix-walletconnect/issues", 341 | "maintainedBy": "Remix", 342 | "authorContact": "" 343 | }, 344 | { 345 | "name": "wds-code-remix", 346 | "displayName": "CODE BY WELLDONE STUDIO", 347 | "description": "Multi-Chain Deploy and Run Transactions", 348 | "events": [], 349 | "methods": [], 350 | "url": "https://remix-plugin.welldonestudio.io", 351 | "icon": "https://remix-plugin.welldonestudio.io/icon.png", 352 | "repo": "https://github.com/dsrvlabs/wds-code-remix", 353 | "documentation": "https://docs.welldonestudio.io/code", 354 | "maintainedBy": "DSRV", 355 | "authorContact": "", 356 | "version": "0.1.0-beta", 357 | "location": "sidePanel" 358 | }, 359 | { 360 | "name": "ZKsync", 361 | "displayName": "ZKsync", 362 | "methods": [], 363 | "version": "0.1.0", 364 | "url": "https://zksync-remix-plugin.zksync.io/", 365 | "description": "Compile and deploy smart contracts for ZKsync chains.", 366 | "icon": "https://zksync-remix-plugin.zksync.io/icon.webp", 367 | "location": "sidePanel", 368 | "documentation": "https://github.com/matter-labs/zksync-remix-plugin", 369 | "repo": "https://github.com/matter-labs/zksync-remix-plugin", 370 | "maintainedBy": "Matter Labs", 371 | "authorContact": "hello@matterlabs.dev" 372 | }, 373 | { 374 | "name": "ZoKrates", 375 | "displayName": "ZoKrates", 376 | "description": "ZoKrates toolbox for zkSNARKs on Ethereum", 377 | "documentation": "https://zokrates.github.io/", 378 | "methods": [], 379 | "events": [], 380 | "version": "0.2.0-beta", 381 | "url": "https://zokrates.github.io/zokrates-remix-plugin/", 382 | "icon": " data:image/png;base64,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", 383 | "location": "sidePanel", 384 | "targets": [ 385 | "remix", 386 | "vscode" 387 | ], 388 | "repo": "https://github.com/Zokrates/zokrates-remix-plugin", 389 | "maintainedBy": "", 390 | "authorContact": "" 391 | } 392 | ] -------------------------------------------------------------------------------- /docs/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/remix-plugins-directory/52e05dc7023b4a716a63eef4c3e6c730d4d1d97f/docs/.DS_Store -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SOURCEDIR = . 8 | BUILDDIR = _build 9 | 10 | # Put it first so that "make" without argument is like "make help". 11 | help: 12 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 13 | 14 | .PHONY: help Makefile 15 | 16 | # Catch-all target: route all unknown targets to Sphinx using the new 17 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 18 | %: Makefile 19 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -------------------------------------------------------------------------------- /docs/assets/ipfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/remix-plugins-directory/52e05dc7023b4a716a63eef4c3e6c730d4d1d97f/docs/assets/ipfs.png -------------------------------------------------------------------------------- /docs/assets/loadplugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/remix-plugins-directory/52e05dc7023b4a716a63eef4c3e6c730d4d1d97f/docs/assets/loadplugin.png -------------------------------------------------------------------------------- /docs/assets/plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/remix-plugins-directory/52e05dc7023b4a716a63eef4c3e6c730d4d1d97f/docs/assets/plugin.png -------------------------------------------------------------------------------- /docs/assets/pluginmanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethereum/remix-plugins-directory/52e05dc7023b4a716a63eef4c3e6c730d4d1d97f/docs/assets/pluginmanager.png -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Configuration file for the Sphinx documentation builder. 4 | # 5 | # This file does only contain a selection of the most common options. For a 6 | # full list see the documentation: 7 | # http://www.sphinx-doc.org/en/master/config 8 | 9 | # -- Path setup -------------------------------------------------------------- 10 | 11 | # If extensions (or modules to document with autodoc) are in another directory, 12 | # add these directories to sys.path here. If the directory is relative to the 13 | # documentation root, use os.path.abspath to make it absolute, like shown here. 14 | # 15 | # import os 16 | # import sys 17 | # sys.path.insert(0, os.path.abspath('.')) 18 | 19 | 20 | # -- Project information ----------------------------------------------------- 21 | 22 | project = u'Remix Plugin Directory' 23 | copyright = u'2020, Remix Team' 24 | author = u'Remix Team' 25 | 26 | # The short X.Y version 27 | version = u'' 28 | # The full version, including alpha/beta/rc tags 29 | release = u'' 30 | 31 | 32 | # -- General configuration --------------------------------------------------- 33 | 34 | # If your documentation needs a minimal Sphinx version, state it here. 35 | # 36 | # needs_sphinx = '1.0' 37 | 38 | # Add any Sphinx extension module names here, as strings. They can be 39 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 40 | # ones. 41 | extensions = [ 42 | "sphinx_rtd_theme","recommonmark" 43 | ] 44 | 45 | # Add any paths that contain templates here, relative to this directory. 46 | templates_path = ['_templates'] 47 | 48 | # The suffix(es) of source filenames. 49 | # You can specify multiple suffix as a list of string: 50 | # 51 | # source_suffix = ['.rst', '.md'] 52 | source_suffix = ['.rst', '.md'] 53 | 54 | # The master toctree document. 55 | master_doc = 'index' 56 | 57 | # The language for content autogenerated by Sphinx. Refer to documentation 58 | # for a list of supported languages. 59 | # 60 | # This is also used if you do content translation via gettext catalogs. 61 | # Usually you set "language" from the command line for these cases. 62 | language = None 63 | 64 | # List of patterns, relative to source directory, that match files and 65 | # directories to ignore when looking for source files. 66 | # This pattern also affects html_static_path and html_extra_path. 67 | exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store'] 68 | 69 | # The name of the Pygments (syntax highlighting) style to use. 70 | pygments_style = None 71 | 72 | 73 | # -- Options for HTML output ------------------------------------------------- 74 | 75 | # The theme to use for HTML and HTML Help pages. See the documentation for 76 | # a list of builtin themes. 77 | # 78 | html_theme = "sphinx_rtd_theme" 79 | 80 | # Theme options are theme-specific and customize the look and feel of a theme 81 | # further. For a list of options available for each theme, see the 82 | # documentation. 83 | # 84 | # html_theme_options = {} 85 | 86 | # Add any paths that contain custom static files (such as style sheets) here, 87 | # relative to this directory. They are copied after the builtin static files, 88 | # so a file named "default.css" will overwrite the builtin "default.css". 89 | html_static_path = ['_static'] 90 | 91 | # Custom sidebar templates, must be a dictionary that maps document names 92 | # to template names. 93 | # 94 | # The default sidebars (for documents that don't match any pattern) are 95 | # defined by theme itself. Builtin themes are using these templates by 96 | # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', 97 | # 'searchbox.html']``. 98 | # 99 | # html_sidebars = {} 100 | 101 | 102 | # -- Options for HTMLHelp output --------------------------------------------- 103 | 104 | # Output file base name for HTML help builder. 105 | htmlhelp_basename = 'RemixPluginDirectorydoc' 106 | 107 | 108 | # -- Options for LaTeX output ------------------------------------------------ 109 | 110 | latex_elements = { 111 | # The paper size ('letterpaper' or 'a4paper'). 112 | # 113 | # 'papersize': 'letterpaper', 114 | 115 | # The font size ('10pt', '11pt' or '12pt'). 116 | # 117 | # 'pointsize': '10pt', 118 | 119 | # Additional stuff for the LaTeX preamble. 120 | # 121 | # 'preamble': '', 122 | 123 | # Latex figure (float) alignment 124 | # 125 | # 'figure_align': 'htbp', 126 | } 127 | 128 | # Grouping the document tree into LaTeX files. List of tuples 129 | # (source start file, target name, title, 130 | # author, documentclass [howto, manual, or own class]). 131 | latex_documents = [ 132 | (master_doc, 'RemixPluginDirectory.tex', u'Remix Plugin Directory Documentation', 133 | u'Remix Team', 'manual'), 134 | ] 135 | 136 | 137 | # -- Options for manual page output ------------------------------------------ 138 | 139 | # One entry per manual page. List of tuples 140 | # (source start file, name, description, authors, manual section). 141 | man_pages = [ 142 | (master_doc, 'remixplugindirectory', u'Remix Plugin Directory Documentation', 143 | [author], 1) 144 | ] 145 | 146 | 147 | # -- Options for Texinfo output ---------------------------------------------- 148 | 149 | # Grouping the document tree into Texinfo files. List of tuples 150 | # (source start file, target name, title, author, 151 | # dir menu entry, description, category) 152 | texinfo_documents = [ 153 | (master_doc, 'RemixPluginDirectory', u'Remix Plugin Directory Documentation', 154 | author, 'RemixPluginDirectory', 'One line description of project.', 155 | 'Miscellaneous'), 156 | ] 157 | 158 | 159 | # -- Options for Epub output ------------------------------------------------- 160 | 161 | # Bibliographic Dublin Core info. 162 | epub_title = project 163 | 164 | # The unique identifier of the text. This can be a ISBN number 165 | # or the project homepage. 166 | # 167 | # epub_identifier = '' 168 | 169 | # A unique identification for the text. 170 | # 171 | # epub_uid = '' 172 | 173 | # A list of files that should not be packed into the epub file. 174 | epub_exclude_files = ['search.html'] 175 | -------------------------------------------------------------------------------- /docs/getting_help.md: -------------------------------------------------------------------------------- 1 | # Getting help 2 | 3 | Feel free to join our gitter chat if you have any question 4 | 5 | - [Remix Dev](https://gitter.im/ethereum/remix-dev) - Remix IDE development 6 | - [Remix Plugin Dev](https://gitter.im/ethereum/remix-dev-plugin) - Plugins development -------------------------------------------------------------------------------- /docs/getting_started.md: -------------------------------------------------------------------------------- 1 | # Getting started 2 | 3 | ## Basic concepts of a simple Remix plugin 4 | 5 | A remix plugin in its simplest form is a webapp running in an iFrame on the Remix IDE. 6 | 7 | To interact with Remix you will need to use the Remix plugin code. This will provide: 8 | - making calls to Remix, for example to load a file 9 | - listen to events from Remix, for example when a user has compiled a sol file 10 | - loading the currently active CSS theme in your plugin 11 | - interacting with other plugins 12 | - helper functions like loading content 13 | 14 | You can use any framework you like, React, Webpack, Angular ... 15 | 16 | ## Loading the library 17 | 18 | The library you have to use for an iFrame plugin is called plugin-webview. 19 | 20 | Install the library with your package manager as described in plugin-webview. 21 | 22 | Using the library you create an instance of the plugin *client*, you can have your own class extend the plugin or just instanciate a plugin client. 23 | 24 | The client can listen to events and call methods. 25 | 26 | ## The onload event 27 | 28 | The onload event is the signal in your app communication is setup with Remix. In case you don't see that event happening something is wrong. 29 | You should check the console to find out. 30 | 31 | ``` 32 | client.onload(async () => { 33 | }) 34 | ``` 35 | 36 | ## Bootstrap CSS 37 | 38 | When the client is loaded Remix will provide your iFrame with a theme, the current theme choosen by the user. 39 | 40 | If that onload event doesn't happen, the theme won't be loaded and neither will the client be ready to interact with 41 | Remix. 42 | 43 | **You should not load your own bootstrap css!** It is not necessary. When using bootstrap JS functions however, you should load them in your codebase. 44 | 45 | Your styling should always directed towards compliance with the look & feel of Remix. Use the standard buttons, like primary, secondary, success, danger and so on. 46 | They will be styled by the Remix CSS that is loaded on your iFrame. You should follow the general guidelines outlined in this manual. 47 | 48 | 49 | ## The plugin API 50 | 51 | ### Files 52 | 53 | By simply calling the fileManager method on the client you can interact with the Remix filesystem. 54 | 55 | Read about those file methods and events here https://github.com/ethereum/remix-plugin/blob/master/packages/api/doc/file-system.md. 56 | 57 | ### Importing content 58 | 59 | You can have Remix handle importing content for you. It can load data from various sources and also write it to file: https://github.com/ethereum/remix-plugin/blob/master/packages/api/doc/content-import.md 60 | 61 | ### The solidity compiler 62 | 63 | You can interact with the solidity compiler. Follow these methods https://github.com/ethereum/remix-plugin/blob/master/packages/api/doc/solidity.md 64 | 65 | ### Exposing methods 66 | 67 | You can expose methods in your app to other plugins or call methods on other plugins. It is described in plugin-webview. 68 | 69 | **You should include those methods in your profile.json which you create to publish your plugin.** 70 | 71 | ### Calling your plugin & methods directly from a URL 72 | 73 | Read the documentation here. 74 | 75 | ### More API 76 | 77 | Check out these docs to find out what more you can do with the plugin. 78 | These include networking, unit testing and much more. 79 | 80 | 81 | ## Installing the plugin locally 82 | 83 | When you've developed your app you can run locally and install it in Remix. 84 | 85 | 1. Click on the plugin icon 86 | 87 | ![](assets/plugin.png) 88 | 1. Click on add local plugin 89 | 90 | ![](assets/pluginmanager.png) 91 | 92 | You can load your plugin either in the main panel, or on the side. 93 | 94 | 1. Specify your plugin URL 95 | 96 | ![](assets/loadplugin.png) 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /docs/guidelines.md: -------------------------------------------------------------------------------- 1 | Guidelines for documentation and styling 2 | ======================================== 3 | 4 | UI guidelines 5 | ------------- 6 | 7 | A great user experience needs a good interface. Here are some requirements for a successfull plugin. 8 | 9 | **Boostrap CSS** 10 | 11 | > As mentioned in the getting started part of these docs, Remix loads a Bootstrap CSS theme for you in your plugin. You want to try **not to write CSS yourself** and just **use the bootstrap components and layout**. 12 | 13 | > * Use the bootstrap sizing, padding, margin and styling classes. 14 | > * Use buttons for buttons and form-control elements for forms and so on. 15 | > * Look at the Remix interface to get a feel for the components used. 16 | 17 | **Clear navigation** 18 | 19 | > Really guide your user through all the steps. Provide dummy or mockup data if possible to generate a useful result. There should not be an empty state. Use tooltips or links to the documentation. 20 | 21 | **Feedback** 22 | 23 | > Every step should have feedback concerning errors, successes or requirements. If a step requires the user to do something in another part of the Remix environment this should be clearly indicated. If files are not loading correctly or the Remix IDE returns errors on calls this should be made clear. Your user should never be stuck. Point your user to the results generated, tell them what to do if the results fail. 24 | 25 | **Dependencies** 26 | 27 | > If there are dependencies on other services or software clearly tell the user where to look or what to do. If certain service providers or functionalities in Remix have not been actived your plugin should test for them and provide feedback. 28 | 29 | **Tooltips and documentation** 30 | 31 | > Always refer to any documentation you have on all input fields and steps. Use tooltips whenever possible. Just a form with some input fields is not a good user experience. Don't assume your user knows what to do. 32 | 33 | Documentation guidelines 34 | ------------------------ 35 | 36 | Great documentation is crucial to the success of your plugin. We encourage you to publish your docs on [Read the docs](https://readthedocs.org/). 37 | 38 | We have some great tips on how to make your documentation effective. 39 | 40 | **Clearly state the purpose of your plugin** 41 | 42 | > Describe in detail what the plugin does. Do not assume any knowledge on the part of your user, introduce all the concepts and technologies. Use external links to anything related to your plugin. 43 | 44 | **Who is your plugin for?** 45 | 46 | > Define who your user is, what they might need and what they might get out of using your plugin. 47 | 48 | **Requirements** 49 | 50 | > What is needed to successfully run the plugin? Some plugins might need other software or services to run. Provide information, links and step by step guides to setting those up. 51 | > 52 | > In some cases certain functionalities or settings in the Remix environment are needed. Clearly state the knowledge and steps needed. If possible provide links to sections in the [Remix documentation](https://remix-ide.readthedocs.io/en/latest/index.html) that explain what the user needs to know. 53 | 54 | **Installation and configuration** 55 | 56 | > Tell your user where to find your plugin the Remix directory and how to set it up. Your plugin will have an icon in the sidebar of Remix, show your user what it is. 57 | 58 | **Set by step demonstration** 59 | 60 | > The best way to explain your plugin is by demonstration. Provide a detailed step by step tutorial on how to use it. Dummy data that leads to results is a great way to help your user. Try to avoid an empty state. 61 | 62 | **Use screenshots** 63 | 64 | > A picture is worth a thousand words. 65 | 66 | **Be available for troubleshooting** 67 | 68 | > Always assume something can go wrong. Provide a place where users can go with their issues. This can be done on github, gitter, any chat channel or e-mail. 69 | 70 | **Introduce yourself** 71 | 72 | > Link to any websites, companies, repositories you are involved with. This can greatly help the user to engage with your plugin and maybe encourage them to assist in development and feedback. 73 | 74 | **Always be up to date** 75 | 76 | > Be accurate in every detail, update the documentation when your plugin has an update. 77 | 78 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | .. Remix Plugin Directory documentation master file, created by 2 | sphinx-quickstart on Tue Oct 27 18:24:31 2020. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Remix plugin development 7 | ================================================== 8 | 9 | Using the Remix Plugin system is an easy way to extend the functionality of the Remix IDE. 10 | 11 | .. toctree:: 12 | :maxdepth: 2 13 | :caption: Contents: 14 | 15 | getting_started 16 | guidelines 17 | publishing_your_plugin 18 | getting_help 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=_build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/publishing_your_plugin.md: -------------------------------------------------------------------------------- 1 | # Publishing your plugin 2 | 3 | The repo ethereum/plugins-directory holds a directory called plugins. 4 | Each plugin has its own directory. 5 | 6 | ## Profile.json 7 | 8 | To publish a plugin you need to create a pull request there that publishes a JSON profile.json file describing your plugin. 9 | 10 | Mandatory fields are: 11 | > * name 12 | > * displayName 13 | > * version 14 | > * URL 15 | > * icon 16 | > * location 17 | > * documentation 18 | 19 | ``` 20 | { 21 | "name": "", 22 | "displayName": "", 23 | "methods": [], // list of methods that the plugin is making available to other plugins 24 | "version": "1.0.0-alpha", // semver version 25 | "url": "", // can be an https or ipfs URL - ipfs:// 26 | "description": "", 27 | "icon": "", // https link to image or BASE64 value 28 | "location": "", // can be sidePanel, mainPanel or hidden 29 | "documentation":"" 30 | } 31 | ``` 32 | 33 | When the plugin is approved it will be published to the plugin directory in Remix. 34 | 35 | ## Profile tools & Hosting 36 | 37 | You can host your plugin anywhere you want. We provide tools to upload your plugin to our own IPFS gateway. 38 | 39 | This tool will guide you through the process. You can have it create the profile file directly into the plugins directory so you can push your PR to us. 40 | 41 | ``` 42 | git clone https://github.com/ethereum/remix-plugins-directory 43 | cd remix-plugins-directory/tools 44 | npm i 45 | node ipfs-upload/bin/upload-remix-plugin 46 | ``` 47 | 48 | You will get an IPFS link to your app you can copy/paste to Remix to test it. 49 | 50 | ## Testing your app in IPFS 51 | 52 | Before you push your PR you should always test your build. Running locally or on IPFS can be different, depending how you setup your app. 53 | 54 | 1. Click on the plugin icon 55 | 56 | ![](assets/plugin.png) 57 | 1. Click on add local plugin 58 | 59 | ![](assets/pluginmanager.png) 60 | 61 | You can load your plugin either in the main panel, or on the side. 62 | 63 | 1. Specify your plugin URL, for example ipfs://xxxxx 64 | 65 | ![](assets/ipfs.png) 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /docs/watch.sh: -------------------------------------------------------------------------------- 1 | open -a "Google Chrome" ./_build/html/index.html 2 | fswatch -o ./ | xargs -n1 -I{} make html -------------------------------------------------------------------------------- /plugins/arbitrum-stylus/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "arbitrum-stylus", 3 | "displayName": "ARBITRUM STYLUS", 4 | "description": "Deployment and execution of smart contracts via Arbitrum Stylus", 5 | "events": [], 6 | "methods": [], 7 | "url": "https://remix-plugin-arbitrum.welldonestudio.io", 8 | "icon": "https://remix-plugin.welldonestudio.io/icon.png", 9 | "repo": "https://github.com/dsrvlabs/arbitrum-stylus", 10 | "documentation": "https://docs.welldonestudio.io/code", 11 | "maintainedBy": "DSRV", 12 | "authorContact": "", 13 | "version": "0.1.0-beta", 14 | "location": "sidePanel" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/bif-solidity/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Compile Solidity Contracts (Xinghuo BIF)", 3 | "displayName": "Solidity Compiler (Xinghuo BIF)", 4 | "events": [], 5 | "icon": "//remix.bitfactory.cn/solidity-compiler/assets/img/bif-solidity.webp", 6 | "location": "sidePanel", 7 | "methods": [], 8 | "name": "bif-solidity", 9 | "url": "//remix.bitfactory.cn/solidity-compiler/", 10 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 11 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/solidity-compiler/README.md", 12 | "maintainedBy": "caict-4iot-dev", 13 | "version": "0.1.0" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/bif-udapp-js/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Deploy JS Contracts & Run Transactions on Xinghuo BIF", 3 | "displayName": "Deploy & Run JS on Xinghuo BIF", 4 | "events": [], 5 | "icon": "//remix.bitfactory.cn/udapp-js/assets/img/bif-udapp-js.webp", 6 | "location": "sidePanel", 7 | "methods": [], 8 | "name": "bif-udapp-js", 9 | "url": "//remix.bitfactory.cn/udapp-js/", 10 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 11 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/udapp-js/README.md", 12 | "maintainedBy": "caict-4iot-dev", 13 | "version": "0.1.0" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/bif-udapp/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Deploy Solidity contracts & Run Transactions on Xinghuo BIF", 3 | "displayName": "Deploy & Run Solidity on Xinghuo BIF", 4 | "events": [], 5 | "icon": "//remix.bitfactory.cn/udapp/assets/img/bif-udapp.webp", 6 | "location": "sidePanel", 7 | "methods": [], 8 | "name": "bif-udapp", 9 | "url": "//remix.bitfactory.cn/udapp/", 10 | "repo": "https://github.com/caict-4iot-dev/remix-bif-plugins", 11 | "documentation": "https://github.com/caict-4iot-dev/remix-bif-plugins/blob/main/apps/udapp/README.md", 12 | "maintainedBy": "caict-4iot-dev", 13 | "version": "0.1.0" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/buildbear/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "buildbear", 3 | "displayName": "BuildBear", 4 | "methods": [], 5 | "version": "0.1.0", 6 | "url": "https://remix.buildbear.io/", 7 | "description": "Create a Private Sandbox for various EVM and EVM-compatible blockchain networks, complete with a Faucet and Explorer.", 8 | "icon": "https://www.buildbear.io/remix-logo.webp", 9 | "location": "sidePanel", 10 | "targets": ["remix", "vscode"], 11 | "documentation": "https://docs.buildbear.io/docs/BuildBear-Remix-Plugin", 12 | "repo": "https://github.com/BuildBearLabs/buildbear-remix-plugin", 13 | "maintainedBy": "BuildBear Team", 14 | "authorContact": "team@buildbear.io" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/contract-deployer/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "contract_deployer", 3 | "displayName": "Contract Deployer", 4 | "methods": [], 5 | "version": "0.1.0-alpha", 6 | "url": "https://contract-deployer-plugin.surge.sh/", 7 | "repo": "https://github.com/hexdivision/remix-contract-deployer-plugin", 8 | "documentation": "https://github.com/hexdivision/remix-contract-deployer-plugin#getting-started-with-contract-deployer-plugin", 9 | "maintainedBy": "", 10 | "authorContact": "", 11 | "description": "Deploy a compiled contract to the same address on multiple networks", 12 | "icon": "data:image/webp;base64,UklGRmYCAABXRUJQVlA4TFkCAAAvVoAVEL+goG0jx8f9YI+fIBS0bcO43At7R0HbNozLvbB3DESS4ZOoon8ZKwGCSZpqOwaVbddMAAsAgMN/H8kDrP8AwPof0JJtt25cnQYPIbYtmU5TsOc/VkC0IjK5j6+I/k8ATq7sXQHA2FsAwNirACDs/hrnNSuZlf1lvSa0OZTZqCFM97ncE473PBFFt01E+rBNY4VP70cLUp7F7kRJrg5lFl9upTe3zQJeg+bqcHv05Upgc2iRuVcmWeDLLDYHud8qvHAWObnO5zR46xPOg88e0ZnwJge/Mg+XMapLekTe3mb7I7OzjrE5iHZ8XjGGJgfR0yrCX5fjGkD0pIrwh9fjkhxET6kIfzgCF3GQfMKK8IdjUMXhfsIr+OEoXE77cjvHof2WMlKd1XtW7U+0DFTE7frRBr/rKGo4fPctgsM6hgo6X7ljSehsQwi630cq6N4GeODDctDQn/L1xEnJ+gzekcK/Sl6aw3a5BV5JsjqJvp0oSZrbL/ftjD47RNW96b+dXG51e8DPalDGWFzKrrgUbc6CzdnlcgKARlLFWbQ4VJIluffluDvIbgl+jWgO0gxhuZ4mdyw8LMFx4/X46BI94rNLdAQ+OmRh77PjpRyC2oL0zOxXC15PfnwZMpd1XXhiLuuqPPFCV/8/US6lFI2Kj7SUUnSkFQBqoPBRA4D7vz43M7M1oJlZi6qZWRnp6v87u/r934F6AubYPluw6OBvlz5bUTl4digfCZIORnOSP6gARAdbHVrfAi86FsVh1457CoCmQ5UAUjUoht5XGzkFAKy1lhADAA==", 13 | "location": "sidePanel" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/cookbookdev/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cookbookdev", 3 | "displayName": "Cookbook.dev", 4 | "description": "Find any smart contract, protocol, and library.", 5 | "version": "0.1.3", 6 | "events": [], 7 | "methods": ["openContract", "openProtocol", "openPattern"], 8 | "kind": "none", 9 | "icon": "https://www.cookbook.dev/img/cookbook.webp", 10 | "location": "sidePanel", 11 | "documentation": "https://www.cookbook.dev", 12 | "url": "https://www.cookbook.dev/remix-plugin", 13 | "maintainedBy": "Cookbook", 14 | "authorContact": "tyler@cookbook.dev", 15 | "targets": ["remix", "vscode"], 16 | "repo": "https://github.com/Breakthrough-Labs/cookbook-remix-plugin" 17 | } 18 | -------------------------------------------------------------------------------- /plugins/coti/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coti-remix-plugin", 3 | "displayName": "COTI", 4 | "description": "Deploy and interact with contracts on the COTI privacy-preserving network", 5 | "events": [], 6 | "methods": [], 7 | "url": "https://remix.coti.io", 8 | "icon": "https://remix.coti.io/coti-plugin-logo.png", 9 | "documentation": "https://docs.coti.io/coti-v2-documentation/developer-tooling/coti-remix-plugin", 10 | "version": "0.1.1-beta", 11 | "location": "sidePanel", 12 | "maintainedBy": "COTI team", 13 | "authorContact": "product@coti.io" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/dapp-draft/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dapp-draft", 3 | "displayName": "Quick Dapp", 4 | "description": "Edit & deploy a Dapp", 5 | "version": "0.2.0", 6 | "methods": [ 7 | "edit" 8 | ], 9 | "kind": "none", 10 | "icon": "https://remix-dapp-draft-plugin.pages.dev/dappDraft.webp", 11 | "location": "mainPanel", 12 | "url": "https://remix-dapp-draft-plugin.pages.dev/", 13 | "repo": "https://github.com/drafish/remix-dapp-draft-plugin", 14 | "maintainedBy": "Remix", 15 | "authorContact": "https://github.com/drafish", 16 | "targets": [ 17 | "remix" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /plugins/defender-deploy/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "defender-deploy", 3 | "displayName": "Defender Deploy", 4 | "description": "Secure Deployments using OpenZeppelin Defender", 5 | "events": [], 6 | "methods": [], 7 | "url": "https://defeder-remix-deploy.netlify.app/", 8 | "icon": "https://defeder-remix-deploy.netlify.app/logo.png", 9 | "repo": "https://github.com/OpenZeppelin/defender-deploy-plugin", 10 | "documentation": "https://docs.openzeppelin.com/defender/remix-plugin", 11 | "maintainedBy": "OpenZeppelin Defender team", 12 | "authorContact": "", 13 | "version": "0.1.0-beta", 14 | "location": "sidePanel" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/klaytn/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "klaytn-remix-plugin", 3 | "displayName": "Kaia", 4 | "description": "Deploy and Run Transactions with Kaia.", 5 | "events": [], 6 | "methods": [], 7 | "url": "//klaytn-remix-plugin.ozys.io", 8 | "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAyNDggMzYwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMTI2Ljc4NCA4OS4zNjgyQzEyNi43ODQgNzUuMDIyNyAxMzguNDcxIDYzLjMzNTkgMTUyLjgxNyA2My4zMzU5SDE5OS4zOThWMEgxNzYuMTA3SDE1Mi44MTdDMTAzLjQ2NiAwIDYzLjQ0ODUgNDAuMDE3NyAKNjMuNDQ4NSA4OS4zNjgyQzYzLjQ0ODUgMTAyLjI0NiA2Ni4xOTAyIDExNC40ODcgNzEuMDkyIDEyNS41MzZDMzIuNzYzNyAxNDEuNzM3IDcuMzEzMDIgMTc2LjE2MSAxLjM4NjUzIDIxOS43MjNDLTUuNTM2OTQgCjI2Ny41NTEgMTMuNjI3MiAzMTkuMTQ0IDU1LjM2MTkgMzQ0LjA2OUM5Mi42MTAyIDM2Ny41MjYgMTUwLjg1IDM2NS45NzUgMTgyLjMxMSAzMzMuNDM0VjM1NS4wMzZIMjQ3LjE0MlYxMTUuNEgxNTIuODQ0QzEzOC40OTkgCjExNS40IDEyNi43ODQgMTAzLjcxNCAxMjYuNzg0IDg5LjM2ODJaTTE4My43NTEgMTc4Ljc2NFYyMzguOTE1QzE4My43NTEgMjcyLjE0OCAxNTYuODA1IDI5OS4wNjYgMTIzLjYgMjk5LjA2NkM5MC4zOTQ3IDI5OS4wNjYgNjMuNDQ4NSAKMjcyLjEyIDYzLjQ0ODUgMjM4LjkxNUM2My40NDg1IDIwNS43MSA5MC4zOTQ3IDE3OC43NjQgMTIzLjYgMTc4Ljc2NEgxODMuNzUxWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==", 9 | "documentation": "https://github.com/klaytn-ozys/plug-and-klay", 10 | "version": "1.0.0", 11 | "location": "sidePanel", 12 | "repo": "https://github.com/klaytn-ozys/plug-and-klay", 13 | "maintainedBy": "Ozys Co., Ltd", 14 | "authorContact": "support@ozys.io" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/learneth/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LearnEth", 3 | "displayName": "LearnEth", 4 | "description": "Learn Ethereum with Remix!", 5 | "documentation": "https://remix-learneth-plugin.readthedocs.io/en/latest/index.html", 6 | "version": "0.1.0-beta.8", 7 | "methods": ["startTutorial","addRepository"], 8 | "kind": "none", 9 | "icon": "https://raw.githubusercontent.com/bunsenstraat/remix-learneth-plugin/master/src/assets/Font_Awesome_5_solid_book-reader.svg", 10 | "location": "sidePanel", 11 | "url": "https://learneth.web.app", 12 | "repo": "https://github.com/bunsenstraat/remix-learneth-plugin", 13 | "maintainedBy": "Remix", 14 | "authorContact": "", 15 | "targets":["remix","vscode"] 16 | } 17 | -------------------------------------------------------------------------------- /plugins/nahmii/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nahmii-compiler", 3 | "displayName": "Nahmii Compiler", 4 | "description": "Compiler for Nahmii 2.0.", 5 | "version": "0.1.0", 6 | "events": [], 7 | "methods": [], 8 | "kind": "none", 9 | "icon": "https://cdn-images-1.medium.com/max/140/1*d5P-r_Ax5zx-Q70plxwIfQ@2x.png", 10 | "location": "sidePanel", 11 | "url": "https://remix-nahmii-compiler-plugin.surge.sh", 12 | "repo": "https://github.com/nahmii-community/remix-nahmii-compiler-plugin", 13 | "maintainedBy": "", 14 | "authorContact": "" 15 | } -------------------------------------------------------------------------------- /plugins/restorebackupzip/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "restorebackupzip", 3 | "displayName": "Restore Backup Zip", 4 | "description": "Use this to restore your Remix backup zip files to the new workspaces.", 5 | "documentation": "", 6 | "version": "0.1.0", 7 | "events": [], 8 | "methods": [], 9 | "icon": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/OOjs_UI_icon_upload.svg/20px-OOjs_UI_icon_upload.svg.png", 10 | "location": "mainPanel", 11 | "url": "https://restorebackupremix.web.app", 12 | "targets":["remix"], 13 | "repo": "https://github.com/bunsenstraat/restorezip", 14 | "maintainedBy": "", 15 | "authorContact": "" 16 | } 17 | -------------------------------------------------------------------------------- /plugins/script-runner/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scriptRunner", 3 | "displayName": "Script Runner", 4 | "description": "Execute script and emit logs", 5 | "version": "1.0.0-alpha.1", 6 | "methods": ["execute"], 7 | "kind": "none", 8 | "icon": "data:image/png;base64,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", 9 | "location": "hiddenPanel", 10 | "url": "https://remix-project-org.github.io/script-runner", 11 | "repo": "https://github.com/remix-project-org/script-runner", 12 | "maintainedBy": "Remix", 13 | "authorContact": "" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/sentio/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sentio-remix-plugin", 3 | "displayName": "Sentio", 4 | "description": "Search and view function related transactions directly in Remix, service is provided by Sentio", 5 | "events": [], 6 | "methods": [], 7 | "url": "https://remix.sentio.xyz/index.html", 8 | "icon": "https://remix.sentio.xyz/plugin-logo.webp", 9 | "documentation": "https://docs.sentio.xyz/docs/remix-ide-plugin", 10 | "version": "1.0.0", 11 | "location": "sidePanel", 12 | "maintainedBy": "sentio team", 13 | "authorContact": "support@sentio.xyz" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/solhint/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solhint", 3 | "displayName": "Solhint Linter", 4 | "methods": [], 5 | "version": "0.0.2", 6 | "documentation": "https://protofire.github.io/solhint/docs/rules.html", 7 | "url": "https://solhint.web.app", 8 | "description": "Linter for Solidity", 9 | "icon": "https://raw.githubusercontent.com/protofire/solhint/master/solhint-icon.png", 10 | "location": "sidePanel", 11 | "targets":["remix","vscode"], 12 | "repo": "https://github.com/protofire/remix-solhint-plugin", 13 | "maintainedBy": "protofire", 14 | "authorContact": "" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/solidityscan/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solidityScan", 3 | "displayName": "SolidityScan", 4 | "methods": [], 5 | "version": "0.1.0", 6 | "url": "https://remix.solidityscan.com/", 7 | "description": "An automated smart contract auditing & vulnerability scanning tool built to discover vulnerabilities & proactively address risks within your code.", 8 | "icon": "https://web-assets.solidityscan.com/web-assets/solidity_scan_assets/images/logo/logo192.png", 9 | "location": "sidePanel", 10 | "documentation": "https://docs.solidityscan.com/remix/", 11 | "maintainedBy": "Credshields", 12 | "authorContact": "info@credshields.com" 13 | } 14 | -------------------------------------------------------------------------------- /plugins/starknet/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Starknet", 3 | "displayName": "Starknet", 4 | "methods": [], 5 | "version": "0.2.2", 6 | "url": "https://cairo-remix.nethermind.io/", 7 | "description": "Compile and deploy contracts with Cairo, a native smart contract language for Starknet.", 8 | "icon": "https://res.cloudinary.com/lianahus/image/upload/v1643013278/webp/StarkNetLogo_2_izzamu.webp", 9 | "location": "sidePanel", 10 | "documentation": "https://github.com/NethermindEth/starknet-remix-plugin", 11 | "repo": "https://github.com/NethermindEth/starknet-remix-plugin", 12 | "maintainedBy": "Nethermind", 13 | "authorContact": "rohit@nethermind.io" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/tenderly/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tenderly", 3 | "displayName": "Tenderly", 4 | "methods": [], 5 | "version": "1.0.0", 6 | "url": "https://remix-plugin.tenderly.co/", 7 | "description": "Remix & Tenderly Project Integration. Verify Contracts. Import To Remix From your Tenderly project.", 8 | "icon": "data:image/png;base64,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", 9 | "location": "sidePanel", 10 | "targets":["remix","vscode"], 11 | "documentation": "https://docs.tenderly.co/simulations-and-forks/integrations#remix", 12 | "repo": "https://github.com/Tenderly/remix-tenderly", 13 | "maintainedBy": "", 14 | "authorContact": "" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/wallet-connect/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "walletconnect", 3 | "kind": "provider", 4 | "displayName": "Wallet Connect", 5 | "events": [], 6 | "version": "2.0.0", 7 | "methods": ["sendAsync"], 8 | "url": "https://walletconnect.web.app/", 9 | "description": "Use an external wallet for transacting", 10 | "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAlIiBjeT0iNTAlIiByPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1ZDlkZjYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDZmZmYiLz48L3JhZGlhbEdyYWRpZW50PjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0ibTI1NiAwYzE0MS4zODQ4OTYgMCAyNTYgMTE0LjYxNTEwNCAyNTYgMjU2cy0xMTQuNjE1MTA0IDI1Ni0yNTYgMjU2LTI1Ni0xMTQuNjE1MTA0LTI1Ni0yNTYgMTE0LjYxNTEwNC0yNTYgMjU2LTI1NnoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtNjQuNjkxNzU1OCAzNy43MDg4Mjk4YzUxLjUzMjgwNzItNTAuMjc4NDM5NyAxMzUuMDgzOTk0Mi01MC4yNzg0Mzk3IDE4Ni42MTY3OTkyIDBsNi4yMDIwNTcgNi4wNTEwOTA2YzIuNTc2NjQgMi41MTM5MjE4IDIuNTc2NjQgNi41ODk3OTQ4IDAgOS4xMDM3MTc3bC0yMS4yMTU5OTggMjAuNjk5NTc1OWMtMS4yODgzMjEgMS4yNTY5NjE5LTMuMzc3MSAxLjI1Njk2MTktNC42NjU0MjEgMGwtOC41MzQ3NjYtOC4zMjcwMjA1Yy0zNS45NTA1NzMtMzUuMDc1NDk2Mi05NC4yMzc5NjktMzUuMDc1NDk2Mi0xMzAuMTg4NTQ0IDBsLTkuMTQwMDI4MiA4LjkxNzU1MTljLTEuMjg4MzIxNyAxLjI1Njk2MDktMy4zNzcxMDE2IDEuMjU2OTYwOS00LjY2NTQyMDggMGwtMjEuMjE1OTk3My0yMC42OTk1NzU5Yy0yLjU3NjY0MDMtMi41MTM5MjI5LTIuNTc2NjQwMy02LjU4OTc5NTggMC05LjEwMzcxNzd6bTIzMC40OTM0ODUyIDQyLjgwODkxMTcgMTguODgyMjc5IDE4LjQyMjcyNjJjMi41NzY2MjcgMi41MTM5MTAzIDIuNTc2NjQyIDYuNTg5NzU5My4wMDAwMzIgOS4xMDM2ODYzbC04NS4xNDE0OTggODMuMDcwMzU4Yy0yLjU3NjYyMyAyLjUxMzk0MS02Ljc1NDE4MiAyLjUxMzk2OS05LjMzMDg0LjAwMDA2Ni0uMDAwMDEtLjAwMDAxLS4wMDAwMjMtLjAwMDAyMy0uMDAwMDMzLS4wMDAwMzRsLTYwLjQyODI1Ni01OC45NTc0NTFjLS42NDQxNi0uNjI4NDgxLTEuNjg4NTUtLjYyODQ4MS0yLjMzMjcxIDAtLjAwMDAwNC4wMDAwMDQtLjAwMDAwOC4wMDAwMDctLjAwMDAxMi4wMDAwMTFsLTYwLjQyNjk2ODMgNTguOTU3NDA4Yy0yLjU3NjYxNDEgMi41MTM5NDctNi43NTQxNzQ2IDIuNTEzOTktOS4zMzA4NDA4LjAwMDA5Mi0uMDAwMDE1MS0uMDAwMDE0LS4wMDAwMzA5LS4wMDAwMjktLjAwMDA0NjctLjAwMDA0NmwtODUuMTQzODY3NzQtODMuMDcxNDYzYy0yLjU3NjYzOTI4LTIuNTEzOTIxLTIuNTc2NjM5MjgtNi41ODk3OTUgMC05LjEwMzcxNjNsMTguODgyMzEyNjQtMTguNDIyNjk1NWMyLjU3NjYzOTMtMi41MTM5MjIyIDYuNzU0MTk5My0yLjUxMzkyMjIgOS4zMzA4Mzk3IDBsNjAuNDI5MTM0NyA1OC45NTgyNzU4Yy42NDQxNjA4LjYyODQ4IDEuNjg4NTQ5NS42Mjg0OCAyLjMzMjcxMDMgMCAuMDAwMDA5NS0uMDAwMDA5LjAwMDAxODItLjAwMDAxOC4wMDAwMjc3LS4wMDAwMjVsNjAuNDI2MTA2NS01OC45NTgyNTA4YzIuNTc2NTgxLTIuNTEzOTggNi43NTQxNDItMi41MTQwNzQzIDkuMzMwODQtLjAwMDIxMDMuMDAwMDM3LjAwMDAzNTQuMDAwMDcyLjAwMDA3MDkuMDAwMTA3LjAwMDEwNjNsNjAuNDI5MDU2IDU4Ljk1ODM1NDhjLjY0NDE1OS42Mjg0NzkgMS42ODg1NDkuNjI4NDc5IDIuMzMyNzA5IDBsNjAuNDI4MDc5LTU4Ljk1NzE5MjVjMi41NzY2NC0yLjUxMzkyMzEgNi43NTQxOTktMi41MTM5MjMxIDkuMzMwODM5IDB6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDk4IDE2MCkiLz48L2c+PC9zdmc+", 11 | "location": "mainPanel", 12 | "documentation": "", 13 | "repo": "https://github.com/yann300/remix-walletconnect/issues", 14 | "maintainedBy": "Remix", 15 | "authorContact": "" 16 | } 17 | -------------------------------------------------------------------------------- /plugins/wds-code-remix/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wds-code-remix", 3 | "displayName": "CODE BY WELLDONE STUDIO", 4 | "description": "Multi-Chain Deploy and Run Transactions", 5 | "events": [], 6 | "methods": [], 7 | "url": "https://remix-plugin.welldonestudio.io", 8 | "icon": "https://remix-plugin.welldonestudio.io/icon.png", 9 | "repo": "https://github.com/dsrvlabs/wds-code-remix", 10 | "documentation": "https://docs.welldonestudio.io/code", 11 | "maintainedBy": "DSRV", 12 | "authorContact": "", 13 | "version": "0.1.0-beta", 14 | "location": "sidePanel" 15 | } 16 | -------------------------------------------------------------------------------- /plugins/zksync/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ZKsync", 3 | "displayName": "ZKsync", 4 | "methods": [], 5 | "version": "0.1.0", 6 | "url": "https://zksync-remix-plugin.zksync.io/", 7 | "description": "Compile and deploy smart contracts for ZKsync chains.", 8 | "icon": "https://zksync-remix-plugin.zksync.io/icon.webp", 9 | "location": "sidePanel", 10 | "documentation": "https://github.com/matter-labs/zksync-remix-plugin", 11 | "repo": "https://github.com/matter-labs/zksync-remix-plugin", 12 | "maintainedBy": "Matter Labs", 13 | "authorContact": "hello@matterlabs.dev" 14 | } 15 | -------------------------------------------------------------------------------- /plugins/zokrates/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ZoKrates", 3 | "displayName": "ZoKrates", 4 | "description": "ZoKrates toolbox for zkSNARKs on Ethereum", 5 | "documentation": "https://zokrates.github.io/", 6 | "methods": [], 7 | "events": [], 8 | "version": "0.2.0-beta", 9 | "url": "https://zokrates.github.io/zokrates-remix-plugin/", 10 | "icon": " data:image/png;base64,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", 11 | "location": "sidePanel", 12 | "targets": ["remix", "vscode"], 13 | "repo": "https://github.com/Zokrates/zokrates-remix-plugin", 14 | "maintainedBy": "", 15 | "authorContact": "" 16 | } 17 | -------------------------------------------------------------------------------- /tools/ipfs-upload/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | profile.json 3 | -------------------------------------------------------------------------------- /tools/ipfs-upload/bin/upload-remix-plugin: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const ipfsClient = require('ipfs-http-client') 4 | const signale = require('signale') 5 | const generateProfile = require('../generateProfile') 6 | 7 | var program = require('commander') 8 | var fs = require('fs') 9 | var path = require('path') 10 | 11 | program 12 | .description('Upload resources to IPFS and generate a profile.') 13 | .option('--profile-path ', 'Path where the profile.json should be generated. Default to current path') 14 | .parse(process.argv) 15 | 16 | const host = 'ipfs.remixproject.org' 17 | const ipfs = ipfsClient({ host, port: 443, protocol: 'https' }) 18 | 19 | const targetDir = program.profilePath || __dirname 20 | 21 | const uploadToIpfsAndGenerateProfile = async () => { 22 | const folder = process.argv.length > 2 ? process.argv[2] : process.cwd() 23 | signale.await('uploading ' + folder) 24 | let result = await ipfs.addFromFs(folder, {recursive: true, pin: true}) 25 | 26 | const remoteFolder = result[result.length - 1] 27 | const ipfsURL = 'ipfs://' + remoteFolder.hash 28 | signale.success('plugin URL', ipfsURL) 29 | 30 | signale.await('creation of plugin profile') 31 | const answers = await generateProfile.run() 32 | answers.url = ipfsURL 33 | 34 | fs.writeFileSync(path.join(targetDir, 'profile.json'), JSON.stringify(answers, null, 1)) 35 | 36 | return answers 37 | } 38 | 39 | uploadToIpfsAndGenerateProfile().then((result) => { 40 | signale.success(JSON.stringify(result, null, 1)) 41 | signale.success(`profile.json generated at ${targetDir}`) 42 | if (result.icon === generateProfile.BASE64_DEFAULT_IMG) { 43 | signale.warn('The default BASE64 icon has been sure. Please set your own.') 44 | } 45 | return process.exit() 46 | }).catch(signale.error) -------------------------------------------------------------------------------- /tools/ipfs-upload/bin/upload-single-file: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const ipfsClient = require('ipfs-http-client') 4 | 5 | const host = 'ipfs.remixproject.org' 6 | const ipfs = ipfsClient({ host, port: 443, protocol: 'https' }) 7 | const content = ' - ' 8 | 9 | ipfs.add(content).then(console.log).catch(console.log) 10 | -------------------------------------------------------------------------------- /tools/ipfs-upload/generateProfile.js: -------------------------------------------------------------------------------- 1 | const inquirer = require('inquirer') 2 | const semver = require('semver') 3 | const isUrl = require('is-url') 4 | const isBase64 = require('is-base64') 5 | 6 | const questions = [ 7 | { 8 | type: 'input', 9 | name: 'name', 10 | message: "plugin name" 11 | }, 12 | { 13 | type: 'input', 14 | name: 'displayName', 15 | message: "plugin display name" 16 | }, 17 | { 18 | type: 'input', 19 | name: 'description', 20 | message: "(optional) Description of this plugin" 21 | }, 22 | { 23 | type: 'input', 24 | name: 'version', 25 | message: "version number (semver)", 26 | validate: function(value, answers, flags) { 27 | if (!semver.valid(value)) return 'not semver: ' + value 28 | return true 29 | } 30 | }, 31 | { 32 | type: 'input', 33 | name: 'methods', 34 | message: "(optional) Comma separated list of all the functions that this plugin is triggering", 35 | filter: function(value) { 36 | return value ? value.split(',') : [] 37 | } 38 | }, 39 | { 40 | type: 'list', 41 | name: 'kind', 42 | choices: ['compiler', 'editor', 'network', 'filesystem', 'udapp', 'none'], 43 | message: "Type of plugin" 44 | }, 45 | { 46 | type: 'input', 47 | name: 'icon', 48 | message: "(optional) icon - URL or BASE64", 49 | filter: function(value) { 50 | if (isUrl(value) || isBase64(value, {mimeRequired: true, allowEmpty: false})) { 51 | return value 52 | } 53 | return '' 54 | } 55 | }, 56 | { 57 | type: 'list', 58 | name: 'location', 59 | message: "(optional) plugin location in the user interface. can be or none if the plugin does not have view", 60 | choices: ["sidePanel", "mainPanel", "none"] 61 | }, 62 | ] 63 | 64 | const BASE64_DEFAULT_IMG = 'data:image/png;base64,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' 65 | 66 | module.exports = { 67 | run: async () => { 68 | let result = await inquirer.prompt(questions) 69 | if (!result.icon) result.icon = BASE64_DEFAULT_IMG 70 | return result 71 | }, 72 | BASE64_DEFAULT_IMG 73 | } 74 | -------------------------------------------------------------------------------- /tools/ipfs-upload/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "upload-remix-plugin", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Remix team", 10 | "license": "MIT", 11 | "dependencies": { 12 | "form-data": "^2.5.1", 13 | "commander": "^3.0.2", 14 | "inquirer": "^1.0.0", 15 | "ipfs-http-client": "^35.1.0", 16 | "is-base64": "^1.0.0", 17 | "is-url": "^1.2.4", 18 | "semver": "^6.3.0", 19 | "signale": "^1.4.0" 20 | } 21 | } 22 | --------------------------------------------------------------------------------