CINXE.COM
The RunKit Blog
<html class="css-1n8hie0"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><title>The RunKit Blog</title><link href="/assets/css/bootstrap-reboot.min.css" rel="stylesheet"/><link href="/assets/fontawesome/css/fontawesome-all.min.css" rel="stylesheet"/><link href="/assets/typography.css" rel="stylesheet"/><script src="/assets/fluid-typography.js" data-classes="fluid-content, fluid-title-35, fluid-title"></script><link rel="canonical"/><style>@media (max-width:414px){.css-1n8hie0 .fluid-title-35,.css-1n8hie0 .fluid-title{margin-top:20px;font-weight:300;}}.css-1n8hie0 .margins{margin:0 auto;max-width:760px;padding:0 30px;}@support (padding:max(0px)){.css-1n8hie0 .margins{padding-left:max(30px,env(safe-area-inset-left));padding-right:max(30px,env(safe-area-inset-right));}}.css-1n8hie0 main code.inline{color:rgba(164,115,221,1.0);background:rgba(246,247,252,1.0);font-family:Menlo,Monaco,Consolas,"Courier New",monospace;border-radius:5pt;font-size:0.77em;padding:0.33em .55em;}.css-1n8hie0 main p{margin-bottom:1.2em;}.css-1n8hie0 main h1{font-weight:bolder;font-size:1.2em;}.css-1n8hie0 main h2{margin-top:1em;font-size:1.2em;font-weight:bolder;}.css-1n8hie0 main{position:relative;color:#333;background:white;width:100%;z-index:1;padding-top:3rem;}.css-gljlji{position:static;height:300px;}@media (max-width:414px){.css-gljlji{height:250px;}}.css-1b2xhp1{position:relative;width:100%;height:100%;z-index:3;color:white;text-shadow:0px 1px black;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-1021pn{position:fixed;width:100%;top:0;left:0;z-index:0;height:inherit;overflow:hidden;false;}.css-1m25gwu{background:url(/assets/poster-header.jpg);background-size:cover;background-position:center 0;position:absolute;-webkit-filter:blur(10px);filter:blur(10px);top:-15px;left:-15px;width:calc(100% + 30px);height:calc(100% + 30px);}.css-1xbd9xr{width:100%;height:100%;background:rgba(0,0,0,0.5);}.css-1hqvogr{position:fixed;width:100%;top:0;left:0;z-index:2;height:40px;overflow:hidden;}@media (max-width:414px){.css-1hqvogr{display:none;}}.css-1feqlpg{position:fixed;width:100%;top:0;left:0;z-index:4;height:40px;overflow:visible;opacity:0.5;}@media (max-width:414px){.css-1feqlpg{display:none;}}.css-1l7y7sy{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;overflow:hidden;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;height:40px;list-style-type:none;text-transform:capitalize;color:white;margin:0;padding:0 30px;}.css-1l7y7sy > *{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media{.css-1l7y7sy{position:fixed;left:0;top:0;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-1l7y7sy .logo-container{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;font-size:20px;}}@support (padding:max(0px)){.css-1l7y7sy{padding-left:max(30px,env(safe-area-inset-left));padding-right:max(30px,env(safe-area-inset-right));}}@media (max-width:414px){.css-1l7y7sy{position:absolute;font-size:12px;}.css-1l7y7sy .logo-container{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:initial;}}.css-1l7y7sy li{display:inline;margin:0.5em;}.css-1l7y7sy li:first-child{margin-left:0;}.css-1l7y7sy li:last-child{margin-right:0;}.css-1l7y7sy a,.css-1l7y7sy a:visited,.css-1l7y7sy a:active{color:white;text-transform:uppercase;text-decoration:none;font-weight:bold;}.css-1liba5v{padding-left:1.3em;height:1em;padding-bottom:2px;background:url(/assets/logo-large.png);background-repeat:no-repeat;background-position:left bottom;background-size:contain;}.css-qv45bh{width:90%;text-align:center;margin:40px auto;}.css-qv45bh img{vertical-align:middle;max-width:100%;}.css-qv45bh figcaption{font-size:0.9rem;font-style:italic;margin-top:10px;color:#555;}.css-12ev6iw{text-align:center;margin:1em 0;}.css-5ko0u5{margin:1em;}.css-1puq874{background:#f8f8f9;border:1px solid #eee;margin:2em 0;padding:2em 0;}.css-q3dtf7{text-align:center;font-size:0.7em;margin:2em 0;}.css-xdx4gc{margin:40px 0;}.css-1xo5moz{margin-bottom:2em;}.css-h773az{margin-bottom:1.5em;}.css-11pcyye{margin:0;line-height:1em;}.css-1ng0zxs,.css-1ng0zxs:visited,.css-1ng0zxs:hover{color:inherit;text-decoration:none;}.css-6ljq81{color:#848383;font-size:80%;}</style></head><body><header class="css-gljlji"><div class="css-1021pn"><div class="css-1m25gwu"><div class="css-1xbd9xr"></div></div></div><div class="css-1hqvogr"><div class="css-1m25gwu"><div class="css-1xbd9xr"></div></div></div><div class="css-1b2xhp1"><div class="margins"><h1 class="fluid-title-35">The RunKit Blog</h1></div></div><div class="css-1feqlpg"><div class="css-1m25gwu"><div class="css-1xbd9xr"></div></div></div><ul class="css-1l7y7sy" style="z-index:5"><li class="logo-container"><a href="https://runkit.com/home"><img class="css-1liba5v logo" src="/assets/logotype.svg"/></a></li><li><a href="http://blog.runkit.com">Blog</a></li><li><a href="https://runkit.com/about">About</a></li><li><a href="https://discuss.runkit.com">Discuss</a></li><li><a href="https://runkit.com/login">Log In</a></li></ul></header><main><div class="margins fluid-content"><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2018/12/10/runkit-content-attachments-on-github/">RunKit content attachments on GitHub</a></h1><time dateTime="2018-12-10T16:00:00-08:00" class="css-6ljq81">December 10th, 2018</time> <a href="http://blog.runkit.com/2018/12/10/runkit-content-attachments-on-github/">∞</a></header><p>Today we're excited to announce RunKit integration with GitHub's new <a href="https://blog.github.com/2018-12-10-introducing-content-attachments-api/">content attachment api</a>. We think linking to a RunKit notebook <a href="http://blog.runkit.com/2017/02/01/stop-filing-bugs-file-a-container/">in a bug report</a> is a great way to file reproducible bugs on a project.</p><p>Now when you link to a RunKit notebook, the contents of that notebook will be inlined right there in the issue or pull request!</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2018/12/10/runkit-content-attachments-on-github/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2018/02/06/runkit-is-joining-tc39/">RunKit is Joining TC39 to Focus on Interactive Programming</a></h1><time dateTime="2018-02-05T16:00:00-08:00" class="css-6ljq81">February 5th, 2018</time> <a href="http://blog.runkit.com/2018/02/06/runkit-is-joining-tc39/">∞</a></header><p>The RunKit team is incredibly excited to be representing Stripe at <a href="https://www.ecma-international.org/memento/TC39.htm">TC39</a>! We hope to do our best to help JavaScript become an even better interactive programming experience.</p><p>At its core, RunKit is guided by the principle that the interactive programming models pioneered by environments like <a href="https://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a>, <a href="https://www.wolfram.com/mathematica/">Mathematica</a>, and <a href="http://jupyter.org">Jupyter</a> offer an important path to making development truly accessible. Although this model has already proven itself in the data-science and prototyping spaces, we think it has tremendous potential for every-day programming as well. The REPL's that ship with most modern languages today give us a glimpse of this already, but we think they are just barely scratching the surface of what's possible.</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2018/02/06/runkit-is-joining-tc39/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/08/08/embed-runkit-notebooks-with-embedly/">Embed RunKit Notebooks with Embed.ly and OEmbed</a></h1><time dateTime="2017-08-07T17:00:00-07:00" class="css-6ljq81">August 7th, 2017</time> <a href="http://blog.runkit.com/2017/08/08/embed-runkit-notebooks-with-embedly/">∞</a></header><p><a href="http://embed.ly">Embed.ly</a> now supports RunKit as a content provider, which means that you can now embed any RunKit notebook on sites like <a href="http://medium.com">Medium</a>, or any of the other <a href="embed.ly/customers">thousands</a> of companies that rely on Embed.ly for embedding dynamic content.</p><p><figure class="css-qv45bh"><img src="/2017/08/08/embed-runkit-notebooks-with-embedly/medium.gif" alt="An animation of adding a RunKit embed to a Medium document"/><figcaption>Just paste a RunKit URL into Medium</figcaption></figure></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/08/08/embed-runkit-notebooks-with-embedly/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/07/26/introducing-custom-value-viewers/">Introducing Custom Value Viewers</a></h1><time dateTime="2017-07-25T17:00:00-07:00" class="css-6ljq81">July 25th, 2017</time> <a href="http://blog.runkit.com/2017/07/26/introducing-custom-value-viewers/">∞</a></header><p>Since day one, RunKit has shipped with several fun ways to visualize your data including graphs, charts, and maps. Internally we call these "Value Viewers". As package maintainers you often know how to display your data better than we do. That's why today we're excited to announce we're opening up Value Viewers so developers can build their own!</p><p>This new API allows you to render any HTML for your viewer. To create a new viewer, simply require the <code class="inline">ValueViewerSymbol</code> from the <code class="inline">@runkit/value-viewer</code> package and use it to make a custom property on your objects. RunKit will look for this property and render a custom viewer if it's found. Here's an example we've created for displaying the weather in a more intuitive way than JSON (<a href="https://npm.runkit.com/zipcode-weather/index.js?engine=8.x.x">code available here</a>):</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/07/26/introducing-custom-value-viewers/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/07/18/bringing-documentation-to-life-on-expressjs-com/">Bringing Documentation to Life on Expressjs.com</a></h1><time dateTime="2017-07-17T17:00:00-07:00" class="css-6ljq81">July 17th, 2017</time> <a href="http://blog.runkit.com/2017/07/18/bringing-documentation-to-life-on-expressjs-com/">∞</a></header><p>We're incredibly excited to have recently integrated RunKit directly into expressjs.com's <a href="https://expressjs.com/en/starter/hello-world.html">Hello World tutorial</a>. The sample code in the tutorial itself is completely unchanged, but it has one major enhancement: the code is now <strong>live</strong>! When we say live, we mean that every time you load the page we're actually spinning up a real Linux server that is running that sample code, and instantly updating in response to your edits:</p><p><a href="https://expressjs.com/en/starter/hello-world.html"><figure class="css-qv45bh"><img src="/2017/07/18/bringing-documentation-to-life-on-expressjs-com/express.gif" alt="An animated screen capture of the new expressjs.com Getting Started page showing the starter example running in as a RunKit embed endpoint"/><figcaption>A server is started right on the expressjs.com Getting Started page!</figcaption></figure></a></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/07/18/bringing-documentation-to-life-on-expressjs-com/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/02/01/stop-filing-bugs-file-a-container/">Stop Filing Bugs, File a Container!</a></h1><time dateTime="2017-01-31T16:00:00-08:00" class="css-6ljq81">January 31st, 2017</time> <a href="http://blog.runkit.com/2017/02/01/stop-filing-bugs-file-a-container/">∞</a></header><p>RunKit notebooks are a great way to file bugs on GitHub. Since RunKit automatically packages your code with its entire environment in a Docker container, anyone can clone your bug and start investigating it live in seconds, without any setup or installation. Best of all, the bug will be completely reproducible and avoid the dreaded "works on my machine". Today we're excited to be improving this experience even further with a completely revamped UI for filing and analyzing issues on Node.js:</p><p><figure class="css-qv45bh"><img src="/2017/02/01/stop-filing-bugs-file-a-container/hero.png" alt="A screenshot of the new stack trace viewer of RunKit, specifically showing code from a stack frame inline in the viewer."/><figcaption>View code inline right in the stack frames </figcaption></figure></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2017/02/01/stop-filing-bugs-file-a-container/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/10/18/introducing-demokit/">Introducing DemoKit: Scriptable Product Demos</a></h1><time dateTime="2016-10-17T17:00:00-07:00" class="css-6ljq81">October 17th, 2016</time> <a href="http://blog.runkit.com/2016/10/18/introducing-demokit/">∞</a></header><p>Today we're open sourcing and releasing <a href="https://github.com/runkitdev/demokit">DemoKit</a>, our new Electron app for scripting product demos. Using the web technologies you're already familiar with, you can now record demos, tutorials, or any other videos that show off your products. Since the demos are scripted, you can check them into GitHub, incorporate feedback and changes, and even simply re-record them when your products visually change so they're never out of date. In order to help get you started, we're also open sourcing <a href="https://github.com/runkitdev/runkit-demo">RunKit's demo</a> that appears on our <a href="https://runkit.com/home">homepage</a>.</p><p><span><video src = "demo.mp4" webkit-playsinline = "" playsinline="" autoplay="" loop="" muted="" style= "display:block;width:100%;max-width:512px;margin:40px auto" /></span></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/10/18/introducing-demokit/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/09/13/tonic-is-now-runkit-a-part-of-stripe/">Tonic is now RunKit, a part of Stripe</a></h1><time dateTime="2016-09-12T17:00:00-07:00" class="css-6ljq81">September 12th, 2016</time> <a href="http://blog.runkit.com/2016/09/13/tonic-is-now-runkit-a-part-of-stripe/">∞</a></header><p>For the past year we've been taking a radical approach to development tools here at Tonic. Instead of treating IDEs, frameworks, and even languages as the fundamental building blocks for development, we decided to explore what it would mean to attack these problems at the system level. Could we make progress on some long standing development headaches by essentially beginning to build a <em>developer OS</em>?</p><p>We started by buidling <code class="inline">module-fs</code>, a virtual filesystem capable of representing the entire state of npm at any particular microsecond. With module-fs we could make every version of the over 300,000 packages on npm available instantly. With truly immediate and frictionless access to any package, you could begin to think of npm as the <em>global standard library</em>, as essential to development tomorrow as built-in libraries are today.</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/09/13/tonic-is-now-runkit-a-part-of-stripe/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/08/23/two-millionth-version/">Two-Millionth Version</a></h1><time dateTime="2016-08-22T17:00:00-07:00" class="css-6ljq81">August 22nd, 2016</time> <a href="http://blog.runkit.com/2016/08/23/two-millionth-version/">∞</a></header><p>While querying our database to get exact numbers for <a href="http://blog.runkit.com/2016/08/17/scoped-package-support.html">RunKit's announcement of scoped package support</a>, we realized npm recently passed an important milestone. So here's our belated card to celebrate the occasion.</p><p>Packages have multiple versions. npm currently has ~330,000 packages. Packages have, on average, 6.74 versions. Do the math, and that's over two million versions of packages.</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/08/23/two-millionth-version/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/08/17/scoped-package-support/">Scoped Package Support</a></h1><time dateTime="2016-08-16T17:00:00-07:00" class="css-6ljq81">August 16th, 2016</time> <a href="http://blog.runkit.com/2016/08/17/scoped-package-support/">∞</a></header><p>We've just deployed support for scoped packages on RunKit! Practically, this means we've added around <em>75,000 versions</em> of <em>11,800 packages</em>.</p><p>If you're not familiar with <a href="https://docs.npmjs.com/misc/scope">scoped packages</a>, they're just like normal packages except their name includes a namespace: <code class="inline">require("@namespace/package-name")</code>. This allows you to avoid collisions with existing packages. Although you may have never directly used one yourself, many are included as dependencies in other packages. Try it out right here:</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/08/17/scoped-package-support/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/03/09/snapshots/">Building "Interesting" Previews on Demand with RunKit Endpoint</a></h1><time dateTime="2016-03-08T16:00:00-08:00" class="css-6ljq81">March 8th, 2016</time> <a href="http://blog.runkit.com/2016/03/09/snapshots/">∞</a></header><p>When people share content on Facebook, they expect that the content will show up a certain way in the news feed: with their own title, description, and most importantly a relevant picture. Of course, RunKit is largely about text, whether in the form of source code or the properties in an object viewer, so we had to find a way to generate pictures that made sense. Building a prototype to do that with RunKit turned out to be so simple that we wanted to share the process.</p><h2>What are we doing?</h2><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/03/09/snapshots/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/24/class-support/">Class Support</a></h1><time dateTime="2016-02-23T16:00:00-08:00" class="css-6ljq81">February 23rd, 2016</time> <a href="http://blog.runkit.com/2016/02/24/class-support/">∞</a></header><p>We've just added class support to RunKit! JavaScript classes are shorthand that make it easier to work with JavaScript's existing protoypal inheritance. As usual, RunKit is smart about the way it supports this feature, using Babel in earlier versions (like 0.12), but giving you full access to native classes in Node 4 and 5, even when not in strict mode. Give it a try:</p><div class="css-xdx4gc"><script src="https://embed.runkit.com"></script><code>class AbstractMockSingletonFactoryFactory { injectDependency() { console.log("Subclasser Responsibility"); } } </code><script> var tag = document.currentScript || (function (scripts) { return scripts[scripts.length - 1]; })(document.getElementsByTagName("script")); var target = tag.previousSibling; var configuration = {}; configuration.element = target; configuration.source = RunKit.sourceFromElement(target); configuration.onLoad = function() { if ("false") notebook.getShareableURL(false); if (false) notebook.evaluate(); } target.innerHTML = ""; var notebook = RunKit.createNotebook(configuration); </script></div><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/24/class-support/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/23/js-office-hours/">Introducing JavaScript Office Hours</a></h1><time dateTime="2016-02-23T00:31:25-08:00" class="css-6ljq81">February 23rd, 2016</time> <a href="http://blog.runkit.com/2016/02/23/js-office-hours/">∞</a></header><p>Have JavaScript questions? Want to discuss ES6, React, or Promises? Then why not bring your laptop over to the Haight to share a beer and some snacks. The RunKit team will be hosting a weekly JavaScript Office Hours, with the first one kicking off this <strong>Thursday</strong> from <strong>4PM</strong> to <strong>8PM</strong>. You can get up to date information each week on the <a href="http://www.jsofficehours.com">website</a>.</p><div><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s); js.id=id;js.async=true;js.src="https://a248.e.akamai.net/secure.meetupstatic.com/s/script/2012676015776998360572/api/mu.btns.js?id=iqus4jgv426h80sssksot3ibqv";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","mu-bootjs");</script></div><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/23/js-office-hours/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/10/highlight-slack-slash-commands/">Highlight: Slack Slash Commands</a></h1><time dateTime="2016-02-09T16:00:00-08:00" class="css-6ljq81">February 9th, 2016</time> <a href="http://blog.runkit.com/2016/02/10/highlight-slack-slash-commands/">∞</a></header><p>People have used RunKit to write tens of thousands of notebooks. We love calling attention to some of the cool ones that have been published. We'll kick off with a notebook that takes advantage of our latest feature, <a href="http://blog.tonicdev.com/2016/01/26/endpoint.html">Endpoint</a>.</p><p><a href="https://slack.com">Slack</a> is a popular messaging app for teams. <a href="https://slack.com/apps/A0F82E8CA-slash-commands">Slash Commands</a> is a Slack app that will fetch an external URL when a "slash command" is matched (any message that begins with a slash).</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/02/10/highlight-slack-slash-commands/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/01/26/endpoint/">Introducing Endpoint and Literate APIs</a></h1><time dateTime="2016-01-26T05:45:00-08:00" class="css-6ljq81">January 26th, 2016</time> <a href="http://blog.runkit.com/2016/01/26/endpoint/">∞</a></header><p>We're excited to announce our latest feature: <a href="https://runkit.com/docs/endpoint">RunKit Endpoint</a>. One thing we've always wanted is a great way to use RunKit to experiment with HTTP servers. Node is for servers, and now with Endpoint, RunKit is too.</p><p>Endpoint turns any RunKit Notebook into a server by exporting a single function, <code class="inline">endpoint</code>. This function takes a request and response, just like a typical <code class="inline">http.listen</code> handler. That's it: no deploying, no ports to worry about. Your function will be called anytime someone visits the corresponding url on the <strong>runkit.sh</strong> domain. Here's an example:</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/01/26/endpoint/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/01/19/node-5-support/">Node 5 Support</a></h1><time dateTime="2016-01-19T00:31:25-08:00" class="css-6ljq81">January 19th, 2016</time> <a href="http://blog.runkit.com/2016/01/19/node-5-support/">∞</a></header><p><a href="https://runkit.com">RunKit</a> now supports Node 5! Node 5 is part of the <strong>Stable</strong> release line, which means it focuses more on features, while Node 4 focuses on stability and security as part of the <strong>LTS</strong> release line. You can <a href="https://nodejs.org/en/blog/community/node-v5/">read about it more here</a>, and you can try them both on any RunKit document:</p><p><figure class="css-qv45bh"><img src="/2016/01/19/node-5-support/node-5-support-dropdown-selected.png" alt="A close up of node selection menu being changed to node 5"/><figcaption>Select Node 5 from the Node selection menu</figcaption></figure></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2016/01/19/node-5-support/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/10/28/npm-plus-runkit/">npm + RunKit</a></h1><time dateTime="2015-10-28T10:00:00-07:00" class="css-6ljq81">October 28th, 2015</time> <a href="http://blog.runkit.com/2015/10/28/npm-plus-runkit/">∞</a></header><p>We love <a href="https://npmjs.org">npm</a>. Having instant access to every package is one of the best parts of <a href="https://runkit.com">RunKit</a>. That's why we're really excited about our latest update, which you might have already noticed:</p><p><figure class="css-qv45bh"><img src="/2015/10/28/npm-plus-runkit/test-out-npm.png" alt="A close up of the RunKit link on npm page."/><figcaption>Click the RunKit link on the right of the package page on npm</figcaption></figure></p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/10/28/npm-plus-runkit/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/30/embedded-runkit/">Embed Node.js on Any Website</a></h1><time dateTime="2015-09-30T01:31:25-07:00" class="css-6ljq81">September 30th, 2015</time> <a href="http://blog.runkit.com/2015/09/30/embedded-runkit/">∞</a></header><p>One of the coolest things about <a href="https://runkit.com">RunKit</a> is the ability to run Node.js code, and even use any package on npm, without having to install anything at all. Once we had that working, we immediately knew that it could be useful in so many more ways than just powering <a href="https://runkit.com">runkit.com</a>. That's why I'm excited to release the first <a href="https://runkit.com/docs/embed">embedded version</a> of RunKit.</p><p>With one <code class="inline"><script></code> tag, you can add a fully functional node environment to any web page. Your users can write and run code without leaving your website, complete with access to all of npm. Use it in your blog, or a <a href="http://rossboucher.com/await/#/5">presentation</a>, or on any place else. Check it out!</p><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/30/embedded-runkit/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/23/enhanced-es6-and-jsx-support/">Enhanced ES6 and JSX Support</a></h1><time dateTime="2015-09-23T07:34:25-07:00" class="css-6ljq81">September 23rd, 2015</time> <a href="http://blog.runkit.com/2015/09/23/enhanced-es6-and-jsx-support/">∞</a></header><p>We've just pushed a big update to <a href="http://runkit.com">RunKit</a> that adds a lot more ES6 support as well as JSX right out of the box:</p><ul><li><a href="https://runkit.com/tonic/es6-symbols">Symbols</a></li><li><a href="https://runkit.com/tonic/es6-iterators-and-generators">Generators</a> (native support)</li><li><a href="https://runkit.com/tonic/es6-template-strings">Template Strings</a> (native support)</li><li><a href="https://runkit.com/tonic/es6-default-rest-and-spread">Spread and Rest parameters</a></li><li><a href="https://runkit.com/tonic/jsx-in-tonic">JSX</a></li></ul><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/23/enhanced-es6-and-jsx-support/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article><article class="css-1xo5moz"><header class="css-h773az"><h1 class="css-11pcyye"><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/10/time-traveling-in-node-js-notebooks/">Time Traveling in Node.js Notebooks</a></h1><time dateTime="2015-09-10T07:34:25-07:00" class="css-6ljq81">September 10th, 2015</time> <a href="http://blog.runkit.com/2015/09/10/time-traveling-in-node-js-notebooks/">∞</a></header><p>As part of a two-post series, I'd like to share some in-depth details behind one of <a href="http://runkit.com">RunKit</a>'s most asked about features: <strong>time traveling</strong>. In this first installment I'll be focusing mainly on how the back-end works: specifically, how we're able to not only rewind the state of your code, but any changes to the filesystem and spawned subprocesses as well. From a high level, this allows for a lot of cool functionality like <em>real undo</em> in a REPL. However, we'll also see how time traveling is actually essential to the way notebooks fundamentally work in RunKit.</p><h2>Why Time Traveling is Important</h2><strong><a class="css-1ng0zxs" href="http://blog.runkit.com/2015/09/10/time-traveling-in-node-js-notebooks/">Read More...</a></strong><div class="css-12ev6iw"><img class="css-5ko0u5" src="/assets/images/symbol-0.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-1.svg"/><img class="css-5ko0u5" src="/assets/images/symbol-2.svg"/></div></article></div><div class="css-1puq874"><div class="margins fluid-content"><h2>What is RunKit?</h2><ul><li>RunKit is an <strong>interactive playground</strong> for running Node.js in the cloud.</li><li>RunKit offers serverless functions with <strong>zero deploy time</strong> — prototype code changes <strong>in real time</strong>!</li><li>RunKit can be <strong>embedded</strong> in your tutorials and docs to make them interactive as seen on <a href="https://lodash.com/docs/">lodash.com</a>, <a href="http://expressjs.com/en/starter/hello-world.html">expressjs.com</a>, and <a href="https://stripe.com">stripe.com</a>.</li></ul></div></div><div class="margins fluid-content"><div class="css-q3dtf7">Follow RunKit Blog updates with the <a href="/feed.xml">RSS Feed</a><br/>Follow <a href="https://twitter.com/runkitdev">@runkitdev</a> on Twitter <i class="fab fa-twitter"></i> for the latest updates from RunKit<br/>© 2015–2018 Playground Theory, Inc.</div></div></main><script src="/assets/common.js"></script></body></html>