├── .github └── workflows │ ├── update-lastupdated.yml │ └── update-readme.yml ├── .gitignore ├── CONTRIBUTING.md ├── README.md ├── Rakefile ├── add ├── lib └── plugin-directory-utils.rb ├── plugins.json └── stats /.github/workflows/update-lastupdated.yml: -------------------------------------------------------------------------------- 1 | name: Update lastUpdated 2 | on: 3 | schedule: 4 | - cron: '0 0 * * 0' 5 | workflow_dispatch: 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v3 11 | - name: Set up Ruby 3.1 12 | uses: ruby/setup-ruby@v1 13 | with: 14 | ruby-version: '3.1' 15 | - name: Update lastUpdated 16 | run: | 17 | gem install octokit 18 | rake lastUpdated 19 | env: 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | - name: push 22 | run: | 23 | git config --global user.name 'Sketch Developer' 24 | git config --global user.email 'developer@sketch.com' 25 | git add plugins.json 26 | git commit -am 'content: Update lastUpdated' --allow-empty 27 | git push 28 | -------------------------------------------------------------------------------- /.github/workflows/update-readme.yml: -------------------------------------------------------------------------------- 1 | name: Update README 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - plugins.json 9 | workflow_run: 10 | workflows: ["Update lastUpdated"] 11 | types: 12 | - completed 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | - name: Set up Ruby 3.1 19 | uses: ruby/setup-ruby@v1 20 | with: 21 | ruby-version: '3.1' 22 | - name: Update README 23 | run: rake readme 24 | - name: push 25 | run: | 26 | git config --global user.name 'Sketch Developer' 27 | git config --global user.email 'developer@sketch.com' 28 | git add README.md 29 | git commit -am 'content: Update README' 30 | git push 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | clones 2 | vendor 3 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | To add a new plugin to the directory: 4 | 5 | 1. Fork the repo (create a new branch as well if you want) 6 | 1. Modify `plugins.json` by adding your plugin (do not edit `README.md`, it will be automatically generated once your change is merged) 7 | 1. Push your changes to your fork and [submit a pull request](https://github.com/sketchplugins/plugin-directory/compare/) 8 | 9 | Thanks in advance! 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sketch Plugin Directory 2 | 3 | A list of Sketch plugins hosted at GitHub, in alphabetical order. 4 | 5 | **Note:** if you want to add yours, just send a pull request, or use [skpm](https://skpm.io) to develop it (skpm takes care of publishing automatically). Once your plugin is added here, it will appear on [the website](https://sketchapp.com/extensions/plugins) as soon as we make a new deploy (that can take anywhere from a few minutes to a few days) 6 | 7 | - [10th Anniversary](https://github.com/bomberstudios/10th-anniversary), by Ale M: Celebrate Sketch's 10th Anniversary with a trip down memory lane 8 | - [AEUX](https://github.com/google/sketch2ae), by Battle Axe: Transfer layer to After Effects 9 | - [Android Res Export](https://github.com/ashung/android_res_export), by Ashung Hung: Export Android resouces in Sketch, include PNG assets, app icon, nine-patch image and vector drawable. 10 | - [Angle](https://angle.sh), by MengTo: Apply perspective transforms on screen mockups. Auto-detect screens by resolution and works on shapes and symbols. Super fast. 11 | - [Annotations](https://github.com/BaguetteEngineering/annotations-sketch-plugin), by Baguette Engineering: Hide/show layer groups named 'Annotations'. 12 | - [Anto](https://github.com/canisminor1990/anto), by CanisMinor: Sketch Tools for AFX Designers 13 | - [App Asset Export](https://github.com/work4blue/sketch-app-asset-export), by Andrew Huang: Sketch3 plugin, One key export Android/iOS App icons. 14 | - [Appalette](https://github.com/carlosarturo28/appalette), by Carlos Navarro: A Sketch plugin that let you find the color palette of (almost) any App. 15 | - [areanow](https://github.com/norman-woz/areanow), by norman-woz: Get the total area of selected rectangle layers. 16 | - [Arrange Artboards Hierarchically](https://github.com/oodesign/arrange-artboards-hierarchically), by oodesign: Sketch.app plugin to arrange artboards hierarchically depending on their name (based on the Sketch Slash naming pattern). 17 | - [Artboard History](https://github.com/jan-patrick/sketch_artboard-history), by Jan Schneider: A Sketch plugin to switch faster between your latest artboards. 18 | - [Artboard Manager](https://github.com/bomberstudios/artboard-manager#readme), by Ale Muñoz: Because moving artboards manually is *so* 2016. 19 | - [Artboard Tools](https://github.com/frankko/artboard-tools), by Frank Kolodziej: Sketch.app plugins for arranging artboards and navigating between artboards. 20 | - [Artboard Tricks](https://github.com/romannurik/sketch-artboardtricks), by Roman Nurik: Artboard Tricks plugin for Sketch 21 | - [Atlassian Vendor Sketch Plugin](https://github.com/atlassian/sketch-plugin), by Atlassian Design: Design your next Atlassian app with our component libraries and suite of Sketch tools 💎 22 | - [Automate Sketch](https://github.com/ashung/automate-sketch), by Ashung Hung: Make Sketch more efficient. A lot of useful plugins in one. 23 | - [Awesome Ipsums](https://github.com/inVoltag/awesome-ipsums), by Aurélien Grimaud: Generate ipsums from an external Google spreadsheet. Make these datas collaborative! 24 | - [Batch Create Symbols](https://github.com/demersdesigns/sketch-batch-create-symbols), by Paul Demers: A plugin for Sketch to convert selected layers to individual symbols. 25 | - [betterTypePanel](https://github.com/KevinGutowski/betterTypePanel), by Kevin Gutowski: A sketch plugin to help manage common OpenType properties 26 | - [BillUI](https://github.com/SimonTakman/BillUI), by Carl Albertsson & Simon Takman: Interactive artificial evolutionary tool in order to help you come up with design suggestions that are similar to your initial design. 27 | - [BlobMaker](https://github.com/Rawnly/blobmaker_sketch), by Federico Vitale: Generate blobs with ease 28 | - [Blush](https://blush.design), by Blush Design, Inc.: Create and customize illustrations in your designs with Blush. Just choose a collection, pick a composition, and place it on the canvas. 29 | - [Bold It](https://github.com/ysjn/bold-it), by ysjn: Bold-it is a super simple plugin that bolds user-specified keyword in selected text layers. 30 | - [Brandfetch](https://github.com/Brandfetch/Brandfetch-Sketch-Plugin), by Brandfetch: Pull brand assets into Sketch 31 | - [Brandfolder](https://github.com/brandfolder/sketch-plugin-brandfolder), by brandfolder: Easily use your digital assets from Brandfolder right within your favorite platform for digital design! 32 | - [BRData](https://github.com/jonathasbsouza/brdata), by Jônathas Souza: Gerador de dados contextualizados com a realidade brasileira. 33 | - [Browser Preview](https://github.com/lukasoppermann/browser-preview), by Lukas Oppermann: Quickly preview an artboard in your browser. 34 | - [Case Converter](https://github.com/ozgurgunes/Sketch-Case-Converter), by Özgür Güneş: Convert text layers, symbols or all instances of a symbol. 35 | - [Check Contrast](https://github.com/lifeofmle/check-contrast), by Michael Le: Allows you to select layers in Sketch and get realtime feedback about the contrast ratio 36 | - [Chemfill](https://github.com/ahadik/chemfill), by Alexander Hadik: A Chemical Structure data supplier plugin. 37 | - [Chippen Charts](https://github.com/smallmultiples/sketch-chippencharts), by Martin von Lupin: Bar chart creator for your mockups using random data. Change the size of selected rectangles. Works for both horizontal and vertical bar charts. Made with love in Chippendale. 38 | - [Chromata](https://github.com/vladimir-ionita/Chromata), by Vladimir Ionița: Find rogue colors 39 | - [Cloudinary Plugin](https://github.com/cloudinary-devs/cloudinary-sketch-plugin), by Maya Shavin: Cloudinary plugin for Sketch projects 40 | - [Coding Toolkit](https://github.com/Coding/coding-sketch-toolkit), by tankxu: A series of commands for CODING designers. 41 | - [Collapse All Artboards And Groups](https://github.com/littlebusters/Collapse-All-Artboards-and-Groups), by littlebusters: Collapse all artboards and groups in the current document. 42 | - [Color Copy Paste](https://github.com/sonnylazuardi/color-copy-paste), by Sonny Lazuardi Hermawan: 43 | - [Color Variables Migrator](https://github.com/sketch-hq/color-variables-migrator), by Sketch: Migrate your Layers and Styles to use Color Variables 44 | - [Colormate](https://github.com/themainingredient/colormate), by The Main Ingredient: Colormate is a kickass sketch plugin that will help you figure out how in the hell you ended up with 457 different greys, instead of the 1 grey Mandy gave you in the handover. Oops :flushed: 45 | - [Colors → Code](https://github.com/Sugarcode-Team/colors-to-code-sketch-plugin-live), by Sugarcode: Export Colors as organized Stylesheets for Android, CSS, Less, SCSS, Sass, React, ReactNative, Stylus, PostCSS and CSS Crush. 46 | - [Connection Flow Arrows](https://github.com/faridsabitov/Sketch-Connection-Flow-Arrows), by Farid Sabitov: Plugin for generating easy to use connection flow arrows in Sketch 47 | - [Context](https://github.com/afnizarnur/context-sketch-plugin), by Afnizar Nur Ghifari: Count character, words, and paragraphs from a text layer easily inside Sketch! 48 | - [Contrast](https://github.com/romannurik/Sketch-Contrast#readme), by Roman Nurik: A Sketch plugin to show a pass/fail type contrast report. 49 | - [Copy Framer Code](https://github.com/perrysmotors/copy-framer-code), by Giles Perry: A Sketch plugin that copies any selected layer to the clipboard as code that can be pasted straight into a Framer prototype. 50 | - [Copy Optimized SVG Code](https://github.com/chenxsan/copy-optimized-svg-code), by chenxsan: Sketch plugin to copy optimized svg code 51 | - [Copy Paste Position & Size](https://github.com/ajilderda/sketch-copy-paste-position-size), by Andre Jilderda: A Sketch plugin that lets you easily copy & paste width, height, x & y values from and to objects 52 | - [Copy Updater](https://github.com/lizhengDesign/Sketch-CopyUpdater), by Li Zheng: A Sketch plugin that updates copy based on selected JSON 53 | - [copycat](https://github.com/azhsetiawan/sketch-copycat), by Ashar Setiawan: sketch plugin 54 | - [CreatoCode](https://github.com/CreatoCode/CreatoCodeSketchPlugin), by flashgeek: 将设计稿转化代码,创意无缝连接现实。 55 | - [Crowdin for Sketch](https://github.com/crowdin/sketch-crowdin), by Crowdin: Localize the UI before programming starts. Translate and preview any design with ease 56 | - [css to Shadow Style](https://github.com/oliverpitsch/CSS-Shadow-to-Sketch-Style-Plugin), by Oliver Pitsch: CSS box-shadow to Layer Style Converter 57 | - [Csv Mail Merge](https://github.com/jdwolk/sketch-csv-mailmerge), by JD Wolk: A lightweight Sketch plugin for importing data from .csv files using "{}" text sections. 58 | - [Dad Jokes](https://github.com/domhabersack/sketch-dadjokes), by Dom Habersack: Replace your text with dad jokes. 59 | - [Dark Side](https://github.com/receptiryaki/darkside), by Recep Tiryaki: Design light and dark themes easily. Switch between themes. Export color assets for Xcode and Android Studio. 60 | - [DarkModeSystem](https://github.com/BDiogo/DarkMode-System), by BDiogo: Apply a Dark Theme to your Project 61 | - [Data From Clipboard](https://github.com/Saint-loup/data-from-clipboard), by Saint-loup: A DataSupplier plugin 62 | - [Datazier Lens](https://github.com/enriquezgomez/datazier-lens), by Victor Enriquez: Inspect and sort your local font book 63 | - [DatesFromNow](https://github.com/LeipeLeon/Sketch_DatesFormNow), by Leon Berenschot: Simple data plugin to fill dates from now 64 | - [ddSpiral](https://github.com/Design-Dude/ddSpiral), by Mek van’t Hoff: Magically shape almost any kind of 🌀 spiral. 65 | - [Design Tokens](https://github.com/design-meets-development/design-tokens-plugin), by Andreas Koutsoukos: A Sketch plugin that exports design Tokens to JSON format. You can export colors, typography, icons and utilis. A must-have tool for design system project. 66 | - [Detach Out of Sync Text Styles](https://github.com/tijmenvangurp/detach-out-of-sync-text-styles), by Tijmen van Gurp: Detach all out of sync text styles from a chosen sketch library. 67 | - [Disconnector](https://github.com/njcrowther/Disconnector), by Nathan Crowther: Quickly disconnect all symbols from a selection 68 | - [DuplicateLater](https://github.com/KevinGutowski/Duplicate-Later), by Kevin Gutowski: Duplicate layers in the same direction after duplicating (like in Figma). 69 | - [Elevation Shadows](https://github.com/YitingLiu/Elevation-Shadows), by Yiting Liu: A Sketch Plugin to apply consistent Elevation Shadows 70 | - [Emoji Autocomplete Sketch Plugin](https://github.com/zeplin/emoji-autocomplete-sketch-plugin), by Zeplin: While editing Sketch text layers, type “:” followed by the first few letters to autocomplete emojis. 🍒 71 | - [Export Flat Svgs](https://github.com/KevinGutowski/ExportFlatSVGs), by Kevin Gutowski: Flatten text within SVGs on export. 72 | - [Export King Plugin](https://github.com/hecflores/export-king-plugin), by hecflores: A Sketch Plugin that provides exporting for any scenario 73 | - [Export to Proto.io](https://proto.io), by Proto.io: Give life to your Sketch designs! Export all or selected artboards to Proto.io screens, preserving layer positioning and hierarchy. By exporting to Proto.io you can link screens together, add interactions and animations. 74 | - [File Cleaner](https://github.com/monzo/file-cleaner), by Monzo: Keep your Sketch files immaculately clean and in order. 75 | - [Fill Updater](https://github.com/lizhengDesign/Sketch-FillUpdater), by Li Zheng: Fill shapes or symbols with content of selected artboards. 76 | - [Find And Replace](https://github.com/thierryc/sketch-find-and-replace), by Martin Steven. Maintained by Thierry Charbonnel: Sketch 3 plugin to do a simple find and replace on text within layers 77 | - [Find Dirty Styles](https://github.com/KevinGutowski/FindDirtyStyles), by Kevin Gutowski: A Sketch plugin to easily find layers that are out of sync with their shared styles. 78 | - [Flat Export](https://github.com/TheSonOfThomp/sketch-flat-export), by Adam Thompson: Use this plugin to batch export layers to a single folder. 79 | - [Flow Exporter](https://github.com/romannurik/Sketch-FlowExporter), by Roman Nurik: A Sketch plugin that exports prototype flows built with Sketch 49+ to HTML. 80 | - [foodreau](https://github.com/maxdavid/sketch-foodreau), by Max David: Data supplier plugin for populating designs with real food recipes. 81 | - [Frontify Plugin](https://github.com/Frontify/sketch), by Frontify: Connecting your brand and design worlds 82 | - [FS_StockSummaryFiller](https://github.com/freeman990/FS_StockInfoFiller), by Freeman Sun: 一系列关于股票数据的自动填充/生成工具 83 | - [Genus](https://github.com/keplerlab/genus), by Kepler Lab: A sketch plugin for exporting prototype website (static html css) from your sketch designs 84 | - [Git Sketch Plugin](https://github.com/mathieudutour/git-sketch-plugin), by Mathieu Dutour: A Git client generating pretty diffs built right into Sketch. 85 | - [Golden Ratio Grid](https://www.thegoldenratio.co.uk/plugins), by Spacestar Digital: Align your designs with evolutionary precision using a flexible golden ratio grid built to fit any screen size, any graphical need, any canvas. From graphic design to digital design. 86 | - [Gretel](https://github.com/StyleShare/Gretel), by Suyeol Jeon: A Sketch plugin that flattens files after exporting. 87 | - [GuideGuide](https://guideguide.me), by Cameron McEfee: Powerful grids and guides in your favorite design tools 88 | - [GxDesignOps](https://github.com/genexuslabs/sketchdesignops), by Gastón Milano: Sketch Plugin For GeneXus internal use 89 | - [H5Converter](https://github.com/h5mag/sketch-h5converter), by H5mag team: 90 | - [Helpify](https://github.com/Luckyfoxdesign/helpify), by Lucky Fox Design: Plugin with simple actions: Generate random numbers 91 | - [How Many Artboards?](https://github.com/eaugustine/how-many-artboards), by Erica Augustine: A Sketch plugin for counting the number of artboards in your file or on your page 92 | - [Iban Generator](https://github.com/idriesalbender/iban-sketch-plugin), by idix: Generate random International Bank Account Numbers (IBAN) 93 | - [IcanIcon](https://github.com/Sugarcode-Team/icanicon-live-sketch-plugin), by Sugarcode: icanicon.io allows you to keep your icon libraries in sync with your Design System. 94 | - [icon2React](https://github.com/jjj201200/icon2React), by DrowsyFlesh: a sketch plugin to converting icons to React Components 95 | - [Icondrop](https://github.com/iconscout/icondrop), by Iconscout: Get access to 300,000+ icons right into Sketch App 96 | - [Icons → Code](https://github.com/Sugarcode-Team/icons-to-code-sketch-plugin-live), by Sugarcode: Export Icons as vector-perfect code components for Android, React, ReactNative, Angular, Vue, TTF, EPS, PDF, Custom components and more. 97 | - [ImageCodeExporter](https://github.com/funfungo/ImageCodeExporter), by funfungo: A Plugin that export your sketch layer for code usage 98 | - [imgcook](https://www.imgcook.com), by Taobao FED: A cook who can transform design to code 99 | - [Import SVG as Artboards](https://github.com/mathieudutour/import-svg-as-artboard), by mathieudutour: Import SVG files as Artboards. 100 | - [Import Colors](https://github.com/Ashung/import-colors-sketch), by Ashung: Import colors from swatches file to Sketch. 101 | - [Install Library Bundle](https://github.com/bomberstudios/install-library-bundle), by Ale Muñoz: Installs a bunch of shared Sketch Libraries at once, because life is too short for clicking links. 102 | - [Inter Letter Spacing](https://github.com/giliamverheide/sketch-inter-letter-spacing), by Giliam Verheide: Sketch plugin that dynamically sets letter spacing of layers using the Inter font. 103 | - [Inter UI Character Spacing](https://github.com/qruzz/InterUI-Character-Spacing), by Michael Nissen: Package to correct the character spacing for the InterUI font in Sketch 104 | - [iOS2Sketch](https://www.design-code.app/docs), by DesignCodeApp: Import App Screens to Sketch 105 | - [Isometry](https://github.com/maxkonovalov/Isometry), by Max Konovalov: Create isometric projections from layers 106 | - [Justinmind Sketch](https://github.com/justinminddevelopment/justinmind-sketch), by Justinmind: You can export artboards, layers and pages you’ve made in Sketch to Justinmind and turn them into interactive shareable prototypes. 107 | - [Kitchen](https://github.com/ant-design/kitchen), by Ant-Design: Make your design work delicious 🍽 108 | - [labelizer](https://github.com/nOograss/labelizer), by Maxime Peeters: Extract, replace and download labels from Sketch file. 109 | - [Last Updated Indicator](https://github.com/bvmensvoort/sketch-last-updated), by Bram van Mensvoort: Mark your designs with a version indicator which automatically changes as you update. 110 | - [LaTeX Sketch Plugin](https://github.com/heytitle/latex-sketch-plugin), by heytitle: This plugin brings LaTeX functionalities to Sketch, and allows us to directly write mathematical formulas 111 | - [Layers to X](https://github.com/asp55/sketch-plugin-layers-to-x), by Andrew S. Parnell: Quickly turn layers into groups, artboards, and symbols. 112 | - [lazyboards](https://github.com/lazybearcreations/sketch-lazyboards), by Adam Bruzon: Artboard tools to help you with tedious batch tasks. 113 | - [Library Replacer](https://github.com/sketch-hq/library-replacer-sketchplugin), by Sketch: Quickly replace instances of shared Symbols and Styles. 114 | - [Library Inventory](https://github.com/tijmenvangurp/library-inventory), by Gurp, Tijmen van: List all symbols that a selected document is using from an external library 115 | - [Light Switch](https://github.com/TheBerriman/lightswitch-sketch), by Samuel Berriman: Toggle between Light or Dark symbols and text/layer styles. 116 | - [Light/dark Switch](https://github.com/chaos-machine/switch-theme), by Tudor Teisanu: Switch artboards' theme 117 | - [lippy](https://github.com/abynim/lippy), by Aby Nimbalkar: An interactive lorem ipsum generator plugin for Sketch 118 | - [Live Planet Sketch Datasupplier](https://github.com/Craigtut/liveplanet-sketch-datasupplier), by Craig Tuttle: Supply's real data from Live Planet's API to Sketch for testing designs 119 | - [Live Preview](https://kylehalevi.com/live-preview), by Kyle Halevi: Wirelessly mirror Sketch artboards on iPhone and iPad, with pixel–perfect rendering. 120 | - [Logo Fetcher](https://github.com/soulchild/sketch-logo-fetcher), by Tobi Kremer: Place logos from either the Logos API (SVG format) or Clearbit API (PNG format) 121 | - [Lokalise Plugin](https://github.com/lokalise/lokalise-sketchplugin), by Lokalise: Deliver multilingual assets faster and smarter. Share context with your linguists, get early feedback about each market and preview the design in all languages. 122 | - [Looper](https://github.com/sureskumar/looper), by Sures Kumar: Looper helps automate duplication of groups and layers. One can control properties like Rotate, Scale and Opacity while duplicating. This powerful combination enables artists and designers to create interesting geometric and organic patterns. 123 | - [MarginSymbols](https://github.com/griffin-stewie/MarginSymbols), by griffin-stewie: 124 | - [Merge Duplicate Symbols](https://github.com/oodesign/merge-duplicate-symbols), by oodesign: Merge symbols or styles, replacing all instances and keeping overrides. 125 | - [Mesh Gradients](https://github.com/oodesign/mesh-gradients), by oodesign: Create awesome mesh gradients, right inside of Sketch. 126 | - [Metaball](https://github.com/mheesakkers/sketch-plugin-metaball), by mheesakkers: A simple plugin to draw shapes based on inner and outer tangents between two circles. 127 | - [Miro Plugin for Sketch](https://github.com/miroapp/sketch_plugin), by Miro: Add, share and discuss your Sketch artboards with the team in Miro. The plugin allow to sync the artboards with the boards in one click 128 | - [Mise En Place](https://github.com/madwaro/MiseEnPlace), by Carlos Madrigal: Mise En Place is a Sketch plug-in that helps you prep before you start cooking your designs. 129 | - [Mugsy](https://github.com/jan-patrick/sketch_mugsy), by jan-patrick: 130 | - [Mupixa](https://github.com/mupixa/sketch-plugin-mupixa), by www.mupixa.com: Mupixa allows you to leverage the full potential of your prototypes by conducting usability research fast and effortlessly. 131 | - [Omnis Skeleton Generator](https://github.com/taohsu/skeletongenerator), by taohsu: Generate skeleton/placeholder UI from the selected components 132 | - [Orbison](https://github.com/ilikescience/orbison), by ilikescience: A Sketch plugin for Bitly's product design system 133 | - [Organize Layers](https://github.com/eunicejson/organizeLayers), by Eunice J. Son: A plugin that allows short key commands to move layers up, down and reverse positions ↕️ 134 | - [Outsystems ui Plugin](https://github.com/HiInteractive/OutSystemsUIPlugin), by Pedro Oliveira: 135 | - [Overflow](https://overflow.io), by proto.io: Overflow is the world’s first user flow diagramming tool tailored for designers. It empowers designers to design, present and share beautiful user flow diagrams that tell a story. 136 | - [Overlay](https://overlay-tech.com?ref=sketch-plugin), by Overlay: Overlay transforms your Sketch symbols into clean and reusable code in ReactJS, Vue.js and Vanilla HTML. 137 | - [Paddy](https://github.com/dwilliames/paddy-sketch-plugin), by David Williames: Automated padding, spacing and alignment for your Sketch layers 138 | - [Palette Stripes](https://github.com/sureskumar/palette-stripes), by Sures Kumar: Generate palette stripes in sketch from shape fills. 139 | - [Paste Paddings](https://github.com/simonlidesign/pastePaddings), by simonlidesign: Allows you to copy the paddings of one element and apply them to another 140 | - [Paste to Fill](https://github.com/tgfjt/sketch-paste-to-fill#readme), by tgfjt: Paste your image from clipboard, to fill layer. 141 | - [Perfect Type](https://github.com/rtrikha/perfect-type-plugin), by Raunak Trikha: 142 | - [PersianSupplier](https://github.com/hiradary/persiansupplier), by Hirad Arshadi: Sketch Plugin for supplying dynamic persian data. 143 | - [Phosphor Icons](https://phosphoricons.com), by Tobias Fried: A flexible icon family for interfaces, diagrams, presentations — whatever, really. 144 | - [Photo Grid](https://github.com/perrysmotors/photo-grid), by Giles Perry: A Sketch plugin that can size layers to common photo dimensions and scale them to fit in a row. 145 | - [Phrase Strings Plugin](https://phrase.com/integrations/sketch/), by Phrase: Start localization during the design phase. Easily preview your designs in multiple languages and optimize your UI for all markets with the Phrase Strings plugin. 146 | - [picasso](https://github.com/wuba/Picasso), by huangwencun: Picasso是58同城推出的一款sketch生成代码插件,可将sketch设计稿自动解析成还原精准,可用度高的前端代码 147 | - [PinIt](https://github.com/acollurafici/PinIt), by Anthony Collurafici: A collection of Resizing Shortcuts. 148 | - [Pixel Perfect](https://github.com/materik/sketchplugin-pixelperfect), by Mattias Eriksson: Plugin for Sketch for handling layout and sizing of layers automatically based on their names. 149 | - [Place Linked Bitmap](https://github.com/frankko/place-linked-bitmap), by Frank Kolodziej: A plugin to place external bitmap files into Sketch and update Sketch layers after external bitmaps are updated 150 | - [Plugin List](https://github.com/griffin-stewie/PluginsList), by griffin-stewie: Sketch Plugin that gives you list of plugins you enabled as several text formats. 151 | - [Plugin Reloader](https://github.com/TheNounProject/SketchPluginReloader), by Wes Byrne: A simple plugin to reload another plugins 152 | - [Potrace](https://github.com/perrysmotors/sketch-potrace), by Giles Perry: Convert bitmaps to vector graphics 153 | - [projecthuddle](https://github.com/ajgagnon/projecthuddle-sketch-sync), by Andre Gagnon: 154 | - [Prototypes Invision ↔︎ Sketch](https://github.com/mathieudutour/prototypes-invision-sketch), by mathieudutour: Translate your prototyping links back and forth between Sketch and Invision 155 | - [Puzzle Publisher](https://github.com/ingrammicro/puzzle-publisher), by Ingram Micro: Exports Sketch artboards into linked HTML files and publish it on external site using SFTP. 156 | - [Puzzle Tokens](https://github.com/ingrammicro/puzzle-tokens), by Ingram Micro: Sketch.app plugin to apply design tokens to Sketch layers 157 | - [QuickTextOverride](https://github.com/dbilyk/QuickTextOverride), by Dmitri Bilyk: Use a key command to target the first text override of a symbol. 158 | - [Quopi](https://github.com/LukeFinch/Quopi), by Luke Finch: Fetches copy from the comments on your Abstract branch 159 | - [Random Color Sketch](https://github.com/yunser/random-color-sketch), by “cjhgit”: 160 | - [Remove.bg](https://github.com/mathieudutour/sketch-remove-bg), by Mathieu Dutour: Remove image background in a single click 161 | - [Rename Layers Based On Textstyle](https://github.com/tbrasington/rename-layers-based-on-textstyle), by Thomas Brasington: Renames text layers in the current page based on their text style name 162 | - [Rename Text Layers by Style](https://github.com/okaybueno/rename-text-layers-by-style), by Alexander Gerund: Rename all text layers based on the name of the text style assigned. 163 | - [represent.](https://github.com/swipecircus/represent), by Swipe Circus: Present your UX/UI Designs lightning fast on client's devices without leaving Sketch. 📲 164 | - [Reset Image Aspect Ratio](https://github.com/perrysmotors/reset-image-aspect-ratio), by Giles Perry: A Sketch plugin that resets the aspect ratio of selected images. 165 | - [Roller by Toybox](https://github.com/toyboxsystems/roller), by Jono Kolnik: Roller is the first Linter for Designers. It works just like spell-check but within your Sketch files. 166 | - [Rough](https://github.com/mathieudutour/rough-sketch), by mathieudutour: Transform your shapes in a sketchy, scribbly, hand-drawn-like, style. 167 | - [Scale All in Place](https://github.com/delighted/sketch-scale-all-in-place), by Delighted Inc.: Scale all in place: Resize all selected shapes or layers, in place, from center. 168 | - [Segmented Circle](https://github.com/design4use/gb-sketch-segmentcircle), by German Bauer: Create precise segmented circular graphics for diagrams, instrumentation and analytics. 169 | - [Sequence Artboard Names](https://github.com/tbrasington/Sequence-Sketch-Artboards), by Thomas Brasington: Simple sequencing of all artboards within a Sketch Document 170 | - [Shared Styles Hierarchy](https://github.com/mathieudutour/sketch-styles-hierarchy), by Mathieu Dutour: Organize your shared styles using the layers list, create a hierarchy where children inherit properties from their parent. 171 | - [Single Border](https://github.com/sureskumar/single-border), by Sures Kumar: Add single borders with advanced controls. 172 | - [Sketch a Sketch](https://github.com/mathieudutour/sketch-a-sketch), by Mathieu Dutour: Bringing the iconic knobs from the famous toy to Sketch. 173 | - [Sketch Action](https://github.com/onmyway133/sketch-action), by Khoa Pham: Spotlight in Sketch 174 | - [Sketch Auto Translate](https://github.com/symdesign/sketch-auto-translate), by Friedrich Schultheiss: Plugin to translate Sketch files into via Google Translate. 175 | - [Sketch Chat](https://github.com/mathieudutour/sketch-chat), by Mathieu Dutour: A Sketch plugin to chat in Sketch Cloud files 176 | - [Sketch Color Manager](https://github.com/hecflores/sketch-color-manager), by hecflores: Sketch Plugin to manage all rogue colors in the sketch, along with other styling properties 177 | - [Sketch Copy Text Only](https://github.com/explorador/sketch-copy-text-only), by Cristian: Sketch plugin to copy only the text from selected artboard(s) or layer(s) 178 | - [Sketch Dark Mode](https://sketch-dark-mode.eduardogomez.io), by Eduardo Gómez: Generate a dark mode version of any document, the right way. 179 | - [Sketch Data Faker](https://github.com/paintedbicycle/sketch-data-faker), by paintedbicycle: A Sketch data plugin providing data for you mockups from Faker.js 180 | - [Sketch Data Populator](https://datapopulator.com), by precious design studio: A Sketch App plugin to populate your documents with meaningful data. Goodbye Lorem Ipsum. Hello JSON. 181 | - [Sketch DevTools](https://github.com/skpm/sketch-dev-tools), by skpm: See your plugin logs, inspect the state of Sketch documents, explore actions, and more 182 | - [Sketch Export Preferences](https://github.com/KevinGutowski/Sketch-Export-Preferences), by Kevin Gutowski: Import and Save Sketch Export Preferences 183 | - [Sketch Flow](https://github.com/hite/Sketch-Flow), by hite: Make Icon Slicing simple for app developers! 184 | - [Sketch Groupie](https://github.com/aparajita/sketch-groupie), by Aparajita Fishman: Sketch plugin providing commands to align layers with their parent group 185 | - [Sketch Guides](https://github.com/luvmex/sketch-guides), by Celyn Xie: Add Guides to edges and midpoints at once. 186 | - [Sketch Iconscope](https://github.com/ziven27/sketch-iconscope), by ziven27: Wrap the Icon with a square(4n) scope. 187 | - [Sketch Invert Fills](https://github.com/icona79/sketch-invert-fills), by Matteo Gratton: Invert fills beween 2 selected layers 188 | - [Sketch Ipsum](https://github.com/sketch-hq/sketch-ipsum), by Sketch: A DataSupplier plugin that fills your text layers with random Lorem Ipsum 189 | - [Sketch Isometric](https://github.com/sureskumar/sketch-isometric), by Sures Kumar: Generate Isometric views from Artboards and Rectangles. 190 | - [Sketch Layer Comps](https://github.com/ozgurgunes/sketch-layer-comps), by Özgür Güneş: A plugin which saves and applies layer states to create different compositions of current page. 191 | - [Sketch Library Unlinker](https://github.com/perrysmotors/sketch-library-unlinker), by Giles Perry: Unlink symbols linked to a specific library, or unlink symbols that have been deleted in their libraries. 192 | - [Sketch Lineout](https://github.com/icona79/sketch-lineout), by Matteo Gratton: Lineout your artboards for handoff preview 193 | - [Sketch Map Generator](https://github.com/eddiesigner/sketch-map-generator), by Eduardo Gómez Vásquez: Plugin to fill a layer with a map generated from a location (Powered by Google Maps) 194 | - [Sketch Material](https://github.com/websiddu/sketch-material), by Siddhartha Gudipati: Sketch material is a sketch plugin that will help you generate complex material components like tables, chips, forms etc… 195 | - [Sketch Md3 Color Palettes](https://github.com/icona79/sketch-m3-color-palettes), by Matteo Gratton: With this plugin you can import Material Design themes from the tokens generated with the Material Theme Builder 196 | - [Sketch Meaxure](https://github.com/qjebbs/sketch-meaxure), by utom & jebbs: Make it a fun to create spec for developers and teammates 197 | - [Sketch Move Half Pixel](https://github.com/canisminor1990/sketch-move-half-pixel), by Canis Minor: 🐾 Move layers half pixel 198 | - [Sketch Name Organizer](https://github.com/canisminor1990/sketch-name-organizer), by Canis Minor: 🖌 Rename artboards based on their x and y position; Rename layers based on their Style and Symbol. 199 | - [Sketch Pexels](https://github.com/pexels/pexels-sketchplugin), by Pexels: A Pexels plugin for Sketch 200 | - [Sketch Play](http://sureskumar.com/sketchplay/), by Sures Kumar: Create game plays directly from Sketch app. 201 | - [Sketch Plugin Snap to 8pt Grid](https://github.com/mheesakkers/sketch-plugin-snap-to-8pt-grid), by Misha: A Sketch plugin which helps with snapping layer properties to the 8 point grid. 202 | - [Sketch QR Code](https://github.com/lerte/sketch-qr-code), by Lerte Smith: A Plugin for generate SVG QR Code in Sketch app. 203 | - [Sketch Select](https://github.com/canisminor1990/sketch-select), by Canis Minor: Make it much more convenient to select layers with similar attributes. 204 | - [Sketch Snap](https://github.com/charliecm/sketch-snap), by Charlie Chao: A Sketch plugin that lets you snap layers below, above, left of or right of selected layer to one of its edges. 205 | - [Sketch Style Master](https://github.com/aparajita/sketch-style-master), by Aparajita Fishman: Sketch plugin for renaming shared styles 206 | - [Sketch Styler](https://github.com/oodesign/sketch-styler), by oodesign: Assigns styles automatically to all of your unstyled layers. 207 | - [Sketch Symbol Legend](https://github.com/wix-incubator/sketch-symbol-legend), by WIX Incubator: Legend for your Sketch Symbols. 208 | - [Sketch Sync](https://sensive.co), by Sensive: Create a collaboration hub for your Sketch files. 209 | - [Sketch Times](https://github.com/xaddict/sketch-times), by Luuk Lamers: A DataSupplier plugin to get Times 210 | - [Sketch Title Case](https://github.com/hemmingsson/sketch-title-case), by Mattias Hemmingsson: Sketch Plugin to make text Title Case 211 | - [Sketch Tokens Exporter](https://github.com/icona79/sketch-design-tokens-exporter), by Matteo Gratton: With this plugin you can export to your desktop a design-tokens.json file compatible with Amazon Style Dictionary. 212 | - [Sketch Topographic](https://github.com/ziven27/Sketch-topographic), by ziven27: Display Topographic Information 213 | - [Sketch Wakatime](https://github.com/wakatime/sketch-wakatime), by WakaTime: A Plugin to update your WakaTime stats automatically from Sketch. 214 | - [Sketch Easing Gradients](https://github.com/larsenwork/sketch-easing-gradient), by larsenwork: Supercharge your gradients in Sketch with no-linear color mix and custom color spaces 215 | - [Sketch Export to](https://github.com/mascardoso/sketch-export), by Marco Cardoso: Export an artboard layers to json or markdown 216 | - [Sketch Foundation](https://github.com/13protons/sketch-foundation), by Alan Languirand: Toggle layer visibility for all matching layer names on any artboard to create foundational layers like notes and guides more manageable. 217 | - [Sketch Ignore](https://github.com/theboi/sketch-ignore), by Ryan The: s 218 | - [Sketch json](https://github.com/arvinxx/sketch-json), by arvinxx: a plugin to transfer sketch JSON into sketch Object 219 | - [Sketch Parser Plugn](https://github.com/Dilomen/schema-sketch-parser), by dilomen: Sketch设计稿数据解析 220 | - [Sketch Share](https://github.com/robflaherty/sketch-share), by Rob Flaherty: Sketch plugin that exports artboards and generates an HTML file linking to each one 221 | - [Sketch Table Builder](https://github.com/EricKramp/sketch-table-builder), by Eric Kramp: Quickly and easily use a single symbol and a CSV to create a data table. 222 | - [Sketch Tailwind](https://github.com/jan-dh/sketch-tailwind), by Jan D'Hollander: Export your design to a theme-file you can use in your Tailwind Css config. 223 | - [Sketch Webgl](https://github.com/endswithak/sketch-webgl), by endswithak: 224 | - [SketchContentSync](https://github.com/contentsync/sketchcontentsync), by ContentSync: Sync sketch files with google docs. 225 | - [Slint](https://github.com/nusability/slint), by Johannes Nanninga: A linter for Sketch files 226 | - [SmartTable](https://github.com/Penndo/smartTable), by Penndo: 227 | - [Snatch](https://github.com/ZhichengChen/snatch), by ZhichengChen: Sketch plugin which upload layer to CDN directly. 228 | - [Stark](http://www.getstark.co), by Stark Lab, Inc.: Ensure your design is accessible and high contrast for every type of color blindness. 229 | - [States](https://github.com/edenvidal/states), by Eden Vidal: Create different artboard states and switch between them easily 230 | - [Stickers](https://github.com/romannurik/Sketch-Stickers), by Roman Nurik: A Sketch plugin that lets you browse and quickly drag+drop stickers (specially tagged layers) in your Sketch Libraries. 231 | - [stuffing](https://github.com/Ashung/Sketch-Stuffing), by Ashung: A DataSupplier plugin which supplies chinese data. 232 | - [Super Shapes](https://github.com/sureskumar/super-shapes), by Sures Kumar: Generate complex organic super-shapes using super formula. 233 | - [SVG Bem](https://github.com/mLihs/svg-bem), by mLihs: A Plugin for SVG export to convert IDs to Classes, create BEM Styled Naming Based on Layers. Uses SVGO to compresse and Clean up SVGs, right when you export them. Based on the SVGO Compressor Plugin 234 | - [SVGO Compressor](https://sketch.com/extensions/plugins/svgo-compressor/), by Sketch BV: A Plugin that compresses SVG assets using SVGO, right when you export them. This Plugin requires Sketch 3.8. 235 | - [Symbol and Artboard Organizer](https://github.com/myrronth/symbol-and-artboard-organizer), by Myrronth: Organize your symbols and artboards. 236 | - [Symbol Finder](https://github.com/afifkhaidir/symbol-finder), by afifkhaidir: Finder-like interface for browsing and inserting local symbols in Sketch 237 | - [Symbol Instance Locator](https://github.com/sonburn/symbol-instance-locator), by Jason Burns: Locate all instances of a selected symbol or instance. 238 | - [Symbol Master Renamer](https://github.com/miguelangelnarvaezgo/symbol-master-renamer), by Miguel Angel Narvaez: Simple plugin to rename and organizing the master symbols with '/'. 239 | - [Symbol Namer](https://github.com/perrysmotors/symbol-namer), by Giles Perry: A plugin to help you rename symbols. Save default values, use override text, and do powerful, pattern-based renaming. 240 | - [Symbol States](https://github.com/ozgurgunes/Sketch-Symbol-States), by Ozgur Gunes: A Sketch plugin which saves overrides of a symbol instance as states to be applyable on another instance of that symbol later. 241 | - [Symbol Swapper](https://github.com/sonburn/symbol-swapper), by Jason Burns: Swap the selected symbols and/or symbol instances to a master of the same name in a library. 242 | - [Symbol Insert](https://github.com/lifeofmle/symbol-insert), by Michael Le: Simple plugin to insert Sketch symbols 243 | - [Symbol Overlay Toggle](https://github.com/uxcourt/overlaytoggler), by uxcourt: A Sketch plug-in to seek specific style names in library-sourced symbols and toggle the styles. 244 | - [SymbolNameAutocomplete](https://github.com/griffin-stewie/symbolnameautocomplete), by griffin-stewie: This plugin gives you autocompletion of symbol names when creating a symbol. 245 | - [SymbolNameSync](https://github.com/griffin-stewie/symbolnamesync), by griffin-stewie: This plugin gives you syncing names between Symbol masters and its instances. 246 | - [Sync with Library](https://github.com/oodesign/sync-with-library), by oodesign: Easily replace local symbols and layer & text styles with library ones. 247 | - [Text to Styles](https://github.com/tbrasington/text-to-styles), by Thomas Brasington: Generates Sketch type styles programmatically from Artboards 248 | - [Tidy](https://github.com/gbrunow/tidy), by Gui Brunow Gomes: Keep your sketch files Tidy. 249 | - [Tinty](https://github.com/chewbecky/tinty), by chewbecca: Sketch Plugin that lets you create tints and shades of any color as shared styles and document colors. 250 | - [TinyFaces 👦🏼👨🏾👩🏻](https://github.com/maximedegreve/tinyfaces-sketch-plugin), by Maxime De Greve: Fill content with random avatars & data 251 | - [Toggle Greyscale](https://github.com/KevinGutowski/ToggleGreyscale), by Kevin Gutowski: A Sketch plugin that adds a layer to your artboard so that you can preview your mocks in greyscale. 252 | - [Toggle Pixel Fitting](https://github.com/KevinGutowski/PixelFit), by KevinGutowski: A simple plugin to change your pixel fitting preference. 253 | - [Truncat](https://github.com/KevinGutowski/Truncat), by Kevin Gutowski: A Sketch plugin to truncate text. 254 | - [typex](https://github.com/reinvanoyen/typex), by reinvanoyen: Highly configurable text styles to web (css, sass, html, json, ...) export plugin 255 | - [uiLogos](https://github.com/realvjy/uiLogos-sketch-plugin), by vijay verma: Insert professionally designed dummy logos of companies. 256 | - [Units](https://github.com/dploeger/sketch-plugin-units), by Dennis Ploeger: A Sketch plugin for working with print units (inch, cm, mm) in Sketch's pixel world. 257 | - [Unsplash](https://www.sketch.com/extensions/plugins/unsplash/), by Sketch BV: Unsplash Data Provider plugin, for Sketch 52+. 258 | - [Whale Kit](https://github.com/jingwhale/whale-kit), by jingwhale: 259 | - [wireframr](https://github.com/chewbecky/wireframr), by chewbecca: Sketch Plugin to change your high-fidelity screendesign to simple wireframes. 260 | - [WtDesign](https://github.com/wantedly/sketch-wt-design), by Yoshinori Kawasaki: Sketch plugin for Wantedly Design System 261 | - [Zeplin](https://zeplin.io), by Zeplin: Zeplin Sketch Plugin. 262 | - [📕 PDF Export](https://github.com/dwilliames/pdf-export-sketch-plugin), by David Williames: Export all pages, current page or selected artboards into a PDF — based on a range of settings 263 | - [🕵🏻‍ Find and Replace Text](https://github.com/chriswetterman/sketch-find-and-replace-text), by Chris Wetterman: Find and replace text throughout your Sketch document 264 | 265 | 266 | ## Sorted by last update (newest on top) 267 | 268 | - [Awesome Ipsums](https://github.com/inVoltag/awesome-ipsums), by Aurélien Grimaud: Generate ipsums from an external Google spreadsheet. Make these datas collaborative! 269 | - [Place Linked Bitmap](https://github.com/frankko/place-linked-bitmap), by Frank Kolodziej: A plugin to place external bitmap files into Sketch and update Sketch layers after external bitmaps are updated 270 | - [lippy](https://github.com/abynim/lippy), by Aby Nimbalkar: An interactive lorem ipsum generator plugin for Sketch 271 | - [Brandfetch](https://github.com/Brandfetch/Brandfetch-Sketch-Plugin), by Brandfetch: Pull brand assets into Sketch 272 | - [Looper](https://github.com/sureskumar/looper), by Sures Kumar: Looper helps automate duplication of groups and layers. One can control properties like Rotate, Scale and Opacity while duplicating. This powerful combination enables artists and designers to create interesting geometric and organic patterns. 273 | - [Sketch Play](http://sureskumar.com/sketchplay/), by Sures Kumar: Create game plays directly from Sketch app. 274 | - [Super Shapes](https://github.com/sureskumar/super-shapes), by Sures Kumar: Generate complex organic super-shapes using super formula. 275 | - [Palette Stripes](https://github.com/sureskumar/palette-stripes), by Sures Kumar: Generate palette stripes in sketch from shape fills. 276 | - [Single Border](https://github.com/sureskumar/single-border), by Sures Kumar: Add single borders with advanced controls. 277 | - [Sketch Isometric](https://github.com/sureskumar/sketch-isometric), by Sures Kumar: Generate Isometric views from Artboards and Rectangles. 278 | - [Phosphor Icons](https://phosphoricons.com), by Tobias Fried: A flexible icon family for interfaces, diagrams, presentations — whatever, really. 279 | - [Miro Plugin for Sketch](https://github.com/miroapp/sketch_plugin), by Miro: Add, share and discuss your Sketch artboards with the team in Miro. The plugin allow to sync the artboards with the boards in one click 280 | - [AEUX](https://github.com/google/sketch2ae), by Battle Axe: Transfer layer to After Effects 281 | - [uiLogos](https://github.com/realvjy/uiLogos-sketch-plugin), by vijay verma: Insert professionally designed dummy logos of companies. 282 | - [📕 PDF Export](https://github.com/dwilliames/pdf-export-sketch-plugin), by David Williames: Export all pages, current page or selected artboards into a PDF — based on a range of settings 283 | - [Sketch Move Half Pixel](https://github.com/canisminor1990/sketch-move-half-pixel), by Canis Minor: 🐾 Move layers half pixel 284 | - [Stark](http://www.getstark.co), by Stark Lab, Inc.: Ensure your design is accessible and high contrast for every type of color blindness. 285 | - [Sketch Guides](https://github.com/luvmex/sketch-guides), by Celyn Xie: Add Guides to edges and midpoints at once. 286 | - [Crowdin for Sketch](https://github.com/crowdin/sketch-crowdin), by Crowdin: Localize the UI before programming starts. Translate and preview any design with ease 287 | - [Sketch Data Populator](https://datapopulator.com), by precious design studio: A Sketch App plugin to populate your documents with meaningful data. Goodbye Lorem Ipsum. Hello JSON. 288 | - [Symbol Finder](https://github.com/afifkhaidir/symbol-finder), by afifkhaidir: Finder-like interface for browsing and inserting local symbols in Sketch 289 | - [Export to Proto.io](https://proto.io), by Proto.io: Give life to your Sketch designs! Export all or selected artboards to Proto.io screens, preserving layer positioning and hierarchy. By exporting to Proto.io you can link screens together, add interactions and animations. 290 | - [Find And Replace](https://github.com/thierryc/sketch-find-and-replace), by Martin Steven. Maintained by Thierry Charbonnel: Sketch 3 plugin to do a simple find and replace on text within layers 291 | - [Paste to Fill](https://github.com/tgfjt/sketch-paste-to-fill#readme), by tgfjt: Paste your image from clipboard, to fill layer. 292 | - [Sketch Select](https://github.com/canisminor1990/sketch-select), by Canis Minor: Make it much more convenient to select layers with similar attributes. 293 | - [WtDesign](https://github.com/wantedly/sketch-wt-design), by Yoshinori Kawasaki: Sketch plugin for Wantedly Design System 294 | - [Anto](https://github.com/canisminor1990/anto), by CanisMinor: Sketch Tools for AFX Designers 295 | - [Sketch Name Organizer](https://github.com/canisminor1990/sketch-name-organizer), by Canis Minor: 🖌 Rename artboards based on their x and y position; Rename layers based on their Style and Symbol. 296 | - [Zeplin](https://zeplin.io), by Zeplin: Zeplin Sketch Plugin. 297 | - [App Asset Export](https://github.com/work4blue/sketch-app-asset-export), by Andrew Huang: Sketch3 plugin, One key export Android/iOS App icons. 298 | - [Outsystems ui Plugin](https://github.com/HiInteractive/OutSystemsUIPlugin), by Pedro Oliveira: 299 | - [Frontify Plugin](https://github.com/Frontify/sketch), by Frontify: Connecting your brand and design worlds 300 | - [Color Copy Paste](https://github.com/sonnylazuardi/color-copy-paste), by Sonny Lazuardi Hermawan: 301 | - [imgcook](https://www.imgcook.com), by Taobao FED: A cook who can transform design to code 302 | - [Sketch Style Master](https://github.com/aparajita/sketch-style-master), by Aparajita Fishman: Sketch plugin for renaming shared styles 303 | - [Sketch Tailwind](https://github.com/jan-dh/sketch-tailwind), by Jan D'Hollander: Export your design to a theme-file you can use in your Tailwind Css config. 304 | - [Sketch Pexels](https://github.com/pexels/pexels-sketchplugin), by Pexels: A Pexels plugin for Sketch 305 | - [represent.](https://github.com/swipecircus/represent), by Swipe Circus: Present your UX/UI Designs lightning fast on client's devices without leaving Sketch. 📲 306 | - [Brandfolder](https://github.com/brandfolder/sketch-plugin-brandfolder), by brandfolder: Easily use your digital assets from Brandfolder right within your favorite platform for digital design! 307 | - [File Cleaner](https://github.com/monzo/file-cleaner), by Monzo: Keep your Sketch files immaculately clean and in order. 308 | - [Artboard Manager](https://github.com/bomberstudios/artboard-manager#readme), by Ale Muñoz: Because moving artboards manually is *so* 2016. 309 | - [Segmented Circle](https://github.com/design4use/gb-sketch-segmentcircle), by German Bauer: Create precise segmented circular graphics for diagrams, instrumentation and analytics. 310 | - [Sketch Wakatime](https://github.com/wakatime/sketch-wakatime), by WakaTime: A Plugin to update your WakaTime stats automatically from Sketch. 311 | - [Import SVG as Artboards](https://github.com/mathieudutour/import-svg-as-artboard), by mathieudutour: Import SVG files as Artboards. 312 | - [Symbol Instance Locator](https://github.com/sonburn/symbol-instance-locator), by Jason Burns: Locate all instances of a selected symbol or instance. 313 | - [Artboard Tools](https://github.com/frankko/artboard-tools), by Frank Kolodziej: Sketch.app plugins for arranging artboards and navigating between artboards. 314 | - [Sketch Meaxure](https://github.com/qjebbs/sketch-meaxure), by utom & jebbs: Make it a fun to create spec for developers and teammates 315 | - [css to Shadow Style](https://github.com/oliverpitsch/CSS-Shadow-to-Sketch-Style-Plugin), by Oliver Pitsch: CSS box-shadow to Layer Style Converter 316 | - [States](https://github.com/edenvidal/states), by Eden Vidal: Create different artboard states and switch between them easily 317 | - [Cloudinary Plugin](https://github.com/cloudinary-devs/cloudinary-sketch-plugin), by Maya Shavin: Cloudinary plugin for Sketch projects 318 | - [Justinmind Sketch](https://github.com/justinminddevelopment/justinmind-sketch), by Justinmind: You can export artboards, layers and pages you’ve made in Sketch to Justinmind and turn them into interactive shareable prototypes. 319 | - [Overflow](https://overflow.io), by proto.io: Overflow is the world’s first user flow diagramming tool tailored for designers. It empowers designers to design, present and share beautiful user flow diagrams that tell a story. 320 | - [Automate Sketch](https://github.com/ashung/automate-sketch), by Ashung Hung: Make Sketch more efficient. A lot of useful plugins in one. 321 | - [Icondrop](https://github.com/iconscout/icondrop), by Iconscout: Get access to 300,000+ icons right into Sketch App 322 | - [Kitchen](https://github.com/ant-design/kitchen), by Ant-Design: Make your design work delicious 🍽 323 | - [picasso](https://github.com/wuba/Picasso), by huangwencun: Picasso是58同城推出的一款sketch生成代码插件,可将sketch设计稿自动解析成还原精准,可用度高的前端代码 324 | - [Merge Duplicate Symbols](https://github.com/oodesign/merge-duplicate-symbols), by oodesign: Merge symbols or styles, replacing all instances and keeping overrides. 325 | - [SmartTable](https://github.com/Penndo/smartTable), by Penndo: 326 | - [Phrase Strings Plugin](https://phrase.com/integrations/sketch/), by Phrase: Start localization during the design phase. Easily preview your designs in multiple languages and optimize your UI for all markets with the Phrase Strings plugin. 327 | - [Scale All in Place](https://github.com/delighted/sketch-scale-all-in-place), by Delighted Inc.: Scale all in place: Resize all selected shapes or layers, in place, from center. 328 | - [Chromata](https://github.com/vladimir-ionita/Chromata), by Vladimir Ionița: Find rogue colors 329 | - [GuideGuide](https://guideguide.me), by Cameron McEfee: Powerful grids and guides in your favorite design tools 330 | - [SketchContentSync](https://github.com/contentsync/sketchcontentsync), by ContentSync: Sync sketch files with google docs. 331 | - [Sketch Symbol Legend](https://github.com/wix-incubator/sketch-symbol-legend), by WIX Incubator: Legend for your Sketch Symbols. 332 | - [Data From Clipboard](https://github.com/Saint-loup/data-from-clipboard), by Saint-loup: A DataSupplier plugin 333 | - [Appalette](https://github.com/carlosarturo28/appalette), by Carlos Navarro: A Sketch plugin that let you find the color palette of (almost) any App. 334 | - [Units](https://github.com/dploeger/sketch-plugin-units), by Dennis Ploeger: A Sketch plugin for working with print units (inch, cm, mm) in Sketch's pixel world. 335 | - [Android Res Export](https://github.com/ashung/android_res_export), by Ashung Hung: Export Android resouces in Sketch, include PNG assets, app icon, nine-patch image and vector drawable. 336 | - [ddSpiral](https://github.com/Design-Dude/ddSpiral), by Mek van’t Hoff: Magically shape almost any kind of 🌀 spiral. 337 | - [SymbolNameAutocomplete](https://github.com/griffin-stewie/symbolnameautocomplete), by griffin-stewie: This plugin gives you autocompletion of symbol names when creating a symbol. 338 | - [Symbol and Artboard Organizer](https://github.com/myrronth/symbol-and-artboard-organizer), by Myrronth: Organize your symbols and artboards. 339 | - [Plugin List](https://github.com/griffin-stewie/PluginsList), by griffin-stewie: Sketch Plugin that gives you list of plugins you enabled as several text formats. 340 | - [Icons → Code](https://github.com/Sugarcode-Team/icons-to-code-sketch-plugin-live), by Sugarcode: Export Icons as vector-perfect code components for Android, React, ReactNative, Angular, Vue, TTF, EPS, PDF, Custom components and more. 341 | - [Sketch Map Generator](https://github.com/eddiesigner/sketch-map-generator), by Eduardo Gómez Vásquez: Plugin to fill a layer with a map generated from a location (Powered by Google Maps) 342 | - [Colors → Code](https://github.com/Sugarcode-Team/colors-to-code-sketch-plugin-live), by Sugarcode: Export Colors as organized Stylesheets for Android, CSS, Less, SCSS, Sass, React, ReactNative, Stylus, PostCSS and CSS Crush. 343 | - [Sync with Library](https://github.com/oodesign/sync-with-library), by oodesign: Easily replace local symbols and layer & text styles with library ones. 344 | - [Copy Updater](https://github.com/lizhengDesign/Sketch-CopyUpdater), by Li Zheng: A Sketch plugin that updates copy based on selected JSON 345 | - [Fill Updater](https://github.com/lizhengDesign/Sketch-FillUpdater), by Li Zheng: Fill shapes or symbols with content of selected artboards. 346 | - [GxDesignOps](https://github.com/genexuslabs/sketchdesignops), by Gastón Milano: Sketch Plugin For GeneXus internal use 347 | - [MarginSymbols](https://github.com/griffin-stewie/MarginSymbols), by griffin-stewie: 348 | - [Sketch Styler](https://github.com/oodesign/sketch-styler), by oodesign: Assigns styles automatically to all of your unstyled layers. 349 | - [Sketch Ipsum](https://github.com/sketch-hq/sketch-ipsum), by Sketch: A DataSupplier plugin that fills your text layers with random Lorem Ipsum 350 | - [SymbolNameSync](https://github.com/griffin-stewie/symbolnamesync), by griffin-stewie: This plugin gives you syncing names between Symbol masters and its instances. 351 | - [Sketch Layer Comps](https://github.com/ozgurgunes/sketch-layer-comps), by Özgür Güneş: A plugin which saves and applies layer states to create different compositions of current page. 352 | - [Symbol States](https://github.com/ozgurgunes/Sketch-Symbol-States), by Ozgur Gunes: A Sketch plugin which saves overrides of a symbol instance as states to be applyable on another instance of that symbol later. 353 | - [TinyFaces 👦🏼👨🏾👩🏻](https://github.com/maximedegreve/tinyfaces-sketch-plugin), by Maxime De Greve: Fill content with random avatars & data 354 | - [Sketch Data Faker](https://github.com/paintedbicycle/sketch-data-faker), by paintedbicycle: A Sketch data plugin providing data for you mockups from Faker.js 355 | - [Sketch Chat](https://github.com/mathieudutour/sketch-chat), by Mathieu Dutour: A Sketch plugin to chat in Sketch Cloud files 356 | - [Sketch Webgl](https://github.com/endswithak/sketch-webgl), by endswithak: 357 | - [Sketch Dark Mode](https://sketch-dark-mode.eduardogomez.io), by Eduardo Gómez: Generate a dark mode version of any document, the right way. 358 | - [Copy Optimized SVG Code](https://github.com/chenxsan/copy-optimized-svg-code), by chenxsan: Sketch plugin to copy optimized svg code 359 | - [Sketch Times](https://github.com/xaddict/sketch-times), by Luuk Lamers: A DataSupplier plugin to get Times 360 | - [Design Tokens](https://github.com/design-meets-development/design-tokens-plugin), by Andreas Koutsoukos: A Sketch plugin that exports design Tokens to JSON format. You can export colors, typography, icons and utilis. A must-have tool for design system project. 361 | - [Sketch Share](https://github.com/robflaherty/sketch-share), by Rob Flaherty: Sketch plugin that exports artboards and generates an HTML file linking to each one 362 | - [Quopi](https://github.com/LukeFinch/Quopi), by Luke Finch: Fetches copy from the comments on your Abstract branch 363 | - [Pixel Perfect](https://github.com/materik/sketchplugin-pixelperfect), by Mattias Eriksson: Plugin for Sketch for handling layout and sizing of layers automatically based on their names. 364 | - [Browser Preview](https://github.com/lukasoppermann/browser-preview), by Lukas Oppermann: Quickly preview an artboard in your browser. 365 | - [Flow Exporter](https://github.com/romannurik/Sketch-FlowExporter), by Roman Nurik: A Sketch plugin that exports prototype flows built with Sketch 49+ to HTML. 366 | - [Sketch Title Case](https://github.com/hemmingsson/sketch-title-case), by Mattias Hemmingsson: Sketch Plugin to make text Title Case 367 | - [PinIt](https://github.com/acollurafici/PinIt), by Anthony Collurafici: A collection of Resizing Shortcuts. 368 | - [Remove.bg](https://github.com/mathieudutour/sketch-remove-bg), by Mathieu Dutour: Remove image background in a single click 369 | - [Prototypes Invision ↔︎ Sketch](https://github.com/mathieudutour/prototypes-invision-sketch), by mathieudutour: Translate your prototyping links back and forth between Sketch and Invision 370 | - [Snatch](https://github.com/ZhichengChen/snatch), by ZhichengChen: Sketch plugin which upload layer to CDN directly. 371 | - [Whale Kit](https://github.com/jingwhale/whale-kit), by jingwhale: 372 | - [Sketch DevTools](https://github.com/skpm/sketch-dev-tools), by skpm: See your plugin logs, inspect the state of Sketch documents, explore actions, and more 373 | - [Rough](https://github.com/mathieudutour/rough-sketch), by mathieudutour: Transform your shapes in a sketchy, scribbly, hand-drawn-like, style. 374 | - [Csv Mail Merge](https://github.com/jdwolk/sketch-csv-mailmerge), by JD Wolk: A lightweight Sketch plugin for importing data from .csv files using "{}" text sections. 375 | - [stuffing](https://github.com/Ashung/Sketch-Stuffing), by Ashung: A DataSupplier plugin which supplies chinese data. 376 | - [Angle](https://angle.sh), by MengTo: Apply perspective transforms on screen mockups. Auto-detect screens by resolution and works on shapes and symbols. Super fast. 377 | - [Last Updated Indicator](https://github.com/bvmensvoort/sketch-last-updated), by Bram van Mensvoort: Mark your designs with a version indicator which automatically changes as you update. 378 | - [Dad Jokes](https://github.com/domhabersack/sketch-dadjokes), by Dom Habersack: Replace your text with dad jokes. 379 | - [10th Anniversary](https://github.com/bomberstudios/10th-anniversary), by Ale M: Celebrate Sketch's 10th Anniversary with a trip down memory lane 380 | - [Sketch json](https://github.com/arvinxx/sketch-json), by arvinxx: a plugin to transfer sketch JSON into sketch Object 381 | - [Annotations](https://github.com/BaguetteEngineering/annotations-sketch-plugin), by Baguette Engineering: Hide/show layer groups named 'Annotations'. 382 | - [Color Variables Migrator](https://github.com/sketch-hq/color-variables-migrator), by Sketch: Migrate your Layers and Styles to use Color Variables 383 | - [Collapse All Artboards And Groups](https://github.com/littlebusters/Collapse-All-Artboards-and-Groups), by littlebusters: Collapse all artboards and groups in the current document. 384 | - [BlobMaker](https://github.com/Rawnly/blobmaker_sketch), by Federico Vitale: Generate blobs with ease 385 | - [DuplicateLater](https://github.com/KevinGutowski/Duplicate-Later), by Kevin Gutowski: Duplicate layers in the same direction after duplicating (like in Figma). 386 | - [Layers to X](https://github.com/asp55/sketch-plugin-layers-to-x), by Andrew S. Parnell: Quickly turn layers into groups, artboards, and symbols. 387 | - [Batch Create Symbols](https://github.com/demersdesigns/sketch-batch-create-symbols), by Paul Demers: A plugin for Sketch to convert selected layers to individual symbols. 388 | - [Perfect Type](https://github.com/rtrikha/perfect-type-plugin), by Raunak Trikha: 389 | - [wireframr](https://github.com/chewbecky/wireframr), by chewbecca: Sketch Plugin to change your high-fidelity screendesign to simple wireframes. 390 | - [Library Inventory](https://github.com/tijmenvangurp/library-inventory), by Gurp, Tijmen van: List all symbols that a selected document is using from an external library 391 | - [Detach Out of Sync Text Styles](https://github.com/tijmenvangurp/detach-out-of-sync-text-styles), by Tijmen van Gurp: Detach all out of sync text styles from a chosen sketch library. 392 | - [Copy Framer Code](https://github.com/perrysmotors/copy-framer-code), by Giles Perry: A Sketch plugin that copies any selected layer to the clipboard as code that can be pasted straight into a Framer prototype. 393 | - [Export Flat Svgs](https://github.com/KevinGutowski/ExportFlatSVGs), by Kevin Gutowski: Flatten text within SVGs on export. 394 | - [Isometry](https://github.com/maxkonovalov/Isometry), by Max Konovalov: Create isometric projections from layers 395 | - [Coding Toolkit](https://github.com/Coding/coding-sketch-toolkit), by tankxu: A series of commands for CODING designers. 396 | - [Sketch Foundation](https://github.com/13protons/sketch-foundation), by Alan Languirand: Toggle layer visibility for all matching layer names on any artboard to create foundational layers like notes and guides more manageable. 397 | - [Light/dark Switch](https://github.com/chaos-machine/switch-theme), by Tudor Teisanu: Switch artboards' theme 398 | - [Rename Text Layers by Style](https://github.com/okaybueno/rename-text-layers-by-style), by Alexander Gerund: Rename all text layers based on the name of the text style assigned. 399 | - [copycat](https://github.com/azhsetiawan/sketch-copycat), by Ashar Setiawan: sketch plugin 400 | - [Mupixa](https://github.com/mupixa/sketch-plugin-mupixa), by www.mupixa.com: Mupixa allows you to leverage the full potential of your prototypes by conducting usability research fast and effortlessly. 401 | - [SVG Bem](https://github.com/mLihs/svg-bem), by mLihs: A Plugin for SVG export to convert IDs to Classes, create BEM Styled Naming Based on Layers. Uses SVGO to compresse and Clean up SVGs, right when you export them. Based on the SVGO Compressor Plugin 402 | - [Install Library Bundle](https://github.com/bomberstudios/install-library-bundle), by Ale Muñoz: Installs a bunch of shared Sketch Libraries at once, because life is too short for clicking links. 403 | - [Artboard History](https://github.com/jan-patrick/sketch_artboard-history), by Jan Schneider: A Sketch plugin to switch faster between your latest artboards. 404 | - [Case Converter](https://github.com/ozgurgunes/Sketch-Case-Converter), by Özgür Güneş: Convert text layers, symbols or all instances of a symbol. 405 | - [Flat Export](https://github.com/TheSonOfThomp/sketch-flat-export), by Adam Thompson: Use this plugin to batch export layers to a single folder. 406 | - [Unsplash](https://www.sketch.com/extensions/plugins/unsplash/), by Sketch BV: Unsplash Data Provider plugin, for Sketch 52+. 407 | - [SVGO Compressor](https://sketch.com/extensions/plugins/svgo-compressor/), by Sketch BV: A Plugin that compresses SVG assets using SVGO, right when you export them. This Plugin requires Sketch 3.8. 408 | - [LaTeX Sketch Plugin](https://github.com/heytitle/latex-sketch-plugin), by heytitle: This plugin brings LaTeX functionalities to Sketch, and allows us to directly write mathematical formulas 409 | - [Text to Styles](https://github.com/tbrasington/text-to-styles), by Thomas Brasington: Generates Sketch type styles programmatically from Artboards 410 | - [Git Sketch Plugin](https://github.com/mathieudutour/git-sketch-plugin), by Mathieu Dutour: A Git client generating pretty diffs built right into Sketch. 411 | - [Genus](https://github.com/keplerlab/genus), by Kepler Lab: A sketch plugin for exporting prototype website (static html css) from your sketch designs 412 | - [Slint](https://github.com/nusability/slint), by Johannes Nanninga: A linter for Sketch files 413 | - [Sketch Ignore](https://github.com/theboi/sketch-ignore), by Ryan The: s 414 | - [IcanIcon](https://github.com/Sugarcode-Team/icanicon-live-sketch-plugin), by Sugarcode: icanicon.io allows you to keep your icon libraries in sync with your Design System. 415 | - [Toggle Pixel Fitting](https://github.com/KevinGutowski/PixelFit), by KevinGutowski: A simple plugin to change your pixel fitting preference. 416 | - [Sketch Plugin Snap to 8pt Grid](https://github.com/mheesakkers/sketch-plugin-snap-to-8pt-grid), by Misha: A Sketch plugin which helps with snapping layer properties to the 8 point grid. 417 | - [Toggle Greyscale](https://github.com/KevinGutowski/ToggleGreyscale), by Kevin Gutowski: A Sketch plugin that adds a layer to your artboard so that you can preview your mocks in greyscale. 418 | - [Find Dirty Styles](https://github.com/KevinGutowski/FindDirtyStyles), by Kevin Gutowski: A Sketch plugin to easily find layers that are out of sync with their shared styles. 419 | - [Potrace](https://github.com/perrysmotors/sketch-potrace), by Giles Perry: Convert bitmaps to vector graphics 420 | - [Dark Side](https://github.com/receptiryaki/darkside), by Recep Tiryaki: Design light and dark themes easily. Switch between themes. Export color assets for Xcode and Android Studio. 421 | - [Sketch Export Preferences](https://github.com/KevinGutowski/Sketch-Export-Preferences), by Kevin Gutowski: Import and Save Sketch Export Preferences 422 | - [Inter Letter Spacing](https://github.com/giliamverheide/sketch-inter-letter-spacing), by Giliam Verheide: Sketch plugin that dynamically sets letter spacing of layers using the Inter font. 423 | - [Paste Paddings](https://github.com/simonlidesign/pastePaddings), by simonlidesign: Allows you to copy the paddings of one element and apply them to another 424 | - [Sketch Color Manager](https://github.com/hecflores/sketch-color-manager), by hecflores: Sketch Plugin to manage all rogue colors in the sketch, along with other styling properties 425 | - [Export King Plugin](https://github.com/hecflores/export-king-plugin), by hecflores: A Sketch Plugin that provides exporting for any scenario 426 | - [Tinty](https://github.com/chewbecky/tinty), by chewbecca: Sketch Plugin that lets you create tints and shades of any color as shared styles and document colors. 427 | - [Metaball](https://github.com/mheesakkers/sketch-plugin-metaball), by mheesakkers: A simple plugin to draw shapes based on inner and outer tangents between two circles. 428 | - [Sketch Flow](https://github.com/hite/Sketch-Flow), by hite: Make Icon Slicing simple for app developers! 429 | - [Sketch Snap](https://github.com/charliecm/sketch-snap), by Charlie Chao: A Sketch plugin that lets you snap layers below, above, left of or right of selected layer to one of its edges. 430 | - [FS_StockSummaryFiller](https://github.com/freeman990/FS_StockInfoFiller), by Freeman Sun: 一系列关于股票数据的自动填充/生成工具 431 | - [projecthuddle](https://github.com/ajgagnon/projecthuddle-sketch-sync), by Andre Gagnon: 432 | - [Symbol Overlay Toggle](https://github.com/uxcourt/overlaytoggler), by uxcourt: A Sketch plug-in to seek specific style names in library-sourced symbols and toggle the styles. 433 | - [foodreau](https://github.com/maxdavid/sketch-foodreau), by Max David: Data supplier plugin for populating designs with real food recipes. 434 | - [Sketch Library Unlinker](https://github.com/perrysmotors/sketch-library-unlinker), by Giles Perry: Unlink symbols linked to a specific library, or unlink symbols that have been deleted in their libraries. 435 | - [Symbol Namer](https://github.com/perrysmotors/symbol-namer), by Giles Perry: A plugin to help you rename symbols. Save default values, use override text, and do powerful, pattern-based renaming. 436 | - [Inter UI Character Spacing](https://github.com/qruzz/InterUI-Character-Spacing), by Michael Nissen: Package to correct the character spacing for the InterUI font in Sketch 437 | - [Photo Grid](https://github.com/perrysmotors/photo-grid), by Giles Perry: A Sketch plugin that can size layers to common photo dimensions and scale them to fit in a row. 438 | - [Reset Image Aspect Ratio](https://github.com/perrysmotors/reset-image-aspect-ratio), by Giles Perry: A Sketch plugin that resets the aspect ratio of selected images. 439 | - [Chippen Charts](https://github.com/smallmultiples/sketch-chippencharts), by Martin von Lupin: Bar chart creator for your mockups using random data. Change the size of selected rectangles. Works for both horizontal and vertical bar charts. Made with love in Chippendale. 440 | - [DarkModeSystem](https://github.com/BDiogo/DarkMode-System), by BDiogo: Apply a Dark Theme to your Project 441 | - [Elevation Shadows](https://github.com/YitingLiu/Elevation-Shadows), by Yiting Liu: A Sketch Plugin to apply consistent Elevation Shadows 442 | - [Light Switch](https://github.com/TheBerriman/lightswitch-sketch), by Samuel Berriman: Toggle between Light or Dark symbols and text/layer styles. 443 | - [Sketch Sync](https://sensive.co), by Sensive: Create a collaboration hub for your Sketch files. 444 | - [Orbison](https://github.com/ilikescience/orbison), by ilikescience: A Sketch plugin for Bitly's product design system 445 | - [typex](https://github.com/reinvanoyen/typex), by reinvanoyen: Highly configurable text styles to web (css, sass, html, json, ...) export plugin 446 | - [Symbol Master Renamer](https://github.com/miguelangelnarvaezgo/symbol-master-renamer), by Miguel Angel Narvaez: Simple plugin to rename and organizing the master symbols with '/'. 447 | - [Truncat](https://github.com/KevinGutowski/Truncat), by Kevin Gutowski: A Sketch plugin to truncate text. 448 | - [Check Contrast](https://github.com/lifeofmle/check-contrast), by Michael Le: Allows you to select layers in Sketch and get realtime feedback about the contrast ratio 449 | - [Organize Layers](https://github.com/eunicejson/organizeLayers), by Eunice J. Son: A plugin that allows short key commands to move layers up, down and reverse positions ↕️ 450 | - [Sketch Copy Text Only](https://github.com/explorador/sketch-copy-text-only), by Cristian: Sketch plugin to copy only the text from selected artboard(s) or layer(s) 451 | - [Symbol Insert](https://github.com/lifeofmle/symbol-insert), by Michael Le: Simple plugin to insert Sketch symbols 452 | - [Context](https://github.com/afnizarnur/context-sketch-plugin), by Afnizar Nur Ghifari: Count character, words, and paragraphs from a text layer easily inside Sketch! 453 | - [Stickers](https://github.com/romannurik/Sketch-Stickers), by Roman Nurik: A Sketch plugin that lets you browse and quickly drag+drop stickers (specially tagged layers) in your Sketch Libraries. 454 | - [ImageCodeExporter](https://github.com/funfungo/ImageCodeExporter), by funfungo: A Plugin that export your sketch layer for code usage 455 | - [Sketch Easing Gradients](https://github.com/larsenwork/sketch-easing-gradient), by larsenwork: Supercharge your gradients in Sketch with no-linear color mix and custom color spaces 456 | - [Live Planet Sketch Datasupplier](https://github.com/Craigtut/liveplanet-sketch-datasupplier), by Craig Tuttle: Supply's real data from Live Planet's API to Sketch for testing designs 457 | - [Mugsy](https://github.com/jan-patrick/sketch_mugsy), by jan-patrick: 458 | - [BRData](https://github.com/jonathasbsouza/brdata), by Jônathas Souza: Gerador de dados contextualizados com a realidade brasileira. 459 | - [Disconnector](https://github.com/njcrowther/Disconnector), by Nathan Crowther: Quickly disconnect all symbols from a selection 460 | - [QuickTextOverride](https://github.com/dbilyk/QuickTextOverride), by Dmitri Bilyk: Use a key command to target the first text override of a symbol. 461 | - [PersianSupplier](https://github.com/hiradary/persiansupplier), by Hirad Arshadi: Sketch Plugin for supplying dynamic persian data. 462 | - [Colormate](https://github.com/themainingredient/colormate), by The Main Ingredient: Colormate is a kickass sketch plugin that will help you figure out how in the hell you ended up with 457 different greys, instead of the 1 grey Mandy gave you in the handover. Oops :flushed: 463 | - [Sequence Artboard Names](https://github.com/tbrasington/Sequence-Sketch-Artboards), by Thomas Brasington: Simple sequencing of all artboards within a Sketch Document 464 | - [🕵🏻‍ Find and Replace Text](https://github.com/chriswetterman/sketch-find-and-replace-text), by Chris Wetterman: Find and replace text throughout your Sketch document 465 | - [Sketch Groupie](https://github.com/aparajita/sketch-groupie), by Aparajita Fishman: Sketch plugin providing commands to align layers with their parent group 466 | - [areanow](https://github.com/norman-woz/areanow), by norman-woz: Get the total area of selected rectangle layers. 467 | - [Chemfill](https://github.com/ahadik/chemfill), by Alexander Hadik: A Chemical Structure data supplier plugin. 468 | - [labelizer](https://github.com/nOograss/labelizer), by Maxime Peeters: Extract, replace and download labels from Sketch file. 469 | - [Library Replacer](https://github.com/sketch-hq/library-replacer-sketchplugin), by Sketch: Quickly replace instances of shared Symbols and Styles. 470 | - [Mise En Place](https://github.com/madwaro/MiseEnPlace), by Carlos Madrigal: Mise En Place is a Sketch plug-in that helps you prep before you start cooking your designs. 471 | - [Sketch a Sketch](https://github.com/mathieudutour/sketch-a-sketch), by Mathieu Dutour: Bringing the iconic knobs from the famous toy to Sketch. 472 | - [Iban Generator](https://github.com/idriesalbender/iban-sketch-plugin), by idix: Generate random International Bank Account Numbers (IBAN) 473 | - [Shared Styles Hierarchy](https://github.com/mathieudutour/sketch-styles-hierarchy), by Mathieu Dutour: Organize your shared styles using the layers list, create a hierarchy where children inherit properties from their parent. 474 | - [Plugin Reloader](https://github.com/TheNounProject/SketchPluginReloader), by Wes Byrne: A simple plugin to reload another plugins 475 | - [BillUI](https://github.com/SimonTakman/BillUI), by Carl Albertsson & Simon Takman: Interactive artificial evolutionary tool in order to help you come up with design suggestions that are similar to your initial design. 476 | - [betterTypePanel](https://github.com/KevinGutowski/betterTypePanel), by Kevin Gutowski: A sketch plugin to help manage common OpenType properties 477 | - [Connection Flow Arrows](https://github.com/faridsabitov/Sketch-Connection-Flow-Arrows), by Farid Sabitov: Plugin for generating easy to use connection flow arrows in Sketch 478 | - [Sketch Export to](https://github.com/mascardoso/sketch-export), by Marco Cardoso: Export an artboard layers to json or markdown 479 | - [Bold It](https://github.com/ysjn/bold-it), by ysjn: Bold-it is a super simple plugin that bolds user-specified keyword in selected text layers. 480 | - [lazyboards](https://github.com/lazybearcreations/sketch-lazyboards), by Adam Bruzon: Artboard tools to help you with tedious batch tasks. 481 | - [Logo Fetcher](https://github.com/soulchild/sketch-logo-fetcher), by Tobi Kremer: Place logos from either the Logos API (SVG format) or Clearbit API (PNG format) 482 | - [Rename Layers Based On Textstyle](https://github.com/tbrasington/rename-layers-based-on-textstyle), by Thomas Brasington: Renames text layers in the current page based on their text style name 483 | - [Artboard Tricks](https://github.com/romannurik/sketch-artboardtricks), by Roman Nurik: Artboard Tricks plugin for Sketch 484 | - [Lokalise Plugin](https://github.com/lokalise/lokalise-sketchplugin), by Lokalise: Deliver multilingual assets faster and smarter. Share context with your linguists, get early feedback about each market and preview the design in all languages. 485 | - [Live Preview](https://kylehalevi.com/live-preview), by Kyle Halevi: Wirelessly mirror Sketch artboards on iPhone and iPad, with pixel–perfect rendering. 486 | - [Golden Ratio Grid](https://www.thegoldenratio.co.uk/plugins), by Spacestar Digital: Align your designs with evolutionary precision using a flexible golden ratio grid built to fit any screen size, any graphical need, any canvas. From graphic design to digital design. 487 | - [Blush](https://blush.design), by Blush Design, Inc.: Create and customize illustrations in your designs with Blush. Just choose a collection, pick a composition, and place it on the canvas. 488 | - [Overlay](https://overlay-tech.com?ref=sketch-plugin), by Overlay: Overlay transforms your Sketch symbols into clean and reusable code in ReactJS, Vue.js and Vanilla HTML. 489 | - [Atlassian Vendor Sketch Plugin](https://github.com/atlassian/sketch-plugin), by Atlassian Design: Design your next Atlassian app with our component libraries and suite of Sketch tools 💎 490 | - [Datazier Lens](https://github.com/enriquezgomez/datazier-lens), by Victor Enriquez: Inspect and sort your local font book 491 | - [Helpify](https://github.com/Luckyfoxdesign/helpify), by Lucky Fox Design: Plugin with simple actions: Generate random numbers 492 | - [Sketch QR Code](https://github.com/lerte/sketch-qr-code), by Lerte Smith: A Plugin for generate SVG QR Code in Sketch app. 493 | - [Sketch Material](https://github.com/websiddu/sketch-material), by Siddhartha Gudipati: Sketch material is a sketch plugin that will help you generate complex material components like tables, chips, forms etc… 494 | - [Contrast](https://github.com/romannurik/Sketch-Contrast#readme), by Roman Nurik: A Sketch plugin to show a pass/fail type contrast report. 495 | - [Sketch Iconscope](https://github.com/ziven27/sketch-iconscope), by ziven27: Wrap the Icon with a square(4n) scope. 496 | - [Sketch Topographic](https://github.com/ziven27/Sketch-topographic), by ziven27: Display Topographic Information 497 | - [Sketch Table Builder](https://github.com/EricKramp/sketch-table-builder), by Eric Kramp: Quickly and easily use a single symbol and a CSV to create a data table. 498 | - [Omnis Skeleton Generator](https://github.com/taohsu/skeletongenerator), by taohsu: Generate skeleton/placeholder UI from the selected components 499 | - [H5Converter](https://github.com/h5mag/sketch-h5converter), by H5mag team: 500 | - [Copy Paste Position & Size](https://github.com/ajilderda/sketch-copy-paste-position-size), by Andre Jilderda: A Sketch plugin that lets you easily copy & paste width, height, x & y values from and to objects 501 | - [Symbol Swapper](https://github.com/sonburn/symbol-swapper), by Jason Burns: Swap the selected symbols and/or symbol instances to a master of the same name in a library. 502 | - [Puzzle Publisher](https://github.com/ingrammicro/puzzle-publisher), by Ingram Micro: Exports Sketch artboards into linked HTML files and publish it on external site using SFTP. 503 | - [Mesh Gradients](https://github.com/oodesign/mesh-gradients), by oodesign: Create awesome mesh gradients, right inside of Sketch. 504 | - [iOS2Sketch](https://www.design-code.app/docs), by DesignCodeApp: Import App Screens to Sketch 505 | - [Roller by Toybox](https://github.com/toyboxsystems/roller), by Jono Kolnik: Roller is the first Linter for Designers. It works just like spell-check but within your Sketch files. 506 | - [Sketch Auto Translate](https://github.com/symdesign/sketch-auto-translate), by Friedrich Schultheiss: Plugin to translate Sketch files into via Google Translate. 507 | - [Sketch Md3 Color Palettes](https://github.com/icona79/sketch-m3-color-palettes), by Matteo Gratton: With this plugin you can import Material Design themes from the tokens generated with the Material Theme Builder 508 | - [Sketch Tokens Exporter](https://github.com/icona79/sketch-design-tokens-exporter), by Matteo Gratton: With this plugin you can export to your desktop a design-tokens.json file compatible with Amazon Style Dictionary. 509 | - [Puzzle Tokens](https://github.com/ingrammicro/puzzle-tokens), by Ingram Micro: Sketch.app plugin to apply design tokens to Sketch layers 510 | - [Import Colors](https://github.com/Ashung/import-colors-sketch), by Ashung: Import colors from swatches file to Sketch. 511 | - [DatesFromNow](https://github.com/LeipeLeon/Sketch_DatesFormNow), by Leon Berenschot: Simple data plugin to fill dates from now 512 | - [Paddy](https://github.com/dwilliames/paddy-sketch-plugin), by David Williames: Automated padding, spacing and alignment for your Sketch layers 513 | - [Tidy](https://github.com/gbrunow/tidy), by Gui Brunow Gomes: Keep your sketch files Tidy. 514 | - [Emoji Autocomplete Sketch Plugin](https://github.com/zeplin/emoji-autocomplete-sketch-plugin), by Zeplin: While editing Sketch text layers, type “:” followed by the first few letters to autocomplete emojis. 🍒 515 | - [How Many Artboards?](https://github.com/eaugustine/how-many-artboards), by Erica Augustine: A Sketch plugin for counting the number of artboards in your file or on your page 516 | - [Sketch Action](https://github.com/onmyway133/sketch-action), by Khoa Pham: Spotlight in Sketch 517 | - [Arrange Artboards Hierarchically](https://github.com/oodesign/arrange-artboards-hierarchically), by oodesign: Sketch.app plugin to arrange artboards hierarchically depending on their name (based on the Sketch Slash naming pattern). 518 | - [icon2React](https://github.com/jjj201200/icon2React), by DrowsyFlesh: a sketch plugin to converting icons to React Components 519 | - [Gretel](https://github.com/StyleShare/Gretel), by Suyeol Jeon: A Sketch plugin that flattens files after exporting. 520 | - [Sketch Invert Fills](https://github.com/icona79/sketch-invert-fills), by Matteo Gratton: Invert fills beween 2 selected layers 521 | - [Sketch Lineout](https://github.com/icona79/sketch-lineout), by Matteo Gratton: Lineout your artboards for handoff preview 522 | - [Random Color Sketch](https://github.com/yunser/random-color-sketch), by “cjhgit”: 523 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | require 'json' 4 | require 'time' 5 | require "./lib/plugin-directory-utils" 6 | 7 | GITHUB_AUTH_TOKEN = ENV['GITHUB_TOKEN'] 8 | 9 | def title_for plugin 10 | title = plugin['title'] || plugin['name'] 11 | return titlefy(title) 12 | end 13 | 14 | def fix_plugin_title plugin 15 | if (plugin['name'] == plugin['title'] && !(IGNORE.include? plugin['title'])) || plugin['title'] == nil 16 | # puts "— #{plugin['name']} - #{plugin['title']}: Plugin title is wrong, fixing" 17 | plugin['title'] = titlefy(plugin['name']) 18 | end 19 | end 20 | 21 | def get_plugins_from_json 22 | data = IO.read('plugins.json') 23 | data.force_encoding('utf-8') 24 | JSON.parse(data) 25 | end 26 | 27 | def is_plugin_too_old? plugin 28 | if plugin['lastUpdated'] 29 | last_update = Time.parse(plugin['lastUpdated']) 30 | # If plugin is more than two years old, it is probably not maintained 31 | return (Time.now - last_update) > 60_000_000 32 | else 33 | return false 34 | end 35 | end 36 | 37 | desc "Clones all repositories to the 'clones' folder" 38 | task :clone do 39 | mkdir "clones" unless File.directory? "clones" 40 | get_plugins_from_json.each do |plugin| 41 | name = plugin['name'] 42 | owner = plugin['owner'] 43 | url = "https://github.com/#{owner}/#{name}" 44 | system("git clone #{url} clones/#{owner}-#{name}") 45 | end 46 | end 47 | 48 | desc "Updates all clones in the 'clones' folder" 49 | task :update do 50 | get_plugins_from_json.each do |plugin| 51 | name = plugin['name'] 52 | owner = plugin['owner'] 53 | url = "https://github.com/#{owner}/#{name}" 54 | 55 | if File.directory? "clones/#{owner}-#{name}" 56 | puts "Updating #{owner}-#{name} to latest version" 57 | system("cd clones/#{owner}-#{name}/ && git up") 58 | else 59 | puts "Cloning #{owner}-#{name} to latest version" 60 | system("git clone #{url} clones/#{owner}-#{name}") 61 | end 62 | end 63 | end 64 | 65 | desc "Generate README.md from plugins.json" 66 | task :readme do 67 | 68 | plugins = get_plugins_from_json 69 | 70 | output = < " ")) 143 | end 144 | end 145 | 146 | desc "Update `lastUpdated` field for all plugin in JSON" 147 | task :lastUpdated do 148 | 149 | require 'octokit' 150 | client = Octokit::Client.new(:access_token => GITHUB_AUTH_TOKEN) 151 | 152 | json_data = get_plugins_from_json 153 | 154 | json_data.each do |plugin| 155 | # Only check for last push date for plugins with a repo 156 | if plugin['owner'] && plugin['name'] 157 | # puts "Updating #{titlefy(plugin['name'])}" 158 | plugin_url = plugin['owner'] + "/" + plugin['name'] 159 | begin 160 | repo = client.repo(plugin_url) 161 | # user = client.user(plugin['owner']) 162 | # puts "— Plugin was updated at #{repo.pushed_at}" 163 | plugin['lastUpdated'] = repo.pushed_at 164 | rescue Exception => e 165 | puts e 166 | puts "https://github.com/#{plugin['owner']}/#{plugin['name']}" 167 | end 168 | 169 | # if plugin['name'] == plugin['title'] && plugin['title'] == nil 170 | # puts "— Plugin title is wrong, fixing" 171 | # plugin['title'] = titlefy(plugin['name']) 172 | # end 173 | else 174 | if plugin['lastUpdated'].nil? 175 | puts plugin['name'] 176 | puts plugin['title'] 177 | puts "— Plugin is not on GitHub, you may want to manually add a date" 178 | end 179 | end 180 | puts 181 | end 182 | 183 | File.open("plugins.json","w") do |f| 184 | f.write(JSON.pretty_generate(json_data, :indent => " ")) 185 | end 186 | 187 | end 188 | 189 | desc "List authors" 190 | task :authors do 191 | plugins = get_plugins_from_json 192 | authors = plugins.collect { |plugin| (plugin['author'] ? plugin['author'].downcase + " (" + plugin['owner'].downcase + ")" : plugin['owner'].downcase ) }.uniq.sort 193 | puts authors 194 | puts "\n" + authors.size.to_s + " unique authors." 195 | end 196 | 197 | desc "Interactive JSON: prompt user for information about their plugin and generate plugins.json and README.md" 198 | task :interactive do 199 | begin 200 | plugin = prompt_for_plugin() 201 | 202 | # Save JSON 203 | save_json(plugin) 204 | STDOUT.puts "plugins.json saved." 205 | 206 | # Create readme 207 | Rake::Task["readme"].invoke 208 | STDOUT.puts "README.md updated." 209 | 210 | STDOUT.puts "To commit your plugin to the plugin directory, open a pull request for https://github.com/sketchplugins/plugin-directory/." 211 | rescue SystemExit, Interrupt # Allow for interupt to leave script 212 | exit 213 | end 214 | end 215 | 216 | def prompt_for_plugin() 217 | if prompt_yes_no("Is your plugin hosted on GitHub?") 218 | return prompt_gh_plugin() 219 | else 220 | return prompt_inputs({}, false) 221 | end 222 | end 223 | 224 | def prompt_gh_plugin() 225 | STDOUT.puts "What is the URL of your GitHub project?" 226 | input = STDIN.gets.strip 227 | matches = input.match('(https?://)?github.com/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?') 228 | owner = matches[2] 229 | name = matches[3] 230 | 231 | if owner && name 232 | STDOUT.puts "Repository owner: '#{owner}', name: '#{name}'" 233 | 234 | # Get info from GitHub 235 | gh_defaults = get_gh_defaults(owner, name) 236 | 237 | # Use branch to get manifest.json, but don't include in final saved JSON 238 | branch = gh_defaults.delete("branch") 239 | 240 | # Get info from manifest.json file hosted on Git?Hub 241 | manifest_defaults = get_manifest_defaults(owner, name, branch) 242 | 243 | # Combine info into default values 244 | defaults = gh_defaults.merge(manifest_defaults) 245 | 246 | # Prompt for plugin 247 | return prompt_inputs(defaults, true) 248 | else 249 | STDOUT.puts "ERROR: '#{input}' is not a valid GitHub repoistory." 250 | prompt_gh_url() 251 | end 252 | end 253 | 254 | def prompt_inputs(defaults, has_github) 255 | plugin = defaults 256 | if !has_github 257 | plugin['owner'] = prompt_owner() 258 | end 259 | 260 | plugin['title'] = prompt_item("Enter a title for your plugin", defaults["title"], !has_github) 261 | plugin['description'] = prompt_item("Describe your plugin in 1-2 sentences", defaults["description"], true) 262 | plugin['homepage'] = prompt_item("Enter the homepage for your plugin", defaults["homepage"], !has_github) 263 | plugin['author'] = prompt_item("Enter your name", defaults["author"], false) 264 | 265 | # Filter out nil values 266 | plugin = plugin.select{|k,v| v != nil} 267 | 268 | # Get string representation of plugin options 269 | str = plugin.map{|k,v| "\t#{k}: #{v}"}.join("\n") 270 | 271 | STDOUT.puts "Your plugin:\n" + str 272 | 273 | if !prompt_yes_no("Is the above information correct?") 274 | return prompt_inputs(defaults, has_github) 275 | end 276 | 277 | return plugin 278 | end 279 | 280 | def prompt_owner() 281 | owner = prompt_item("Enter the person or organisation who owns this plugin (no spaces or special characters)", nil, true) 282 | 283 | if !(owner =~ /^[a-zA-Z0-9_\-]+$/) 284 | STDOUT.puts "ERROR: Owner can only contain letters, numbers, hyphen, or underscores." 285 | return prompt_owner() 286 | end 287 | 288 | return owner 289 | end 290 | 291 | def prompt_item(prompt, default, required) 292 | if required 293 | prompt = prompt + " (required)" 294 | else 295 | prompt = prompt + " (optional)" 296 | end 297 | 298 | prompt = prompt + ": " 299 | 300 | if default 301 | prompt = prompt + "#{default}" 302 | end 303 | 304 | STDOUT.puts prompt 305 | input = STDIN.gets.strip 306 | 307 | if input.to_s.empty? && default 308 | return default 309 | elsif input.to_s.empty? && !required 310 | return nil 311 | elsif !(input.to_s.empty?) 312 | return input 313 | end 314 | 315 | STDOUT.puts "ERROR: Required field" 316 | return prompt_item(prompt, default, required) 317 | end 318 | 319 | def get_gh_defaults(owner, name) 320 | require 'octokit' 321 | client = Octokit::Client.new() 322 | repo_name = "#{owner}/#{name}" 323 | defaults = {} 324 | 325 | STDOUT.puts "Checking for '#{repo_name}' on GitHub..." 326 | begin 327 | repo = client.repo(repo_name) 328 | 329 | defaults["owner"] = owner 330 | defaults["name"] = name 331 | 332 | if !(repo.homepage.to_s.empty?) 333 | defaults["homepage"] = repo.homepage 334 | else 335 | defaults["homepage"] = repo.html_url 336 | end 337 | 338 | if !(repo.description.to_s.empty?) 339 | defaults["description"] = repo.description 340 | end 341 | 342 | defaults["lastUpdated"] = repo.updated_at 343 | defaults["branch"] = repo.default_branch 344 | 345 | return defaults 346 | rescue SystemExit, Interrupt # Allow for interupt to leave script 347 | exit 348 | rescue # Error contacting GitHub API 349 | STDOUT.puts "ERROR: The repository '#{repo_name}' does not exist or is not publically accessible on GitHub." 350 | exit 351 | end 352 | end 353 | 354 | def get_manifest_defaults(owner, name, branch) 355 | content = get_manifest_content(owner, name, branch) 356 | if !content 357 | return {} 358 | end 359 | 360 | defaults = {} 361 | begin 362 | manifest = JSON.parse(content) 363 | 364 | name = manifest['name'] 365 | description = manifest['description'] 366 | author = manifest['author'] 367 | homepage = manifest['homepage'] 368 | identifier = manifest['identifier'] 369 | version = manifest['version'] 370 | 371 | error = false 372 | if identifier.to_s.empty? 373 | error = true 374 | STDOUT.puts "ERROR: The manifest.json file does not contain an identifier." 375 | end 376 | if version.to_s.empty? 377 | error = true 378 | STDOUT.puts "ERROR: The manifest.json file does not contain a version." 379 | end 380 | 381 | if error 382 | STDOUT.puts "\tWe suggest that you update your plugin's manifest.json file to contain these values before adding it to the plugin-directory." 383 | STDOUT.puts "\tSee Sketch's requirements for plugin bundles: http://developer.sketchapp.com/introduction/plugin-bundles/" 384 | 385 | prompt_continue() 386 | end 387 | 388 | if !(name.to_s.empty?) 389 | defaults['title'] = name 390 | end 391 | if !(author.to_s.empty?) 392 | defaults['author'] = author 393 | end 394 | if !(homepage.to_s.empty?) 395 | defaults['homepage'] = homepage 396 | end 397 | if !(description.to_s.empty?) 398 | defaults['description'] = description 399 | end 400 | 401 | return defaults 402 | 403 | rescue JSON::ParserError 404 | STDOUT.puts "ERROR: The manifest.json file for this plugin is not valid JSON." 405 | STDOUT.puts "\tWe suggest that you update your plugin to contain a valid manifest.json file before adding it to the plugin-directory." 406 | STDOUT.puts "\tTry using a JSON validator to check its contents: https://jsonformatter.curiousconcept.com/" 407 | 408 | prompt_continue() 409 | 410 | return {} 411 | end 412 | end 413 | 414 | def get_manifest_content(owner, name, branch) 415 | require 'octokit' 416 | client = Octokit::Client.new() 417 | repo_name = "#{owner}/#{name}" 418 | 419 | STDOUT.puts "Checking for manifest.json file in '#{repo_name}' on GitHub..." 420 | begin 421 | tree = client.tree(repo_name, branch, :recursive => true) 422 | 423 | tree.tree.each do |item| 424 | path = item.path 425 | if !(path.downcase.end_with? ".sketchplugin/contents/sketch/manifest.json") 426 | next 427 | end 428 | 429 | sha = item.sha 430 | 431 | blob = client.blob(repo_name, sha) 432 | encoding = blob.encoding 433 | content = blob.content 434 | if encoding == "base64" 435 | content = Base64.decode64(content) 436 | end 437 | 438 | return content 439 | end 440 | 441 | STDOUT.puts "ERROR: The plugin in the repository '#{repo_name}' does not have a manifest.json file." 442 | STDOUT.puts "\tWe suggest that you update your plugin to contain a valid manifest.json file before adding it to the plugin-directory." 443 | STDOUT.puts "\tSee Sketch's requirements for plugin bundles: http://developer.sketchapp.com/introduction/plugin-bundles/" 444 | 445 | prompt_continue() 446 | 447 | return nil 448 | 449 | rescue SystemExit, Interrupt # Allow for interupt to leave script 450 | exit 451 | rescue # Error contacting GitHub API 452 | puts e 453 | STDOUT.puts "ERROR: The repository '#{repo_name}' does not exist or is not publically accessible on GitHub." 454 | exit 455 | end 456 | end 457 | 458 | def prompt_continue() 459 | if !prompt_yes_no("Are you sure you want to continue?") 460 | exit 461 | end 462 | end 463 | 464 | def prompt_yes_no(prompt) 465 | STDOUT.puts prompt + " (y/n)" 466 | input = STDIN.gets.strip 467 | if input.downcase.start_with?('y') 468 | return true 469 | elsif input.downcase.start_with?('n') 470 | return false 471 | else 472 | STDOUT.puts "ERROR: Respond with 'y' or 'n'." 473 | return prompt_yes_no(prompt) 474 | end 475 | end 476 | 477 | def save_json(plugin) 478 | # Get current plugins 479 | plugins = get_plugins_from_json 480 | 481 | # Check for duplicates 482 | existing_plugin_index = check_for_duplicates(plugin, plugins) 483 | 484 | if existing_plugin_index >= 0 485 | if prompt_yes_no("Would you like to update the existing plugin instead?") 486 | plugins[existing_plugin_index] = plugin 487 | else 488 | exit 489 | end 490 | else 491 | plugins << plugin 492 | end 493 | 494 | File.open("plugins.json","w") do |f| 495 | f.write(JSON.pretty_generate(plugins, :indent => " ")) 496 | end 497 | end 498 | 499 | def check_for_duplicates(plugin, plugins) 500 | puts "Checking for duplicates for #{plugin}" 501 | plugins.each_with_index do |saved_plugin, index| 502 | plugin_name = plugin["name"] || plugin["title"] 503 | plugin_owner = plugin["owner"] || plugin["author"] 504 | saved_plugin_name = saved_plugin["name"] || saved_plugin["title"] 505 | saved_plugin_owner = saved_plugin["owner"] || saved_plugin["author"] 506 | 507 | puts "#{plugin_name} - #{plugin_owner}" 508 | puts "#{saved_plugin_name} - #{saved_plugin_owner}" 509 | 510 | if plugin_name.downcase == saved_plugin_name.downcase && plugin_owner.downcase == saved_plugin_owner.downcase 511 | STDOUT.puts "ERROR: Found another plugin with the same owner & title." 512 | return index 513 | end 514 | end 515 | return -1 516 | end 517 | 518 | desc "Print Star Ranking" 519 | task :stars do 520 | 521 | require 'octokit' 522 | client = Octokit::Client.new(:access_token => GITHUB_AUTH_TOKEN) 523 | json_data = get_plugins_from_json 524 | json_data.each do |plugin| 525 | # Only check for last push date for plugins with a repo 526 | if plugin['owner'] && plugin['name'] 527 | plugin_url = plugin['owner'] + "/" + plugin['name'] 528 | begin 529 | repo = client.repo(plugin_url) 530 | puts "#{repo.watchers},#{titlefy(plugin['name'])}" 531 | # user = client.user(plugin['owner']) 532 | # puts "— Plugin was updated at #{repo.pushed_at}" 533 | # plugin['lastUpdated'] = repo.pushed_at 534 | rescue Exception => e 535 | puts "— Repo not available for #{plugin_url}" 536 | end 537 | 538 | # if plugin['name'] == plugin['title'] && plugin['title'] == nil 539 | # puts "— Plugin title is wrong, fixing" 540 | # plugin['title'] = titlefy(plugin['name']) 541 | # end 542 | end 543 | end 544 | 545 | # File.open("plugins.json","w") do |f| 546 | # f.write(JSON.pretty_generate(json_data, :indent => " ")) 547 | # end 548 | 549 | 550 | end 551 | 552 | desc "Default: generate README.md from plugin" 553 | task :default => :readme 554 | -------------------------------------------------------------------------------- /add: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'json' 3 | require 'octokit' 4 | require './lib/plugin-directory-utils' 5 | 6 | GITHUB_AUTH_TOKEN = `git config com.bohemiancoding.qa.token`.strip 7 | USERNAME = `git config github.user`.strip 8 | 9 | # TODO: add to Rakefile 10 | 11 | if ARGV[0].nil? 12 | puts "Usage: #{File.basename(__FILE__)} username/reponame" 13 | exit 14 | end 15 | 16 | # First, update the local repo to avoid conflicts later on 17 | # (use git-up if it's installed) 18 | if `which git-up`.empty? 19 | `git pull --rebase` 20 | else 21 | `git up` 22 | end 23 | 24 | plugin_url = ARGV[0] 25 | 26 | # Generate the new plugin hash 27 | owner = plugin_url.split("/")[0] 28 | name = plugin_url.split("/")[1] 29 | 30 | client = Octokit::Client.new(:access_token => GITHUB_AUTH_TOKEN) 31 | repo = client.repo(plugin_url) 32 | user = client.user(owner) 33 | 34 | new_plugin = { 35 | :title => titlefy(name), 36 | :description => repo.description, 37 | :author => user.name || owner, 38 | :owner => owner, 39 | :name => name, 40 | :lastUpdated => repo.updated_at 41 | } 42 | 43 | # Load the JSON file with all the plugins 44 | file = File.read('plugins.json') 45 | json_data = JSON.parse(file) 46 | 47 | # make sure we're not adding an existing plugin 48 | existing_plugin = json_data.select{ |item| item['name'] == name && item['owner'] == owner } 49 | 50 | if existing_plugin.count == 0 51 | # Add plugin & save file 52 | json_data.push(new_plugin) 53 | 54 | File.open("plugins.json","w") do |f| 55 | f.write(JSON.pretty_generate(json_data, :indent => " ")) 56 | end 57 | 58 | puts "We now have #{json_data.length} plugins on the list" 59 | system("git add plugins.json") 60 | log_msg = "Added #{owner}/#{name}" 61 | if ARGV[1] 62 | log_msg += ". Closes ##{ARGV[1]}" 63 | end 64 | system("git commit -m '#{log_msg}'") 65 | else 66 | puts "Plugin was already on the list, so let's update it" 67 | existing_plugin[0] 68 | end 69 | 70 | puts "We have #{json_data.length} plugins on the list" 71 | -------------------------------------------------------------------------------- /lib/plugin-directory-utils.rb: -------------------------------------------------------------------------------- 1 | # This is used on the titlefy function. The idea here is to ignore some word that should never be 2 | # re-capitalised 3 | IGNORE = %w(the of a and to for as by in with px iOS iPhone iPad SketchContentSync LayerRenamer SketchRunner Gridy Looper SizeArtboard Shapr nSlicer Click-Thru ColorSpark ImageOptim LaTeX PaintCode RealtimeBoard DevTools TinyFaces NoPrint CloudApp ViewController SelectPlus) 4 | UPCASE = %w(ae ps html ui sf css rtl ps html ui sf json jsx scss rgb hsl hex vr svg svgo pdf png sd ds afux qr wcag vk) 5 | 6 | def titlefy string 7 | if IGNORE.include? (string) 8 | return string 9 | end 10 | s = string.gsub('.sketchplugin','').gsub('-',' ').split(' ') 11 | if s.count == 1 12 | return string 13 | end 14 | 15 | # puts "Words: #{s}" 16 | s.map do |word| 17 | word_lowercase = word.downcase 18 | if IGNORE.include?(word) 19 | word 20 | elsif UPCASE.include? (word.downcase) 21 | word.upcase 22 | else 23 | word.capitalize! 24 | end 25 | end 26 | title = s.join(' ') 27 | # puts title 28 | return title 29 | end 30 | -------------------------------------------------------------------------------- /stats: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'octokit' 4 | require 'json' 5 | 6 | GITHUB_AUTH_TOKEN = `git config com.bohemiancoding.qa.token`.strip 7 | ISSUES_PER_PAGE = 2000 8 | USERNAME = `git config github.user`.strip 9 | 10 | client = Octokit::Client.new(:access_token => GITHUB_AUTH_TOKEN) 11 | 12 | file = File.read('plugins.json') 13 | json_data = JSON.parse(file) 14 | total_plugin_count = json_data.size 15 | plugin_count = 0 16 | 17 | open('plugin-stats.md', 'w') { |f| 18 | f.puts "# Plugin stats - #{Time.now}" 19 | f.puts 20 | f.puts "Total plugins: #{total_plugin_count}" 21 | f.puts 22 | } 23 | open('plugin-stats.csv', 'w') { |f| 24 | f.puts "Name,Last Pushed,Stars,Open Issues,URL" 25 | } 26 | 27 | json_data.each do |plugin| 28 | plugin_name = plugin['name'] 29 | plugin_title = plugin['title'] || plugin_name 30 | plugin_owner = plugin['owner'] 31 | plugin_author = plugin['author'] 32 | 33 | plugin_count += 1 34 | 35 | puts "#{plugin_count} / #{total_plugin_count} : #{plugin_name}" 36 | 37 | if plugin_name && plugin_owner 38 | begin 39 | repo_name = plugin_owner + '/' + plugin_name 40 | repo = client.repo(repo_name) 41 | updated_days_ago = ((Time.now - repo.pushed_at) / (60 * 60 * 24)).to_i 42 | 43 | open('plugin-stats.md', 'a') { |f| 44 | f.puts 45 | f.puts "#{plugin_count}. [#{plugin_title}](https://github.com/#{repo_name})" 46 | f.puts 47 | f.puts " Last push: #{repo.pushed_at} (#{updated_days_ago} days ago)" 48 | if updated_days_ago > 900 49 | f.puts " FIXME: Remove this from directory" 50 | end 51 | f.puts " Stars: #{repo.stargazers_count}" 52 | f.puts " Open issues: #{repo.open_issues_count}" 53 | } 54 | 55 | open('plugin-stats.csv', 'a') { |f| 56 | f.puts "#{plugin_title.gsub(',','')},#{repo.pushed_at},#{repo.stargazers_count},#{repo.open_issues_count},https://github.com/#{repo_name}" 57 | } 58 | rescue 59 | # puts "Plugin has no repo." 60 | open('plugin-stats.md', 'a') { |f| 61 | f.puts 62 | f.puts "#{plugin_count}. #{repo_name}" 63 | f.puts 64 | f.puts " FIXME: #{repo_name} has no repo" 65 | f.puts 66 | } 67 | end 68 | end 69 | # # 70 | end 71 | 72 | puts 73 | puts "#{total_plugin_count} plugins" 74 | --------------------------------------------------------------------------------