<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[gulpjs - Medium]]></title>
        <description><![CDATA[Curated gulp articles - Medium]]></description>
        <link>https://medium.com/gulpjs?source=rss----4174503dfd30---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>gulpjs - Medium</title>
            <link>https://medium.com/gulpjs?source=rss----4174503dfd30---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 17 Jun 2026 12:14:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/gulpjs" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[That’s a Wrap!]]></title>
            <link>https://medium.com/gulpjs/thats-a-wrap-fe9b0b2acf32?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/fe9b0b2acf32</guid>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[surveys]]></category>
            <dc:creator><![CDATA[Clarissa Abidog]]></dc:creator>
            <pubDate>Mon, 03 Jun 2024 22:16:30 GMT</pubDate>
            <atom:updated>2024-06-03T22:16:30.815Z</atom:updated>
            <content:encoded><![CDATA[<p>The Gulp Dev Survey Comes to a Close.</p><p>The Gulp Developer Survey is officially closed. We want to thank each and every one of you who completed the survey! In total, we received over 600 survey responses and are excited to review what everyone has to say.</p><p>Without the editors who graciously shared the survey link with their readers, we know we would not have had such a good turn out. So shout out to the following newsletters for including the Gulp Developer Survey:</p><p>✨ <a href="https://webweekly.email/">Web Weekly</a> — “Your friendly web dev newsletter.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/415/0*lvUT7_LSKMzded0a" /></figure><p>✨ <a href="https://javascriptweekly.com/">JavaScript Weekly</a> — “A newsletter of JavaScript articles, news and cool projects.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/499/0*P2XcsYLh_w3guvUj" /></figure><p>✨ <a href="https://tympanus.net/codrops/collective/">Codrops Collective</a> — “Weekly news about qualitative new projects and libraries in web development and design.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*642bZvy3ayYZqRb_" /></figure><p>✨ <a href="https://www.therepository.email/">The Repository</a> — “What’s happening in WordPress — and what everyone’s saying about it.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*Jh1mZOBYUUz-V1lr" /></figure><p>✨ <a href="https://cfe.dev/newsletters/jamstacked/">JAMstacked</a> — “An email update on the evolving web development ecosystem.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*BESZF_4z0qHtKYj3" /></figure><p>✨ <a href="https://console.dev/latest">Console</a> — “A free weekly email digest of the best tools for developers.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/426/0*iREi0qn3YSuK5pxu" /></figure><p>✨ <a href="https://thewpweekly.com/">The WP Weekly</a> — “The Weekly Newsletter for WordPress Professionals.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/445/0*CIJTmtbhBO-CXVD3" /></figure><p>If you’re missing out on developer happenings, we highly recommend checking out these wonderful sources!</p><p>Over the next few weeks, I will be cleaning and analyzing the data for the Gulp team. We will be sharing the results here as soon as they are finalized, so keep your eyes peeled for the next blog post if you consider yourself a #dataisbeautiful nerd like myself. 🤓</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vTsuu0DLSOVu1J0b" /><figcaption>Photo by <a href="https://unsplash.com/@aaronburden?utm_source=medium&amp;utm_medium=referral">Aaron Burden</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fe9b0b2acf32" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/thats-a-wrap-fe9b0b2acf32">That’s a Wrap!</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing the Gulp Developer Survey]]></title>
            <link>https://medium.com/gulpjs/introducing-the-gulp-developer-survey-cc227fc2fb6d?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/cc227fc2fb6d</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[gulp]]></category>
            <dc:creator><![CDATA[Clarissa Abidog]]></dc:creator>
            <pubDate>Tue, 07 May 2024 02:02:18 GMT</pubDate>
            <atom:updated>2024-05-07T02:02:18.209Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*A_GhDcvAq9SQyF5f1gJwPg.png" /><figcaption><a href="https://www.surveyhero.com/c/ctrpnqkr">Take the survey before May 31st</a></figcaption></figure><h4><strong>Keep it Simple 🤝</strong></h4><p>Gulp has come a long way since its humble beginnings a decade ago. In that time, gulp has remained dedicated to simplicity despite the competition for “one tool to build them all.” The gulp team has a clear mission, and they want to do it well. The v5 release ushers in a new phase of gulp development, and to that end, they’ve decided to work with me to seek feedback from the gulp community. Many tech communities for tools, frameworks, and beyond host a “State of” survey regularly, and gulp is now joining the fray.</p><h4><strong>Who Am I? 🙋🏽‍♀️</strong></h4><p>Hi, I’m Claire! I recently started working with the gulp team to guide them through creating, deploying, and analyzing their developer survey. I have a background in academia as well as non-profit education and leadership. I am excited to be applying my research skills to the needs of the gulp team as I enter the open source realm.</p><h4><strong>The Survey ✍️</strong></h4><p>We invite you to help us explore the needs of the gulp community above and beyond the issues on GitHub by completing the Gulp Developer Survey before May 31st. Your responses to the survey will provide the gulp team with valuable insights in future directions, features, and long-term sustainability.</p><blockquote><strong><em>Quick Facts</em></strong></blockquote><blockquote><em>✨ The Gulp Developer Survey is available on desktop, tablet, and mobile.</em></blockquote><blockquote><em>✨ The survey is anonymous.</em></blockquote><blockquote><em>✨ It takes the average participant ~15 minutes to complete the survey.</em></blockquote><blockquote><em>✨ We’re inviting responses from everyone: current users, previous users, professional users, new or interested users, and all folks in between.</em></blockquote><blockquote><em>✨ Most questions are multiple choice; however, there are a few open ended questions and we invite you to use those to share your ideas with the team.</em></blockquote><blockquote><em>✨ There is only one required question, so all other questions are optional.</em></blockquote><blockquote><em>✨ This year’s survey is only available in English, but we’ve included a question to understand what other languages our global community needs for the future.</em></blockquote><h4><strong>Opt-In (or don’t 👍)</strong></h4><p>At the end of the survey, you will be redirected to a page to collect an email address if you are interested in any follow-up participation. This is completely optional and is not connected to the survey to keep your responses anonymous. It is a space to opt-in to contact if we decide to host more personal feedback sessions such as focus groups or interviews. Numbers only get us so far and we recognize how tedious open ended questions can get, which is why we limited them. Regardless, we totally understand if you don’t want your email on another list.</p><h4><strong>Final Words 🗺️</strong></h4><p>The last day to complete the Gulp Developer Survey is May 31st. We encourage you to share it out to your communities however you please. In the spirit of open source, <em>we really can’t do this without you!</em> So whether you use the new version, an old version, or have moved away from gulp entirely, we hope you’ll take the time to contribute to the project’s future direction. Once the results are collected and analyzed, we’ll share them out with everyone here on the blog. We are excited for the ideas your feedback will bring, and we look forward to going on this adventure with you.</p><h4><a href="https://www.surveyhero.com/c/ctrpnqkr"><strong>TAKE THE SURVEY HERE</strong></a></h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cc227fc2fb6d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/introducing-the-gulp-developer-survey-cc227fc2fb6d">Introducing the Gulp Developer Survey</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing Gulp v5]]></title>
            <link>https://medium.com/gulpjs/announcing-gulp-v5-c67d077dbdb7?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/c67d077dbdb7</guid>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[nodejs]]></category>
            <dc:creator><![CDATA[Blaine Bublitz]]></dc:creator>
            <pubDate>Fri, 29 Mar 2024 02:59:15 GMT</pubDate>
            <atom:updated>2024-03-29T02:59:15.474Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*KYPCCbmXSBhv_h9f" /><figcaption>Photo by <a href="https://unsplash.com/@leekos?utm_source=medium&amp;utm_medium=referral">Kostiantyn Li</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>It’s been a long road to gulp 5, but we’re finally here! This release contains four years worth of work on over 60 projects. Together, the team has closed over 200 issues and pull requests. 🤯</p><h3>Streamx</h3><p>From the very beginning, gulp has been built around streams. In gulp 5, we’ve switched over to <a href="https://github.com/mafintosh">mafintosh’s</a> excellent <a href="https://github.com/mafintosh/streamx">streamx</a> library. Streamx has many advantages over Node.js core streams, including handling both object and buffer mode transparently and error handling on the `pipe()` function.</p><p>We hope to find time to do more writing about this delightful stream implementation, but most users shouldn’t notice a difference because streamx strives for compatibility with Node.js core streams. We want to thank Mathias for his help and bug fixes throughout the development of gulp 5! Please consider <a href="https://github.com/sponsors/mafintosh">sponsoring</a> his work.</p><h3>Dependencies</h3><p>A primary focus of this release was reducing our dependency tree and consolidating it to mostly things we maintained. Many dependencies we previously used became unmaintained since gulp 4 was released, so we’ve either removed them or taken on maintenance responsibilities.</p><p>The <a href="https://github.com/gulpjs">gulpjs</a> GitHub organization has grown to over 70 repositories. This fine-grain separation allows us to make small fixes quickly, and many other projects can rely on a subset of our packages. However, the trade-off is that it takes awhile for us to make sweeping changes across the project.</p><h3>Breaking changes</h3><p>It wouldn’t be a SemVer major release without breaking changes. We hope these breaking changes cause little or no problems when users upgrade, but you should be aware of what has changed.</p><p>With such a large release, I’m only scraping the surface on the changes here, so please check out both our <a href="https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#500-2024-03-25">combined changelog</a> and individual <a href="https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#individual-changelogs">project changelogs</a> if you encounter anything that seems different.</p><h4>Stream encoding</h4><p>Our streams now default to UTF-8 encoding. Previously, our streams took whatever data was emitted without considering any encoding. However, in this release, we resolved a 10 year old <a href="https://github.com/gulpjs/vinyl-fs/issues/23">issue</a> to support custom encodings and we default these to UTF-8. Most usage of gulp won’t need to change anything, but certain plugins may produce non-UTF-8 output and you’ll need to set `{ encoding: false }` on your gulp streams.</p><h4>Globs</h4><p>We’ve also standardized our globbing library across all APIs. Previously, `src()` used the node-glob library and `watch()` used the anymatch library via chokidar. Over the years, we’ve had many issues opened because certain globs didn’t work the same between these functions. As of gulp 5, we consistently use anymatch for glob support.</p><p>Additionally, we no longer support “ordered globs”. An “ordered glob” was the ability to apply globs in order, such that a negative glob could be overridden by a positive glob that came later in the array. This isn’t common in other globbing libraries, so all negative globs will filter paths from all positive globs to standardize with the ecosystem. If you need ordered streams, we provide the <a href="https://github.com/gulpjs/ordered-read-streams">ordered-read-streams</a> library.</p><h4>CLI</h4><p>We’ve added loaders for `swc`, `esbuild`, and `sucrase`. A lot of users asked us to support `.mjs` and `.cjs` extensions, so both of those are available now. In streamlining our dependency tree, we’ve removed a lot of legacy and deprecated loaders. If you were using some of the more obscure loaders we supported, you may need to change to something more modern.</p><p>We’ve finally removed the ` — verify` flag since we stopped maintaining the plugin banlist a long time ago, and we needed to rename ` — require` to ` — preload` to avoid conflicting with a Node.js flag.</p><h4>Logging</h4><p>Any plugins using `gulplog` will need to upgrade from v1 to v2 and we’ll emit a deprecation warning if v1 is used.</p><h3>Node Support</h3><p>We’ve long said that gulp is stable software, and we care about supporting as many users as possible. Gulp 4 had an explicit goal of supporting users on Node.js v0.10 because it was widely used at the time of release. Ten years later, the platform has grown and JavaScript has evolved, Node.js now has new stable releases every 6 months with an LTS duration of 30 months on any version. These new versions have features we want to leverage to make gulp better and even more stable, so we’ve dropped support for any version of Node.js below v10.13.0.</p><p>Constraining our supported Node.js version has allowed us to drop a lot of platform and JavaScript shims from our dependency tree. A lot of these have gone unmaintained or cause issues to be raised by scanners. We’re still supporting a version of Node.js released in 2018 (and outside of the LTS window) in hope that all our users can upgrade to gulp 5 smoothly.</p><p>Finally, we’ve had a fair bit of churn on our infrastructure between v3, v4, and v5 because we have long considered Windows, Mac, and Linux to be priority platforms. It took a long time to find a continuous integration service that consistently supported all these operating systems and was easy to use. We’ve spent considerable time stabilizing our infrastructure around GitHub Actions, which has support for our primary targets and allows us to leverage tools like <a href="https://github.com/google-github-actions/release-please-action">release-please</a>.</p><h3>Onward</h3><p>There is always more work to be done. In the coming weeks, I’ll be triaging our <a href="https://github.com/orgs/gulpjs/projects/5/views/1">post-v5 project board</a> and creating a discussion for non-breaking follow up work. We plan to keep gulp 5 stable for a while before we begin planning the next major version, which will allow us to patch any problems that come up.</p><p>We’re also putting together a survey to get feedback from the broader community. Keep an eye out for our announcement around May.</p><p>For now, we hope you enjoy the new release and welcome you to contribute to the project or <a href="https://github.com/sponsors/gulpjs">sponsor</a> our work!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c67d077dbdb7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/announcing-gulp-v5-c67d077dbdb7">Announcing Gulp v5</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ Version 4.0 Now Default  ]]></title>
            <link>https://medium.com/gulpjs/version-4-now-default-92c6cd4beb45?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/92c6cd4beb45</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[gulpjs]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Mon, 10 Dec 2018 17:21:02 GMT</pubDate>
            <atom:updated>2018-12-10T17:21:02.580Z</atom:updated>
            <content:encoded><![CDATA[<h3>🎉 Version 4.0 Now Default 🎉</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cnizGeCH_X8U7J3AkoqSqw.png" /></figure><p>For the past year, version 4.0 has been <a href="https://www.npmjs.com/package/gulp">published to npm</a> and could be installed using npm install gulp@next. Today, it’s being promoted from “next” to “latest” which means it will be installed by default when you run npm install gulp. With this, all previous versions are <em>soft</em> deprecated and will become <em>hard</em> deprecated in the coming months.</p><h4>What’s new in 4.0?!</h4><ul><li>The task system was rewritten from the ground-up, allowing task composition using series() and parallel() methods</li><li>The watcher was updated, now using chokidar (no more need for gulp-watch!), with feature parity to our task system</li><li>First-class support was added for incremental builds using lastRun()</li><li>A symlink() method was exposed to create symlinks instead of copying files</li><li>Built-in support for sourcemaps was added — the gulp-sourcemaps plugin is no longer necessary!</li><li>Task registration of exported functions — using node or ES exports — is now recommended</li><li>Custom registries were designed, allowing for shared tasks or augmented functionality</li><li>Stream implementations were improved, allowing for better conditional and phased builds</li></ul><p>We’ve written a new <a href="https://gulpjs.com/docs/en/getting-started/quick-start">Getting Started guide</a> and <a href="https://gulpjs.com/docs/en/api/concepts">API docs</a> to smooth the transition between versions. We hoped to have updated recipes, advanced topics, and a migration guide written before this release, but have yet to secure funding to finish them.</p><p>If your company is interested in funding the future of gulp documentation, <a href="mailto:team@gulpjs.com">let us know</a>! Or if you need help upgrading, check out our <a href="https://medium.com/gulpjs/announcing-official-gulp-consulting-8c6ec636f0b9">Official Gulp Consulting</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=92c6cd4beb45" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/version-4-now-default-92c6cd4beb45">🎉 Version 4.0 Now Default  🎉</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing Official Gulp Consulting]]></title>
            <link>https://medium.com/gulpjs/announcing-official-gulp-consulting-8c6ec636f0b9?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/8c6ec636f0b9</guid>
            <category><![CDATA[webpack]]></category>
            <category><![CDATA[consulting]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[typescript]]></category>
            <category><![CDATA[gulp]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Tue, 30 Oct 2018 20:51:43 GMT</pubDate>
            <atom:updated>2018-10-30T20:53:12.000Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nBDwGquz4aqxyN4UJ_ASag.png" /></figure><p>Build tools have become mandatory in the JavaScript ecosystem, but not everyone has time to keep up with the newest build tools or setup the most efficient processes. We’ve tried to simplify working with gulp by creating a <a href="https://gulpjs.com/docs/en/getting-started/quick-start">Getting Started Guide</a> and thorough <a href="https://gulpjs.com/docs/en/api/concepts">API docs</a>. Unfortunately, that’s not enough for everyone.</p><p>Throughout the last four years, we’ve performed complementary audits for open source projects and private companies. In that time, we’ve reviewed various build processes and gulpfiles at every scale. All of this has helped us move gulp forward and design the best patterns to benefit as many people as possible.</p><p>Unfortunately, we aren’t able do this work for free anymore, so we’re offering personalized gulp consulting to improve your workflows! We can work with you to:</p><ul><li>Upgrade from gulp 3 to 4 using our new recommended patterns</li><li>Audit your existing build processes</li><li>Determine which build tools best fit your needs — not just gulp</li><li>Write custom plugins to speed up workflows or handle custom cases</li><li>Discuss any other ideas you have!</li></ul><p>Funding received from consulting will help us continue to work on gulp. Contact us at <a href="mailto:consulting@gulpjs.com">consulting@gulpjs.com</a> to start improving your build process!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8c6ec636f0b9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/announcing-official-gulp-consulting-8c6ec636f0b9">Announcing Official Gulp Consulting</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Interview with Blaine Bublitz]]></title>
            <link>https://medium.com/gulpjs/gulp4-interview-with-blaine-bublitz-d94bfaa7dc78?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/d94bfaa7dc78</guid>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[open-collective]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Fri, 19 Jan 2018 22:04:13 GMT</pubDate>
            <atom:updated>2018-01-19T22:04:12.749Z</atom:updated>
            <content:encoded><![CDATA[<h4>With the release of gulp 4, I thought you all might be interested in hearing about it from the lead maintainer!</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YzQgAOfN1jrTQVj5ddd2PQ.jpeg" /><figcaption>Working on gulp in the Andes.</figcaption></figure><p><strong>Congratulations on the Gulp release! What would you say your favorite feature is?</strong></p><p>Thanks!</p><p>Oh, wow — there’s just so much! Most people will really enjoy and benefit from gulp.series and gulp.parallel; however, I really like <a href="https://github.com/gulpjs/gulp#sample-gulpfilejs">exporting tasks</a> and <a href="https://github.com/gulpjs/gulp#incremental-builds">incremental builds</a>.</p><p>I’m going to be giving a talk in February about all the new features; watch the gulp <a href="https://twitter.com/gulpjs">twitter</a> for the slides in a few weeks.</p><p><strong>It’s been in development about 3 years. What took so long?</strong></p><p>For a lot of the development time, I’ve been the only person working on it. Within the last year or so, a few people (shoutout to <a href="https://github.com/erikkemperman">erikkemperman</a>, <a href="https://github.com/sttk">sttk</a>, and the rest of our core contributors) have come in to help out on some of the stickiest problems. They’ve also really kept me motivated.</p><p>Working on something this big, by myself, it’s really easy to burn out. This has pretty much been my only (unpaid) job for a year. I definitely burnt out multiple times during the development process and had to step away. It’s much more enjoyable to work on a project when other community members are involved.</p><p>Gulp is always looking for contributors. Soon, we’ll be rolling out a process to onboard people to the core team to take on parts of the project.</p><p><strong>Open Source is driven by community involvement. What do you need help with right now?</strong></p><p>We REALLY need help with documentation. That’s our biggest thing right now. All of our dependencies have been fully documented, but none of it has been pulled into the main repo &amp; contextualized for gulp.</p><p>Of course, there are some bugs that are being sorted out. I just fixed a frustrating one this week — you shouldn’t see “Premature Close” errors anymore. If you encounter a bug, definitely let us know, with as much detail as possible.</p><p><a href="https://github.com/demurgos">Demurgos</a> and other community members have made a ton of progress on the <a href="https://github.com/gulpjs/gulp-util/issues/143">gulp-util migration</a>. But there’s still a lot of work to do because many plugins don’t function properly with gulp 4. <em>(Editor’s Note: see </em><a href="https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5"><em>The Problem with gulp-util</em></a><em> to help out.)</em></p><p><strong>When I install gulp, I get version 3.9.1. Why don’t I get 4.0.0 by default?</strong></p><p>While it’s published to npm, you have to use the command npm install gulp@next to get 4.0. There are going to be migration pains, so we didn’t want to install it by default for a brand new user. Before we make it the default, I’d like to have an official migration guide in place and do a full review and/or rewrite of the docs.</p><p><strong>When will it install by default?</strong></p><p>I don’t have any timelines because documentation is very hard to get right. <a href="https://github.com/SomethingNew71">SomethingNew71</a> is working on website improvements that will display our docs so you don’t have to read from the markdown files.</p><p><strong>Gulp is a combination of small libraries. Did you write any new ones that the world should know about?</strong></p><p>Yeah! I’m really happy with a library that I created a while ago called <a href="https://github.com/gulpjs/async-done">async-done</a>. It’s really cool because it allows us to handle all sorts of different types of async operations uniformly. This module is what enables you to return promises, streams, or observables, among other things, from gulp tasks and orchestrate whether they should be run in series or parallel. But it doesn’t just apply to gulp; you can use it with things like the async library on npm. There are already a handful of non-gulp projects using async-done and I hope others adopt it.</p><p><strong>If I don’t have the time or technical prowess to help out with code or docs, how else can I contribute to make sure gulp thrives?</strong></p><p>We have an <a href="https://opencollective.com/gulpjs">Open Collective</a> where anyone can donate! We have things like a t-shirt tier and even display the top 10 donors on our <a href="https://gulpjs.com/">website</a>. So there are benefits for you and/or your employer to donate.</p><p><strong>Thanks </strong><a href="https://github.com/phated"><strong>Blaine</strong></a><strong>!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d94bfaa7dc78" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/gulp4-interview-with-blaine-bublitz-d94bfaa7dc78">Interview with Blaine Bublitz</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Problem with gulp-util]]></title>
            <link>https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/ca3b1f9f9ac5</guid>
            <category><![CDATA[vinyl]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[gulp-util]]></category>
            <category><![CDATA[gulp]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Wed, 27 Dec 2017 22:05:45 GMT</pubDate>
            <atom:updated>2017-12-29T22:02:36.572Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/912/1*ypD77e40pq9FVHsjWrizIg.png" /><figcaption>Seeing this message?</figcaption></figure><h4><strong>A little postmortem</strong></h4><p>Last week we made gulp v4.0.0-alpha.3 available on GitHub and people are excited! We expected it to be <a href="https://github.com/gulpjs/gulp/commit/99bdc9ead25ff02dd2309991eea3ebdb60ab8080">breaking</a>, but we didn’t realize the far reaching impact of the changes. This is due to 6,752 modules that depend on gulp-util; many of which utilize an extremely outdated version of Vinyl.</p><p>Help us fix it using the steps <a href="https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5#635d">below</a>.</p><h4><strong>Why deprecation now?</strong></h4><p>We’ve been planning to deprecate gulp-util since <a href="https://github.com/gulpjs/gulp/issues/360">2014</a> because it’s just grab-bag of modules. Why would you want to download the <a href="https://github.com/gulpjs/gulp-util/blob/master/index.js#L9">beeper</a> module if you’re only using gulp-util for logging? It drastically increases the download size of plugins and gulp itself. We had hoped people would transition to smaller modules, but it seems everyone continued with the status quo.</p><p>We planned to deprecate using an easier transition path, but last week’s changes proved it’s a bigger problem than we anticipated. The outdated Vinyl dependency is incompatible, but still used by many plugins. However, v2 of Vinyl won’t ship with gulp-util because we want plugin authors to transition to individual modules.</p><p>This has lead us to flag the module on npm with a warning — not the elegant transition we had hoped. You’ll be notified of the deprecation when gulp-util is installed by one of your plugins, but you won’t know which plugin is causing the warning until you follow the fix below.</p><p>It’s possible that a plugin using gulp-util isn’t broken if it’s not using the gutil.File <a href="https://github.com/gulpjs/gulp-util#new-fileobj">API</a>. While not as urgent, the plugin author should still transition away from gulp-util.</p><h4><strong>Help us fix the ecosystem</strong></h4><p>Using these steps, you can help plugin authors migrate away from gulp-util.</p><ol><li>Run npm ls gulp-util to get the list of plugins dependent on it.</li><li>For each dependent plugin, run npm issues {PLUGIN NAME} which will open their issue tracker.</li><li>Open an issue or pull request to remove gulp-util using the following API replacements:</li></ol><ul><li>gutil.File =&gt; <a href="https://www.npmjs.com/package/vinyl">https://www.npmjs.com/package/vinyl</a></li><li>gutil.replaceExtension =&gt; The .extname property on Vinyl objects or <a href="https://www.npmjs.com/package/replace-ext">https://www.npmjs.com/package/replace-ext</a></li><li>gutil.colors =&gt; <a href="https://www.npmjs.com/package/ansi-colors">https://www.npmjs.com/package/ansi-colors</a></li><li>gutil.date =&gt; <a href="https://www.npmjs.com/package/date-format">https://www.npmjs.com/package/date-format</a></li><li>gutil.log =&gt; <a href="https://www.npmjs.com/package/fancy-log">https://www.npmjs.com/package/fancy-log</a></li><li>gutil.template =&gt; <a href="https://www.npmjs.com/package/lodash.template">https://www.npmjs.com/package/lodash.template</a></li><li>gutil.env =&gt; <a href="https://www.npmjs.com/package/minimist">https://www.npmjs.com/package/minimist</a></li><li>gutil.beep =&gt; <a href="https://www.npmjs.com/package/beeper">https://www.npmjs.com/package/beeper</a></li><li>gutil.noop =&gt; <a href="https://www.npmjs.com/package/through2">https://www.npmjs.com/package/through2</a></li><li>gutil.isStream =&gt; Use the .isStream() method on Vinyl objects</li><li>gutil.isBuffer =&gt; Use the .isBuffer() method on Vinyl objects</li><li>gutil.isNull =&gt; Use the .isNull() method on Vinyl objects</li><li>gutil.linefeed =&gt; Use the string &#39;\n&#39; in your code</li><li>gutil.combine =&gt; <a href="https://www.npmjs.com/package/multipipe">https://www.npmjs.com/package/multipipe</a></li><li>gutil.buffer =&gt; <a href="https://www.npmjs.com/package/list-stream">https://www.npmjs.com/package/list-stream</a></li><li>gutil.PluginError =&gt; <a href="https://www.npmjs.com/package/plugin-error">https://www.npmjs.com/package/plugin-error</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ca3b1f9f9ac5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5">The Problem with gulp-util</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: How We Use Streams]]></title>
            <link>https://medium.com/gulpjs/gulp-sips-how-we-use-streams-d7790b22bf1a?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/d7790b22bf1a</guid>
            <category><![CDATA[stream]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[gulp-sips]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Tue, 31 Oct 2017 18:12:10 GMT</pubDate>
            <atom:updated>2017-10-31T18:12:09.750Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/997/0*8RcEeIzUTEhoGLgm." /><figcaption>Plugins strictly spooky.</figcaption></figure><p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p><h3>Two Types of Streams</h3><p>In Node, streams can operate in one of two modes; for the purposes of gulp, the two modes are incompatible.</p><ul><li>Buffer mode: Operates exclusively on buffered data. If we stream a file in this mode, it would <em>only</em> contain the content of the file. We’d even lose the filename.</li><li>Object mode: Accepts any object flowing through it. A file streamed in object mode can contain all sorts of metadata (filename, stats, etc.), along with the content.</li></ul><h3>Benefits of Object Mode</h3><p>In buffer mode, using something like fs.createReadStream(&#39;index.js&#39;), you’d have to operate on a singular file.</p><p>Instead, we utilize streams in object mode so we can operate on multiple files using a single stream. For example, gulp.src(&#39;*.js&#39;) reads all files ending in .js and emits each as an object on the stream.</p><p>For every file, we track a lot of metadata along with the content. This allows plugins to operate upon any of that metadata before we write it out to disk.</p><p>There are ways to convert between types, but they require external modules, like <a href="https://www.npmjs.com/package/vinyl-source-stream">vinyl-source-stream</a>.</p><h3>Utilizing Gulp Plugins</h3><p>Every gulp plugin should be a Transform stream in object mode. These streams understand and operate on gulp’s data, while streams operating in buffer mode would throw an error.</p><p>Generally, a gulp stream begins with gulp.src() and terminates with gulp.dest(). For best results, streams between should be a gulp plugin or a stream that understands <a href="https://github.com/gulpjs/vinyl#what-is-vinyl">Vinyl</a> objects.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7790b22bf1a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/gulp-sips-how-we-use-streams-d7790b22bf1a">Gulp Sips: How We Use Streams</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: Custom Task Metadata]]></title>
            <link>https://medium.com/gulpjs/gulp-sips-custom-task-metadata-9a2dc80ac7b1?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/9a2dc80ac7b1</guid>
            <category><![CDATA[gulp-sips]]></category>
            <category><![CDATA[gulp]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[command-line]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Wed, 16 Aug 2017 21:48:04 GMT</pubDate>
            <atom:updated>2017-08-16T21:48:04.192Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9UVnOr5BllyIvxrv." /></figure><p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p><h3>Descriptions and Flags</h3><p>Our users frequently requested the ability to add descriptions to their gulp tasks. The suggested solution was to add a method like gulp.description(); however, we didn’t want to expand our API surface and wanted to support documenting custom flags.</p><p>We searched for a more elegant solution and found the most flexible option was attaching static properties to task functions containing the custom metadata. So, you can leverage existing language features instead of custom APIs. It also allows us to support other types of metadata in the future.</p><h3><strong>Supported Properties</strong></h3><ul><li>.description: Assign a string description to your task function.</li></ul><pre>function clean() { … }<br>clean.description = &#39;Cleans up generated files.&#39;;</pre><ul><li>.flags: Assign an object of flags to your task function. Each key should be a flag and its value should be the description of that flag.</li></ul><pre>function build() { … }<br>build.flags = {<br>  &#39;--prod&#39;: &#39;Builds in production mode.&#39;<br>};</pre><h3><strong>Put It All Together</strong></h3><p>Before you get started, ensure that you are using gulp-cli as described in this previous <a href="https://medium.com/gulpjs/gulp-sips-command-line-interface-e53411d4467">Sip</a>.</p><p>You’ll want your gulpfile to look similar to this:</p><pre>var gulp = require(&#39;gulp&#39;);<br>function build() { … }<br>build.description = &#39;Build entire project.&#39;;<br>build.flags = {<br>  &#39;—-prod&#39;: &#39;Builds in production mode (minification, etc).&#39;<br>};</pre><pre>//If you are using gulp 3.x:</pre><pre>gulp.task(&#39;build&#39;, build);</pre><pre>//Or if you’ve updated to gulp 4.x</pre><pre>gulp.task(build);</pre><p>Now run gulp --tasks to see your descriptions and flags. It should look somewhat like the screenshot above the title!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9a2dc80ac7b1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/gulp-sips-custom-task-metadata-9a2dc80ac7b1">Gulp Sips: Custom Task Metadata</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: New Command Line Interface]]></title>
            <link>https://medium.com/gulpjs/gulp-sips-command-line-interface-e53411d4467?source=rss----4174503dfd30---4</link>
            <guid isPermaLink="false">https://medium.com/p/e53411d4467</guid>
            <category><![CDATA[command-line]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[gulp-sips]]></category>
            <category><![CDATA[gulpjs]]></category>
            <category><![CDATA[gulp]]></category>
            <dc:creator><![CDATA[Janiceilene]]></dc:creator>
            <pubDate>Mon, 10 Jul 2017 19:21:45 GMT</pubDate>
            <atom:updated>2017-07-12T19:22:11.837Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S0AW_-QmPVhncselL0mM8Q.png" /></figure><p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p><h3><strong>A Standalone CLI</strong></h3><p>Traditionally, you’ve run your tasks using the gulp command installed by the main gulp package on npm. However, we’ve moved away from coupling the CLI and library together. The CLI now lives in the gulp-cli <a href="https://www.npmjs.com/package/gulp-cli">package</a>.</p><h3><strong>But why?</strong></h3><p>This was set into motion because we needed to support versions 3 &amp; 4 (upcoming), even though the two were vastly different. An added benefit is a reduction in the size of global installation.</p><p>We were also able to version separately from the main package, allowing for features and bug fixes without impacting your workflow. Many of those features will be topics of upcoming Sips, including adding custom metadata to tasks and utilizing configuration files.</p><h3><strong>Use it now!</strong></h3><p>If you’ve globally installed gulp before, you’ll want to remove the old version. To check your version, run:</p><pre>gulp -v</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*7nkP1HJpMefx74a6yPZo4g.png" /><figcaption>Ideal results of gulp -v</figcaption></figure><p>If you don’t see CLI Version 1.x (as shown above), remove your old installation by running:</p><pre>npm rm --global gulp</pre><p>Now, you can install the standalone CLI using:</p><pre>npm install --global gulp-cli</pre><p>Run gulp -v again. Everything should match the screenshot above.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e53411d4467" width="1" height="1" alt=""><hr><p><a href="https://medium.com/gulpjs/gulp-sips-command-line-interface-e53411d4467">Gulp Sips: New Command Line Interface</a> was originally published in <a href="https://medium.com/gulpjs">gulpjs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>