<?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[Stories by Ives van Hoorne on Medium]]></title>
        <description><![CDATA[Stories by Ives van Hoorne on Medium]]></description>
        <link>https://medium.com/@compuives?source=rss-ee6691f0bd65------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*vGONhwgWXdKNBx6Gqe0pog.jpeg</url>
            <title>Stories by Ives van Hoorne on Medium</title>
            <link>https://medium.com/@compuives?source=rss-ee6691f0bd65------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 20:47:37 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@compuives/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[CodeSandbox Containers out of Beta & Improvements]]></title>
            <link>https://medium.com/@compuives/codesandbox-containers-out-of-beta-improvements-be79679df4cc?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/be79679df4cc</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Thu, 21 Mar 2019 14:47:43 GMT</pubDate>
            <atom:updated>2019-03-21T14:47:43.596Z</atom:updated>
            <content:encoded><![CDATA[<h3>CodeSandbox Containers are out of Beta with Improvements</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0qNbEihrahCNPDdEfH7vAA.png" /></figure><p>It’s time for the second announcement of CodeSandbox! In September we made the announcement of <a href="https://hackernoon.com/codesandbox-containers-5864a8f26715">CodeSandbox Containers</a>, with containers we execute the code you write on a server instead of in the browser. This allows you to run almost anything you want on CodeSandbox, just like a local development environment.</p><p>When we announced this we gave the functionality the “beta” tag, we wanted to test it more before we would mark it as stable.</p><p>During this time, we flawlessly ran more than 23,000 container sandboxes, while considering users’ feedback, and iterating on the feature. It wasn’t all rainbow and unicorns, though, we had a few (expected) glitches along the way. So we worked hard on improving both the infrastructure and the implementation, and we’re quite confident to mark this feature as stable beginning today!</p><h3>Some examples of Container Sandboxes</h3><p>We saw many new kinds of projects on CodeSandbox as soon as we released containers, we want to highlight some of the craziest and best ideas built on CodeSandbox.</p><h4>React Native Expo</h4><p><a href="https://medium.com/u/4930d50ded7c">Phil Plückthun</a> created <a href="https://codesandbox.io/s/wkjn0zlxpw">a sandbox that runs Expo</a>! This way you can build React Native apps directly on CodeSandbox.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6-6yDuiiIkWta5yG2d7oUw.png" /></figure><h4>Nuxt.js Examples</h4><p>One of the best examples we can give you for the stability of containers is the homepage for <a href="https://nuxtjs.org/">https://nuxtjs.org/</a> as they have been running them from almost the start and have been integral in testing the resilience of our containers. <a href="https://codesandbox.io/s/github/nuxt/codesandbox-nuxt/tree/master/?fontsize=14">This is their starter example.</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ityBnDwLJhEFPui5Iv7E8Q.png" /></figure><h4><a href="https://nextjs.org/">Next.js</a>, <a href="https://gatsbyjs.org/">Gatsby</a>, <a href="https://www.apollographql.com/">Apollo</a> Documentation</h4><p>Containers have also been used a lot by Next.js, Gatsby and Apollo for their documentation and examples. They have set up GitHub repositories that link to sandboxes to showcase how their frameworks work. If you’re interested in setting this up for your framework, don’t hesitate to shoot us an email to <a href="/service/mailto:hello@codesandbox.io">hello@codesandbox.io</a>!</p><p>Here is a <a href="https://codesandbox.io/s/github/gatsbyjs/gatsby-starter-default/tree/master/">Gatsby</a>, <a href="https://codesandbox.io/s/github/zeit/next.js/tree/master/examples/hello-world">Next.js</a> and <a href="https://codesandbox.io/s/apollo-server">Apollo</a> example.</p><h4>Node Streaming Example</h4><p>Another cool example is the node video streaming demo, showcased <a href="https://codesandbox.io/s/14n6q1yr33?from-embed">here</a>. It shows how you can stream videos using Express.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S0TjGOJzHkxhclWfyojGcQ.png" /></figure><p>The possibilities are endless!</p><h3>Updates</h3><p>We’ve been doing many improvements since the initial release. Here are the highlights of what we built and improved.</p><h4>Infrastructure Changes</h4><p>Last week we moved our sandbox containers over to a new infrastructure, which resulted in a big speed improvement for our containers. We upgraded the storage nodes to NVMe drives, we are using a new Kubernetes version (1.13.4) and added more servers to run the sandboxes in. As a result, we also increased the time of inactivity to hibernation to 60 minutes instead of 10 minutes.</p><p>A detailed post about infrastructure, architecture and software stack is coming soon!</p><h4>Raised limits</h4><p>Up until now we you were able to create up to a maximum of 5 container sandboxes as regular user, and you had a limit of 20 sandboxes as a patron. Today, as we mark the service as stable, we are increasing the maximum number of container sandboxes to 15 for anyone and 30 for patrons. We may raise the limits based on usage in the future.</p><p>Another change we made is that from this moment on any sandbox that is in the “Trash” folder does not count towards this sandbox limit. This also applies for the 50 sandbox limit on client sandboxes.</p><h4>Secrets Support</h4><p>You can now add environment variables to a container. The variables will be hidden for others and will not persist between forks. This is perfect for showing demos/examples of APIs without exposing any secrets.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/642/1*1ZViIAeApBxZS59Qh9rFrA.png" /></figure><h3>Future plans</h3><p>We have big plans for how our containers will work in the future, we want to give anyone access to a docker instance with the click of a button. We want to make some additional features and changes to make this easier.</p><p>Some of our ideas are:</p><h4>Importer Improvements</h4><p>Right now we only detect official templates when you import a sandbox from GitHub. If you want to import a node container you need to have a sandbox.config.json mentioning that the template is node. We want to make this more streamlined by doing some smart detecting. If, for example, we see you are using webpack or express we will automatically convert that into a container sandbox</p><h4>Restart Container</h4><p>Sometimes containers get stuck and that’s not nice at all. One way we want to mitigate this is by adding a “Restart Container” button that will restart your docker container.</p><h4>Convert Sandbox to Container Sandbox</h4><p>We often saw that people started working on a browser sandbox, but then outgrew its size after a while. Maybe because you want to access the terminal or because you want a helpful command line to help you generate the files.</p><p>This is a big pain-point for a lot of our users, particularly in angular, so we will make it possible to convert any sandbox to a container sandbox in a click of a button. When you click the button we will create a fork of the sandbox backed by a container, so you can install and run whatever you run on your local machine.</p><h4>Wake Up Containers with API Call</h4><p>What if you could use your sandbox as a really simple API? That’s our idea too!</p><p>One thing we plan to implement now that the containers are stable is a way for the sandbox to wake up as a request is done so that you can get a proper API response from a container sandbox at any time. This will make it much easier to actually build APIs and bots using CodeSandbox!</p><h4>Always-Running Sandboxes</h4><p>Sometimes you create a server sandbox that you want to run forever, right now this is not possible since we will “hibernate” this sandbox after a while. This is also something we plan to add as a feature so that if you have a container sandbox embedded in the documentation, this sandbox will never be stopped.</p><h3>Conclusion</h3><p>This has been in the works for a while and it was a real strive for us to complete and honestly could not be done without the amazing work that Bogdan puts into making CodeSandbox better and faster every day.</p><p>We hope you love this update as much as we do, and to anyone who has been with us since the beginning of containers, thank you for making it better with your feedback and suggestions!</p><p>We can’t wait to see what you will build!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be79679df4cc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing CodeSandbox v3]]></title>
            <link>https://medium.com/hackernoon/announcing-codesandbox-v3-4febbaba1963?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/4febbaba1963</guid>
            <category><![CDATA[hackernoon-top-story]]></category>
            <category><![CDATA[codesandbox-v3]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Tue, 19 Mar 2019 14:48:33 GMT</pubDate>
            <atom:updated>2019-03-19T16:51:37.416Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oelA90ut160ZWPjIH_6MOg.png" /></figure><p>We’re back with one of the biggest updates we’ve done so far! It’s very similar to the <a href="https://hackernoon.com/announcing-codesandbox-2-5-be767d15ffd">CodeSandbox 2.5 update one year ago</a>. It includes VSCode extensions, many design tweaks, and a new devtool pane. <a href="https://codesandbox.io/">CodeSandbox</a> will feel far more polished from now on. Let’s get to it!</p><h3>VSCode Integration</h3><p>In October we <a href="https://mobile.twitter.com/CompuIves/status/1052594462768148480">released an experimental version of VSCode</a> that you could turn on in your preferences. This replaced the core editor in CodeSandbox with VSCode, which gave us keybindings, user snippets, commands, editor grid view and much more from VSCode.</p><p>Since October we’ve been fixing a bunch of bugs and improved the general integration. From now on we’ll run VSCode as the only editor in CodeSandbox, and with that, we decided to give the editor a new look! Here’s what was added with the new integration:</p><h4>Extensions Support</h4><p>We now support VSCode Extensions! The cool thing about this integration is that everything runs in the browser. Instead of spawning node processes, we spawn web workers with stubbed node modules like fs, net and module. This means that there’s less latency and there’s no need for us to run servers for VSCode. I’ll do a better write-up on how this works after all the remaining releases.</p><p>Initially we’ll support a predefined list of extensions, we’ll gradually open up the possibility for everyone to add and install their own extensions.</p><p>VSCode Extensions comes with a lot of new functionality, I want to highlight some of the things that I found nice:</p><p><strong>Native TypeScript Type Checking<br></strong>The TypeScript extension runs exactly the same as the local VSCode installation, it now reads tsconfig.json , will give the same autocompletions and it runs the latest TypeScript version.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*M-lQroL98k2SvFwhVMezfQ.gif" /></figure><p><strong>Auto Import<br></strong>Automatically importing variables from your own files or dependencies now work!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dardCLKUrGIMg6bKpxLCtg.gif" /></figure><p><strong>Refactoring Support<br></strong>You can also use the same refactoring options as in VSCode, like refactoring a function from promises to async, or moving a function to a new file. It works exactly the same!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3AfE1Lrsv5uQ71f4qTzxLA.gif" /></figure><p><strong>VIM Extension<br></strong>We also include the <a href="https://github.com/VSCodeVim/Vim">VSCodeVim</a> extension by default, you can enable it by opening preferences and going to Editor.</p><p><strong>Vue &amp; Vetur<br></strong>We also run the <a href="https://github.com/vuejs/vetur">Vetur</a> extension from source, which gives the same autocompletions, linting, and prettifying as VSCode. It is really powerful, this also includes the recent addition of autocompletions in templates.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w3dF9Ixcq63zQJIwbv5ROw.gif" /></figure><h4>Minor Improvements</h4><p>We also added graphql, styled-components and yarn.lock syntax highlighting/autocompletions using the new extensions. Small quality of life improvements!</p><h4>Existing Functionality in VSCode</h4><p>Functionality that didn’t work before, like the configuration UI and the image viewer now work in VSCode as well. We added some custom editor types that are actually rendered in React, which is quite interesting. We now mount VSCode in a React application, and we mount React in the VSCode view.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4maOvmdu7HQpiOP5N58-fQ.png" /></figure><h3>A New Design</h3><p>Since we’re now full-on on VSCode it was high time to adjust the design to fit better with this code editor. We tweaked the design in many ways to give a more coherent and less cluttered feel. I’ll go by the changes one by one.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cK6OKF0-bQSx1qZzaG7ryQ.png" /><figcaption>The new design!</figcaption></figure><h4>Devtool View</h4><p>The browser preview has become multi-functional! We added tabs to the preview (devtool) view that you can use to switch between different devtools. Browser is the default devtool, but if you think that the console is more suitable for your example you can just drag the tab to the first place to make it the default!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_B27FW6q0VKUN1FLP66PGA.gif" /><figcaption>Changing the tabs of the devtools!</figcaption></figure><p>We think that this new devtool pane will make it easier for people to demo things like tests or console output. This also affects the embed. Here’s an embed with the console pane as the first tab. Expect to see more devtools added in the future!</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fv19jww3x3l&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fv19jww3x3l&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fv19jww3x3l%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/46c261dc3cb7ea6c3a8c6d2a7305368b/href">https://medium.com/media/46c261dc3cb7ea6c3a8c6d2a7305368b/href</a></iframe><h4>Menu bar &amp; Status bar</h4><p>One big contributor to a cluttered look of the editor was the header. There were so many buttons that it became hard to actually find the button you were looking for. We decided to change this by removing a bunch of buttons and by putting them under a menu that’s familiar to many of you: the menu bar! We removed all buttons that are not relevant to the editing experience (who goes to “Explore” from the editor?) and put them in the menu bar.</p><p>We also added a status bar, the functionality of the status bar became more useful as we added extensions and support for the image view, for example. We’re planning to use this status bar quite a bit with CodeSandbox integrations in the future.</p><p>Both the status bar and the menu bar are taken directly from VSCode! This is one of the advantages of having VSCode as our single editor.</p><h4>Color &amp; Themes</h4><p>Together with the new UI parts we also have a new color theme and new icons. You can expect to see the CodeSandbox color theme in the VSCode marketplace in the future!</p><h4>Confusing Parts</h4><p>Previously we would hide the activity bar (left most bar) when you were viewing a sandbox that you don’t own. We’ve reverted this, it turned out to be quite confusing for people when they saw CodeSandbox for the first time.</p><h3>Conclusion</h3><p>I hope you’re as excited about this update as I am! We’ve been working a long time on this, and it’s great that we can now show it to everyone. Let us know what you think! Did you find something that didn’t work? Please let us know on our repo: <a href="https://github.com/CompuIves/codesandbox-client">https://github.com/CompuIves/codesandbox-client</a>.</p><p>Also a huge thanks to all contributors who have contributed to CodeSandbox, we already have 114! The list almost getting too big to show in one image!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YLPlH5A2p8b1zIOIif4s5w.png" /></figure><p>This update is the first of 4 updates that we’re releasing this week. Stay tuned!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4febbaba1963" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/announcing-codesandbox-v3-4febbaba1963">Announcing CodeSandbox v3</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Improving the CodeSandbox Community]]></title>
            <link>https://medium.com/@compuives/improving-the-codesandbox-community-1a6b22b00728?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/1a6b22b00728</guid>
            <category><![CDATA[vue]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[design]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Wed, 19 Dec 2018 13:59:17 GMT</pubDate>
            <atom:updated>2018-12-19T13:59:17.759Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CnoHG0KtVIJYKjMVwyU4Ww.png" /></figure><p>It’s time for a new update to CodeSandbox! This time we focused on the most important part of CodeSandbox: the community. Without a community, CodeSandbox would not be the platform it would be today, and it definitely deserves some more love.</p><p>We did three things to make it easier for everyone to find and share sandboxes. Let’s get to it!</p><h3>Explore Page</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HyO56C5l0atQ3vzETcLLPw.png" /></figure><p>CodeSandbox always strove to make itself the best way to create experiments and to prototype apps, but until now there was no way to see the experiments unless you found the perfect Twitter thread. While working on CodeSandbox we found so many hidden gems, and we feel like we should bring them more to light.</p><p>That’s why we’re happy to announce the <a href="https://codesandbox.io/explore">explore page</a>! A page with hand-picked sandboxes which we deem either interesting, beautiful or both! We have invited a group of curators who can pick sandboxes that go on the explore page. We constantly pick new sandboxes for the explore page.</p><p>Please send us all your cool sandboxes by tweeting with a mention to <a href="https://twitter.com/codesandbox">@codesandbox</a>, so we can feature you on the explore page!</p><p><em>We created a documentation entry with answers to some questions about the explore page </em><a href="https://codesandbox.io/docs/explore"><em>here</em></a><em>.</em></p><h3>Move to Spectrum</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*imFMuDfDjGIrXPizqU0UVQ.png" /></figure><p>We’ve always been using Discord for communication with the community. As the popularity of CodeSandbox grew we started to notice that it was hard for everyone to keep up with all the chatter. Furthermore, we received many duplicate questions that were answered before.</p><p>We’ve seen so many amazing things happen at Spectrum that we made the decision to move our community there. Spectrum solves all the issues that we had by giving a thread based conversation model, another big plus is that everything is searchable from search engines!</p><p>This will make it easier to ask questions and to share your ideas and work! If you want to be a part of it <a href="https://spectrum.chat/codesandbox">you can join it here</a>.</p><h3>Submit Feedback</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EYjZygpbmXIO8fr9UhL67w.png" /></figure><p>The “Submit Feedback” button is back! If you have any ideas for a new feature, or you just want to let us know your thoughts, you can do that now from the user menu. We’ll stay on top of all the feedback.</p><h3>The future of the community in CodeSandbox</h3><p>That’s where all of you enter and get to join this discussion to help us better shape the community we are trying to create. Join our <a href="https://spectrum.chat/codesandbox">Spectrum</a> and tell us your ideas. We all have valuable ideas that can make CodeSandbox better and better every day.</p><p>Let us know for what you use it and what is missing and we can all build this community together and make it better!</p><h3>Thank you</h3><p>Thanks to everyone working on this update. A special thanks to <a href="https://twitter.com/NikkitaFTW">Sara Vieira</a> for putting an incredible amount of effort in this update, she did an incredible job in making this happen.</p><p>Also thanks to you! Without your sandboxes we wouldn’t have anything to put on the explore page to begin with!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1a6b22b00728" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s Unique About CodeSandbox]]></title>
            <link>https://medium.com/@compuives/whats-unique-about-codesandbox-f1791d867e48?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/f1791d867e48</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Sun, 21 Oct 2018 22:37:30 GMT</pubDate>
            <atom:updated>2018-10-22T12:33:51.449Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AsniiJmCLaU6di-QDAOwKA.png" /></figure><p>I often get asked: “What’s the difference between CodeSandbox and &lt;another online editor&gt;?”. I don’t like getting these kinds of questions because:</p><ol><li>I am extremely biased, any answer or comparison I could give would be unfair to some extent.</li><li>I like to work on unique things, comparing alternatives to what I build infers that what we’re doing has already been done before. That demotivates me.</li></ol><p>For the same reason I get demotivated when I hear people say that CodeSandbox is like any other online IDE. Saying something like that makes me feel that whatever we build wouldn’t be noticed anyway.</p><p>That’s why I decided to write down everything that I think are the defining big features of CodeSandbox, features that you cannot find in many other IDEs. This way I can always link to this post when someone asks me the question, without making a direct comparison.</p><h3>Live Collaboration</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UAjQFjuMlDWEvpLg" /><figcaption>A live session right after it was release, now we also added chat and the option to follow people along as they open different files.</figcaption></figure><p>When working on a sandbox you can open up a Live Session. This generates a unique URL which you can give to others to join your sandbox and collaborate live (google docs style) together with you. As the owner of the sandbox you can also enable ‘Classroom Mode’, this mode allows you to specify who can edit the sandbox and who can only view. This is especially useful for workshops or situations where more than 30 people connect at the same time.</p><h3>GitHub Committing/Forking/PRing</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fGx4eOakEhhyPaVAhRS8zw.png" /><figcaption>Here we create a PR to the Redux repo from within CodeSandbox</figcaption></figure><p>Besides importing from and exporting to GitHub we also allow you to work on a GitHub repo directly. When forking a sandbox that’s imported from GitHub you can make changes and either create a PR or a commit with the changes when you’re done. If you don’t own the repository that’s no problem, we automatically fork it for you and create a PR.</p><h3>VSCode Integration</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P9Nf-lcU0wZwmu7B0nb8Kg.png" /><figcaption>This is CodeSandbox(!)</figcaption></figure><p>Since recently we have an experimental feature (you can enable it in settings) called ‘VSCode in the browser’. The name really says what it is, we have created a fork of VSCode that works in the browser. Because of this we get Grid View, Keybindings, User Snippets, Breadcrumbs, VSCode Settings and more. You can copy your settings files directly from VSCode to CodeSandbox and we should have the exact same keybindings, snippets and preferences.</p><p>I want to clear up that this isn’t only <a href="https://github.com/Microsoft/monaco-editor">Monaco</a>, but also parts of VSCode (like the previously mentioned features) that weren’t ported to the browser yet.</p><h3>Container Sandboxes</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nhlEDsSM8Ftx2_fVUO2daw.png" /><figcaption>This is a Next server running in a CodeSandbox Container, you can run bash, scripts, etc.</figcaption></figure><p>Another recent addition is Container Sandboxes. Previously we would run a sandbox in the browser. This works great for many sandboxes, but imposes a limitation on what you can run. With Container Sandboxes we actually run the code on a server, this makes it possible to eg. create a Node/GraphQL server on CodeSandbox. It also opens up the possibility to create Next/Gatsby/Nuxt projects inside CodeSandbox. It runs anything that works locally.</p><h3>Dashboard &amp; Teams</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ceBOYuHIOkIqO8DKRn_k8g.png" /></figure><p>Everyone has a dashboard that they can organize their sandboxes in. In this dashboard you can create directories (like Google Docs) to categorize your sandboxes. You can also search, filter and sort the sandboxes whenever you need to find a specific sandbox. We show a screenshot of every sandbox so you can visually filter them.</p><p>Another feature of the dashboard is the option to create teams. As a team you can share ownership of sandboxes and work on them together. There is no limit to team sizes and whenever multiple people from a team open the same sandbox we automatically create a live session.</p><h3>Beginner Friendly Tricks</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NAFCINJmPpVq6aaRBpU7iQ.png" /><figcaption>There is a raw import here, we give the suggestion to rename the file.</figcaption></figure><p>We try to make CodeSandbox useful for people wanting to learn web development. That’s why we show error suggestions for some errors (like ‘Add Missing NPM Dependency’ or ‘Rename “App” to “App.js”’). For known configuration files we show a UI and description.</p><p>We also have a <a href="https://codesandbox.io/search">search page</a>, on this page you can search for sandboxes (850.000 at the time of writing) when you need to find any examples. You can filter on dependency, on template and on tags to make it easier. If you, for example, ever want to know how redux is used you can filter on that dependency and shift through the examples sandboxes.</p><h3>Deploy Sandboxes</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*35tgN5SobL2_zbJ6dhlDug.png" /><figcaption>Deploy with the big button</figcaption></figure><p>We have a deployment integration with <a href="https://zeit.co/now">Now</a>. When you want to create a production version of your sandbox you can click ‘Deploy Now’. This will deploy the sandbox, install the node_modules and start it under a new URL. We then give this URL back which you can alias to any domain that you like.</p><p>We are also adding support for other deployment providers in the near future!</p><h3>Smaller Factors</h3><p>These are the features that I think are worth mentioning, but don’t deserve a header of their own.</p><p><strong>Private/Unlisted Sandboxes<br></strong>As a <a href="https://codesandbox.io/patron">Patron</a> you can create sandboxes that are either private (not viewable apart from you/your team) or unlisted (not viewable from search) sandboxes.</p><p><strong>Jest Support<br></strong>We have support for running Jest tests and have a small dashboard for it where you can manage the tests and control them.</p><p><strong>We’re Open Source!<br></strong>The frontend and the microservices of CodeSandbox are <a href="https://github.com/CompuIves/codesandbox-client">open source</a>! This is the place where you can find out how CodeSandbox works. We currently have 97 contributors and are always welcoming more!</p><h3>Conclusion</h3><p>This is a list of things that you can do with CodeSandbox, but I don’t think this truly defines us. I think our values, our drive and our ‘out of the box’-thinking is what produced all these features, and will certainly define what we’ll be able to make in the coming years. I really can’t wait to see what the future holds and I’m looking forward to work on this online editor as long as I can.</p><p>These features are not only built by myself, we now have a big group of people working on CodeSandbox. I want to thank <a href="https://medium.com/u/c7fdb2c9dc65">Bas Buursma</a>, <a href="https://medium.com/u/248b5f4c4dad">Bogdan Luca</a>, <a href="https://medium.com/u/b384aa92a080">Sara Vieira</a>, <a href="https://medium.com/u/d4ec01100893">Christian Alfoni</a> for their work, and also a big thanks to the other 93+ contributors who have added features, documentation and support! If you’re interested in helping us out, <a href="https://github.com/CompuIves/codesandbox-client">this is our repository</a> with the most activity!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f1791d867e48" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing CodeSandbox Containers]]></title>
            <link>https://medium.com/hackernoon/codesandbox-containers-5864a8f26715?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/5864a8f26715</guid>
            <category><![CDATA[vuejs]]></category>
            <category><![CDATA[codesandbox-containers]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Thu, 27 Sep 2018 18:58:06 GMT</pubDate>
            <atom:updated>2018-09-27T18:58:06.777Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FwTGwPb3DSUxSrHBRQtMzw.png" /></figure><p>CodeSandbox is often used to create new websites or to quickly edit existing websites. Until now this was only possible for projects that follow the default template layout, and if you wanted to change something like the webpack configuration you would have to continue locally. Well, not anymore!</p><p>Today we’re happy to announce <strong>CodeSandbox Containers</strong>. We execute your code on a server, which allows you to work on <strong>any JavaScript project that works locally</strong>.</p><p>Want to try a new GraphQL API server? That’s possible! Want to quickly add a new post to your Gatsby blog? You can do it from CodeSandbox with its GitHub integration.</p><p>Along with this update we’d like to announce new templates running on this system. Everyone can now work with <strong>Next.js, Gatsby, Nuxt.js, Apollo Server, Node and ReasonML</strong> right from within CodeSandbox! We give first-class support for these templates, but you will still be able to run anything you want on CodeSandbox. You can create a <a href="https://codesandbox.io/s">new project here</a>.</p><h3>Run Any Project</h3><p>Until now we’ve executed all code in the browser. This has many advantages: it’s snappy, it works offline and there is almost no load for our servers. There is also a counterpoint to this: you won’t be able to run node directly.</p><p>With CodeSandbox Containers we execute your code on a server, which allows you to literally run any project without checking if we support it. I will go through all the main features added specific to CodeSandbox Containers.</p><h4>See what happens on the dev server</h4><p>We introduce a new view for the toolbar called “Terminal”. This view will show the output of yarn start when the sandbox starts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3cUTCtGwRbGjCajBUnkgkw.png" /></figure><h4>Run any NPM Script</h4><p>We also introduce a new panel in the side bar called ‘Server Control Panel’. This panel gives you the opportunity to run any script specified in package.json in the terminal. With this you can quickly lint or run tests or any other script.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g1GSX4gQisIPICDYdUJfew.gif" /><figcaption>Running jest:watch to test the sandbox</figcaption></figure><p>This doesn’t only work for npm scripts. You can also open a bash shell to explore the sandbox! Note that we do monitor the sandboxes, if we notice any harmful behaviour we can block your account.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Iru59XoxZ2NndqdfSC_SIA.gif" /><figcaption>Running some bash commands</figcaption></figure><h3>Templates Galore!</h3><p>We hope you are as excited as we are about this update. The best thing is that you can use all our existing features with these new templates! For example, you can <strong>live collaborate with others on a Gatsby template</strong> or <strong>quickly create a new post for your Next.js website using our GitHub integration</strong>.</p><p>Go check out what templates we fully support here: <a href="https://codesandbox.io/s">https://codesandbox.io/s</a>.</p><h4>ReasonML</h4><p>One template we added is ReasonML! We don’t execute ReasonML on the server, but in the browser. We are still testing Reason and could use all your help, so if you find anything out of order don’t hesitate to <a href="https://github.com/CompuIves/codesandbox-client">send us an issue!</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Freason&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Freason&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Freason%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/b63d47fe1d76d2a91e2043b94a936f8b/href">https://medium.com/media/b63d47fe1d76d2a91e2043b94a936f8b/href</a></iframe><h3>Beta and Thanks</h3><p>We can only test CodeSandbox Containers fully when we have other people using it. So we currently give the warning that <strong>CodeSandbox Containers is in beta. </strong>Please don’t use it for any project with files you don’t want publicly exposed. There’s also the chance that the service might be down because of things that we haven’t foreseen yet, in which case you’ll see a nice warning message. If you notice this happening and want to know what’s going on, you can find us <a href="https://discord.gg/cjxBH5a">here</a>.</p><p>We will dedicate the coming months to squash every bug we can find, when we think that CodeSandbox Containers is stable enough to remove the beta warning we will announce this. In the near future we will also work on more documentation about containers so that there can’t be any confusion in the differences between client and server sandboxes.</p><p>There is no way to sync the changes from the terminal back into the sandbox itself yet. This is top on our priority list and we will get this in as soon as possible!</p><p>We have a limit of 5 server sandboxes for free accounts currently, we have a limit of 15 server sandboxes for <a href="https://codesandbox.io/patron">Patron</a> accounts. These limits will probably change.</p><h4>Thanks</h4><p>We’ve been working on this functionality since February now and are extremely happy that we can share this with everyone now.</p><p>There are some people that deserve a huge thanks for this endeavor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/344/1*nKTw3BkKZETRMnOjsRJ7YA.png" /><figcaption>Thanks to Bogdan and Gatsby!</figcaption></figure><p>We want to thank <a href="https://twitter.com/lucabogdan"><strong>Bogdan Luca</strong></a> for building the <em>whole </em>infrastructure for CodeSandbox Containers, this is an incredible undertaking and he pulled it off.</p><p>We also want to thank <a href="https://www.gatsbyjs.org/"><strong>Gatsby</strong></a> for inspiring us to start this and for being both our counselor and funder of this project. <a href="https://twitter.com/kylemathews">Kyle Matthews</a> and <a href="https://twitter.com/calcsam">Sam Bhagwat</a> were extremely supportive and helped us think everything through while also relieving us of other worries.</p><p>I’d like to close with our new loading screen for containers. 😃</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-4rZprD0zCKa_AcgRrVo7A.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5864a8f26715" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/codesandbox-containers-5864a8f26715">Announcing CodeSandbox Containers</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Themes]]></title>
            <link>https://medium.com/@compuives/introducing-themes-e6818088bfc2?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/e6818088bfc2</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[coding]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Mon, 16 Jul 2018 14:47:34 GMT</pubDate>
            <atom:updated>2018-07-16T14:47:34.914Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FR9FabqAzo_tSM6rZ5vdog.png" /></figure><h4>Start using any VSCode theme directly in CodeSandbox</h4><p>Personalizing color schemes is one of the most important things to have in an application. It’s not only used as a way of styling to personal preference, it’s also very important for accessibility.</p><p>CodeSandbox didn’t have any way to personalize colors in the editor since release, but I’m happy to announce that we do now. The best part is that we were able to reuse a big chunk of logic from VSCode directly and thus we support any VSCode theme natively in CodeSandbox!</p><p>I will first highlight our pre-installed themes and fonts, then explain how to install your custom VSCode theme and I will end with an explanation on how it works (spoiler alert: WebAssembly).</p><h3>Pre-installed Themes &amp; Fonts</h3><p>We have made a selection of VSCode themes that we think are important to have ‘pre-installed’. In reality we still download them on-demand, but you can easily make a selection between these themes without opening VSCode. If you have a suggestion for a pre-installed theme don’t hesitate to <a href="https://github.com/CompuIves/codesandbox-client/issues/new/choose">open an issue!</a></p><h4>CodeSandbox (new syntax highlighting)</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qf8rOe79vAgL0txLMsW8Xw.png" /></figure><h4><a href="https://github.com/sdras/night-owl-vscode-theme">Night Owl</a> by <a href="https://medium.com/u/c2509fce86ff">Sarah Drasner</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gmlTSMRTnbiv2hk0Hk3nww.png" /></figure><h4><a href="https://github.com/akamud/vscode-theme-onedark">Atom One Dark</a> by <a href="https://medium.com/u/ae797c13c6d1">Mahmoud Ali</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_Wt9G0s02BlNx-cDfjAr1A.png" /></figure><h4><a href="https://github.com/akamud/vscode-theme-onelight">Atom One Light</a> by <a href="https://medium.com/u/ae797c13c6d1">Mahmoud Ali</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FuBh_GUhx-K35N24ABa7_w.png" /></figure><h4>VSCode Light by Microsoft</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*050fBnHADPnEHgVi1b3QBA.png" /></figure><h4><a href="https://dank.sh/">Dank Mono</a> (font) by <a href="https://medium.com/u/4930d50ded7c">Phil Plückthun</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XEK0QFBe-zhzmlv4KZ9iVw.png" /></figure><p>We now also enable Dank Mono as pre-installed font by default. This is an incredible font created by <a href="https://medium.com/u/4930d50ded7c">Phil Plückthun</a>. It supports italics and font ligatures (you can enable those in preferences). He explains <a href="https://medium.com/@philpl/what-sets-dank-mono-apart-1bbdc1cc3cbd">here</a> what the design choices behind Dank Mono are.</p><p>You can choose between the fonts ‘Dank Mono’, ‘Menlo’ and ‘Source Code Pro’. <em>You also have the option to install any font that you have locally installed.</em></p><h3>Installing a Custom Theme</h3><p>There are a few simple steps to move your own VSCode theme to CodeSandbox explained here:</p><ol><li>Open VSCode</li><li>Press (CMD/CTRL) + Shift + P</li><li>Enter ‘Developer: Generate Color Theme From Current Settings’</li><li>Copy the contents</li><li>Paste them in CodeSandbox Preferences</li></ol><p>Here’s a GIF of copying over a theme:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kewKuRQajLNZfps9pN_scg.gif" /></figure><h3>How It Works</h3><p>CodeSandbox has been using <a href="https://github.com/Microsoft/monaco-editor">Monaco</a> as its main code editor for almost a year now. Monaco is the core editor part (the part where you write code in) of VSCode, and the team behind VSCode was so awesome to make this part work in the browser directly as well.</p><p>However, the syntax highlighting of VSCode uses .tmLanguage (from <a href="https://macromates.com/">TextMate</a>) to tokenize all the code. And parsing .tmLanguage requires a C library called <a href="https://github.com/kkos/oniguruma">Oniguruma</a> to parse and execute the regular expressions, which has a specific syntax. That’s why the VSCode team put in a different tokenizer into the browser version called <a href="https://microsoft.github.io/monaco-editor/monarch.html">Monarch</a>. This tokenizer is not fully compatible with VSCode themes, which made it hard to directly port them over.</p><p>However, a year passed by and WebAssembly is gaining a lot of traction. We found out that a library called <a href="https://github.com/NeekSandhu/onigasm">Onigasm</a> (get it, OnigurumaASM?!) was released, this is a compiled WebAssembly version of Oniguruma with 1:1 support. Quickly after that I found out that the same author(!), NeekSandhu, also published <a href="https://github.com/NeekSandhu/monaco-editor-textmate">monaco-editor-textmate</a>, which allows you to tokenize .tmLanguage files for Monaco!</p><p>This was enough information to make VSCode themes be supported directly in the CodeSandbox editor through the tmLanguage tokenizer. The only thing we had to add was a mapping of the rest of the UI to the VSCode colors. We are using styled-components for styling, so that was a matter of putting the VSCode styles in the ThemeProvider and changing the style of all elements one by one.</p><h3>Other Features</h3><p>We also updated our Monaco editor to the latest version (we were on v8, which is a year old). Because of that we now get <em>proper keyboard support for iPads </em>in the editor. I also rewrote the logic in the editor itself, which now gives:</p><ul><li>More robust CodeSandbox Live, there should be less bugs</li><li>More performance in the editor itself and when switching files (I used the trick described <a href="https://twitter.com/CompuIves/status/1017535866909184005">here</a>)</li><li>Autocompletion for import statements (I learned about that <a href="https://blog.expo.io/building-a-code-editor-with-monaco-f84b3a06deaf">here</a>)</li><li>Less bugs when switching files</li></ul><h3>Thanks</h3><p>I want to give a huge thanks to <a href="https://medium.com/u/b384aa92a080">Sara Vieira</a>, she came with the idea to do this when we were on our way to Brighton and she helped tremendously in building and debugging this functionality. 10 👍 for her!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e6818088bfc2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing CodeSandbox Dashboard & Teams]]></title>
            <link>https://medium.com/@compuives/announcing-codesandbox-dashboard-teams-876f5933160b?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/876f5933160b</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[graphql]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Tue, 03 Jul 2018 12:16:35 GMT</pubDate>
            <atom:updated>2018-07-03T12:16:35.739Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wIMw31_Phf1WNEP6zjuTUw.png" /></figure><p>Starting new projects and sandboxes on CodeSandbox has always been very easy, but managing and collaborating on the created projects has been cumbersome.</p><p>We started to look into the management issues, and have come up with something that makes it much easier to organize and edit your sandboxes in bulk. This will be the building block for existing features and new features to come, including one we want to announce today as well.</p><p>Today we’re happy to announce <strong>Dashboard</strong> and <strong>Teams</strong>. Along with these two new features we now make <strong>CodeSandbox Live free for everyone</strong>! Let’s take a look!</p><h3><a href="https://codesandbox.io/dashboard">Dashboard</a></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GPzdms8KhYQkZGpeqzYacQ.png" /></figure><p>You now have a personal dashboard for organizing and finding your sandboxes. This dashboard has specifically been designed with the idea of a file system in mind.</p><h4>Organize your sandboxes in directories</h4><p>You can now organize your sandboxes by creating directories and putting them into the directories. Now you can finally properly tag your sandboxes by how and why you created them!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*viZ7JNkfZ6QV6SG5nU0ZeQ.gif" /><figcaption>You can easily move your sandboxes between directories</figcaption></figure><h4>Modify multiple sandboxes directly</h4><p>You probably have many quick test sandboxes that now only serve as clutter. With the dashboard you can select multiple sandboxes and edit them at the same time, including moving them to the trash.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4LrXrDx5gm-wE_cmQVg7hQ.gif" /><figcaption>Delete, change privacy, and order many sandboxes at the same time</figcaption></figure><h4>Search, sort and filter through your sandboxes.</h4><p>The last new feature to help you organize is the search bar! You can now search, order your results and filter through your sandboxes, including your private sandboxes and the sandboxes of your teams.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Gv-tspXTVCg26ZSf_VM6rA.gif" /><figcaption>Filter, order and search through all your sandboxes</figcaption></figure><h3>Teams</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pEvIfS_C_XsJ7lgAeXovzw.png" /></figure><p>CodeSandbox is used more and more to collaborate with others, this is great! We want to make it even easier for people to get together and work together on a sandbox, so we’re happy to introduce ‘Teams’!</p><p>You can create as many teams as you like with unlimited people. As a team you have shared directories for your sandboxes, all the sandboxes in the team directories are automatically shared between team members.</p><h4>Live Collaboration</h4><p>This is the best part: we automatically create a live session between team members whenever they open a team sandbox simultaneously. This means that team members can immediately live collaborate on shared sandboxes. They can also share their live session with people outside of the team by sharing the Live URL.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cprpJz8CG0HRfNVhExI8Lw.gif" /><figcaption>Teams automatically share their live session</figcaption></figure><h4>Team Pro</h4><p>We’re planning to release something called Team Pro in the future. Team Pro is a seat-based subscription that allows your team to create private sandboxes within your team. We haven’t released this yet, so you will now be able to do this as a <a href="http://codesandbox.io/patron">patron</a>. If you’re interested in this functionality you can subscribe by joining this <a href="https://airtable.com/shrlgLSJWiX8rYqyG">mailing list</a>.</p><h3>That’s not everything</h3><p>There are many more hidden features in this update. Here’s a sneak peak of what’s included:</p><h4>Free CodeSandbox Live</h4><p>One nice addition to teams is that we now make CodeSandbox Live free for everyone to use! We’re hoping that everyone collaborates even more on CodeSandbox with this change!</p><h4>File Recovery</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C7FVeKbA9SpM9LcLYfTUCQ.gif" /></figure><p>With this update you won’t have to worry about crashing browsers or flaky connections anymore. We now save your files in localStorage, so whenever you leave CodeSandbox without saving we’ll restore the session for you when you come back!</p><h4>Design Tweaks</h4><p>We tweaked some of our theme colors and restyled the buttons. The design of the editor should look a bit better now!</p><h4>Disabled Back Gesture</h4><p>Most OSX users noticed that when you slide back in the editor you will navigate away from the editor. This is very frustrating. We catch and disable this behaviour now.</p><h3>Thanks</h3><p>With this update we refactored the code quite a bit and we introduced some new libraries. I want to mention the introduced libraries and how they helped.</p><h4><a href="https://graphql.org/">GraphQL</a> and <a href="https://www.apollographql.com/">Apollo-Client</a></h4><p>We built the dashboard functionality fully with GraphQL. We have lots of nested data on the dashboard with many different variations of structures (thanks to our ordering and filtering) and GraphQL handles that wonderfully. Apollo-Client made it easier to manage all the different forms of this data and allowed us to do the optimistic updates and caching more easily.</p><p>We also have mutations that often include multiple sandboxes and GraphQL was able to handle that very well.</p><h4><a href="https://github.com/drcmda/react-spring">react-spring</a> by <a href="https://medium.com/u/ace940cf89ce">Paul Henschel</a></h4><p>react-spring has made it so much more easy for me to do animations. With react-spring you can create animations based on state, but in a performant way thanks to their native mode. I converted all our animation logic to react-spring and it has been a blast so far.</p><p>Our dashboard is animated with react-spring, from the context menu slide-down to the sandbox dragging.</p><h4><a href="https://github.com/bvaughn/react-virtualized">react-virtualized</a> by <a href="https://twitter.com/brian_d_vaughn">Brian Vaughn</a></h4><p>The dashboard works with many sandboxes, for my dashboard I had to show 400 sandboxes at the same time. React Virtualized makes sure that you only render the items that are in view, making the dashboard much more performant. React Virtualized also made it easier for me to organize the sandboxes in a grid.</p><h4>Contributors</h4><p>We want to thank all our <a href="https://github.com/CompuIves/codesandbox-client/graphs/contributors">75(!) contributors</a> to CodeSandbox. We’re open source, so don’t hesitate to check out <a href="https://github.com/CompuIves/codesandbox-client">our repo</a> and give a star!</p><h4>The Future</h4><p>The dashboard is a perfect building block for the new features we’re working on. We have a lot more exciting announcements planned out for the coming month, so stay tuned by following either <a href="https://twitter.com/codesandboxapp">@codesandboxapp</a> or <a href="https://twitter.com/CompuIves">@CompuIve</a>s!</p><p>Here’s already a sneak peak on what’s to come:</p><h3>Gatsby on Twitter</h3><p>Coming soon.....an online @codesandboxapp IDE for Gatsby! Stay tuned ;)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=876f5933160b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing CodeSandbox Live: real time code collaboration in the browser]]></title>
            <link>https://medium.com/hackernoon/introducing-codesandbox-live-real-time-code-collaboration-in-the-browser-6d508cfc70c9?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/6d508cfc70c9</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[vuejs]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Mon, 26 Mar 2018 17:26:48 GMT</pubDate>
            <atom:updated>2018-03-26T18:47:32.142Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introducing CodeSandbox Live — real time code collaboration in the browser</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9bhGU1OTQUnAWd_aKk4DEA.png" /></figure><p>I started <a href="https://codesandbox.io/">CodeSandbox</a> with the ambition to make sharing and collaboration of web applications easier and more accessible. Nowadays it’s being used for documentation, job interviews, prototyping, troubleshooting, bug reports, workshops, and probably much more.</p><p>Today we want to announce a feature that improves all existing use cases, but moreover will improve collaboration even more and allow for new ways to use CodeSandbox. It’s called CodeSandbox Live (original name!).</p><p>You can see an introduction video to CodeSandbox Live here:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FDnnJ0sLn28s%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DDnnJ0sLn28s&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FDnnJ0sLn28s%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1d5ea4c0920cc901cc19b23402c283d2/href">https://medium.com/media/1d5ea4c0920cc901cc19b23402c283d2/href</a></iframe><h4>Collaborate in real time</h4><p>From now on you can open up your sandbox for real time collaboration. By clicking on the ‘Go Live’ button you will get a URL that you can share with others. They can then join your session and seamlessly collaborate live on the same sandbox with you. They will be able to create files, delete files, move files, write code, the whole shebang. You will see their cursors, selections and which file they’re looking at, while still keeping your own editor features like Intellisense.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xbnuRLkEK4x1Ko-9jErX9g.gif" /></figure><p>Everyone can simultaneously change code in the same document, or choose to edit other files. We dynamically update selections, cursors and code based on the input of others, using <a href="https://en.wikipedia.org/wiki/Operational_transformation">Operational Transforms</a> to resolve any potential conflicts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MjrCiw_MSUMHzWE5yQxBmw.gif" /></figure><h4>Choose who can edit</h4><p>CodeSandbox Live has two modes: ‘<em>Open Mode’ </em>and<em> </em>‘<em>Classroom Mode</em>’. The default mode is Open Mode, which allows everyone to edit. Classroom Mode lets you select who can edit. This is especially useful for lectures and workshops where 30 students can look at the same sandbox. You will only see the cursors and selections of the people who can edit, the ‘editors’.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*buMtt0KQOnYzHGbHdKOrdQ.gif" /></figure><h4>Fork at any time</h4><p>If someone wants to continue with their own version of the sandbox they can simply do that by pressing ‘Fork’ at any time. They can later join the session again if they want to.</p><h4>It’s in beta</h4><p>It turns out that these kind of features are pretty hard to test by yourself or with some friends 😅. I tested this for a pretty long time without finding bugs, but we probably missed something. That’s why we want to mark this as a beta for the time being. If you find any issues you can open up an issue on our <a href="https://github.com/CompuIves/codesandbox-client">GitHub repository</a>. To test the load we’ve marked this feature as Patron-only: a live room can only be created if you are a <a href="https://codesandbox.io/patron">Patron</a>, everyone can still join created rooms.</p><h4>Test Sessions</h4><p>There is no limit on how many users can connect to one live session, but we haven’t tested bigger crowds yet. In the coming weeks I will share live test sessions and streams on <a href="https://twitter.com/CompuIves">my Twitter</a>, everyone is encouraged to join them!</p><h4>How it works</h4><p>I’m really happy with the implementation of this system. In the frontend we’re using parts of <a href="https://github.com/Operational-Transformation/ot.js">ot.js</a>. On the backend we have our Elixir (Phoenix) server that runs a custom OT implementation together with <a href="https://github.com/jclem/ot_ex">ot_ex</a>. Every live room is a separate Elixir process, and all state is stored in Redis to allow for temporary server disconnection or rolling updates. I will <strong>definitely </strong>write a more detailed post about this. There were some really interesting challenges, and <em>many</em> race conditions. It was one of the most fun features to build by far.</p><p>This feature has been a blast to build and test. I hope you’ll have as much fun using CodeSandbox Live as I had testing it! Let us know what you think on the <a href="https://twitter.com/codesandboxapp">CodeSandbox Twitter</a> or <a href="https://twitter.com/CompuIves">my Twitter</a>.</p><h4>We’re open source</h4><p>If you’re interested in the source of the frontend, you can find it here:</p><p><a href="https://github.com/CompuIves/codesandbox-client">CompuIves/codesandbox-client</a></p><p>We’ve also recently opened an <a href="https://opencollective.com/codesandbox">Open Collective</a> for companies that want to support our open source work.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6d508cfc70c9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/introducing-codesandbox-live-real-time-code-collaboration-in-the-browser-6d508cfc70c9">Introducing CodeSandbox Live: real time code collaboration in the browser</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</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 Vanilla Template to CodeSandbox]]></title>
            <link>https://medium.com/hackernoon/introducing-the-vanilla-template-to-codesandbox-32244b58acec?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/32244b58acec</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Wed, 28 Feb 2018 16:31:44 GMT</pubDate>
            <atom:updated>2018-02-28T16:31:44.662Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mPkiO3QwI6imN7MDPPblvA.png" /></figure><p>From day one we’ve always tied templates to a CLI. The main reason for this is that we want to keep sandboxes simple, you shouldn’t need to do any configuration to get started. I didn’t want to create a ‘Vanilla’ template because there was no way to create ‘vanilla’ web projects without configuration, until recently.</p><h3>Parcel</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/657/1*8eiQhu9zJK4O9p3rnkPeGA.png" /></figure><p>A new bundler called ‘<a href="https://parceljs.org/">Parcel</a>’ was released in December by <a href="https://medium.com/u/fdafd09cb14a">devongovett</a>. Parcel is a web application bundler that values zero configuration. They reuse classic web concepts, like using index.html as the entry point of the application, which makes it really easy and intuitive to get started with a new project. You only have to create an index.html and run parcel index.html to get a working application. They automatically detect what kind of web application you’re running, and adapt the configuration to that if it’s not specifically set.</p><p>This is aligns perfectly with the values of CodeSandbox. There is almost no friction to get started, and all the needed configuration is automatically detected &amp; installed. That’s why I decided to <strong>finally</strong> build a Vanilla template and use Parcel as our configuration behind it.</p><h3>Vanilla Template</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xdJCpb0Zf9Cds5PErtaeEw.png" /></figure><p>We have a new sandbox called vanilla, unlike other sandboxes, this sandbox has index.html as its entry. From this index.html you can add script and link tags to other files and they will be added to the bundle. We support all loaders that Parcel supports, so we support:</p><ul><li>Babel</li><li>TypeScript</li><li>SCSS/SASS</li><li>LESS</li><li>Stylus</li><li>CSS Modules</li></ul><p>We also recognize the difference between:</p><pre>import styles from &#39;./styles.css&#39;;</pre><p>and</p><pre>import &#39;./styles.css&#39;;</pre><p>In the first code block we will generate css modules from the css file, and in the second block we won’t.</p><p>You can try it out here:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fvanilla&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fvanilla&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fvanilla%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/9bf252be9cc45dc77e6fd6a3c83a95b7/href">https://medium.com/media/9bf252be9cc45dc77e6fd6a3c83a95b7/href</a></iframe><h4>Configuration</h4><p>Like Parcel, we automatically do configuration for you. We automatically detect if you’re using react or preact and will adjust our Babel configuration for it. We do support Babel/TypeScript configuration, so you can also choose to do your own configuration by creating a tsconfig.json or a .babelrc.</p><h4>GitHub, Zip Extraction &amp; Deployment Integration</h4><p>Like the other templates, you can create repos, make commits and PRs, download and deploy sandboxes using this template. Without leaving the browser.</p><h3>Beta Warning</h3><p>This is our first template that uses html as an entry point, so there can be bugs or unintended behaviour that still needs to be solved. Please let us know in the repo if you find any issues!</p><p><a href="https://github.com/CompuIves/codesandbox-client">CompuIves/codesandbox-client</a></p><h4>Thanks</h4><p>I want to thank <a href="https://medium.com/u/fdafd09cb14a">devongovett</a> for building this beautiful bundler, I was able to effortlessly build an application in it. Great work!</p><p>If you like what we’re doing, consider becoming a <a href="https://github.com/CompuIves/codesandbox-client">contributor</a> or a <a href="http://codesandbox.io/patron">patron</a>! You can stay up to date with CodeSandbox news either on <a href="https://twitter.com/CompuIves">@CompuIves</a> or <a href="https://twitter.com/codesandboxapp">@codesandboxapp</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=32244b58acec" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/introducing-the-vanilla-template-to-codesandbox-32244b58acec">Introducing the Vanilla Template to CodeSandbox</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How CodeSandbox uses Puppeteer & Jest to test sandbox functionality]]></title>
            <link>https://medium.com/hackernoon/how-codesandbox-uses-puppeteer-jest-to-test-sandbox-functionality-17068b3bd23b?source=rss-ee6691f0bd65------2</link>
            <guid isPermaLink="false">https://medium.com/p/17068b3bd23b</guid>
            <category><![CDATA[jest]]></category>
            <category><![CDATA[puppeteer]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[testing]]></category>
            <category><![CDATA[sandbox]]></category>
            <dc:creator><![CDATA[Ives van Hoorne]]></dc:creator>
            <pubDate>Thu, 22 Feb 2018 12:25:24 GMT</pubDate>
            <atom:updated>2018-02-22T12:43:15.792Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C8O5Nd8UeoXQzswQdv8_WQ.png" /></figure><p>Last year a tool called ‘<a href="https://github.com/GoogleChrome/puppeteer">Puppeteer</a>’ was released by the <a href="https://medium.com/u/3ccd3df9b3cf">Chrome Developers</a> team. This tool is a headless Chrome, which means that with it you can interact with and visit websites programmatically. This is a powerful concept that has many uses.</p><p><a href="https://codesandbox.io/">CodeSandbox </a>uses Puppeteer extensively nowadays. I want to explain in 2 posts how we use Puppeteer. In this post I will explain why and how we use Puppeteer for our test suite. In the next post I will cover how we use Puppeteer and serverless functions to generate previews and metadata for sandboxes (projects).</p><h3>But Why?</h3><p>In CodeSandbox we do all bundling of the sandbox code in the browser, <a href="https://hackernoon.com/how-i-created-a-parallel-offline-extensible-browser-based-bundler-886db508cc31">I’ve built a custom bundler</a> to do this. We still make changes and add features to this bundler, so it’s crucial that we extensively test if the changes affect existing sandboxes built by users.</p><h4>Before</h4><p>I’ve always kept a list of ‘test’ sandboxes and would load every sandbox manually to see if they still worked. As you can probably expect, this proved to be very time consuming as the list kept growing beyond 20 sandboxes and we started getting more contributions. Puppeteer to the rescue!</p><h4>Solution</h4><p>Puppeteer has a really nifty function called screenshot (you can try it <a href="https://try-puppeteer.appspot.com/">here</a>). The function does exactly what it describes: it takes a screenshot of the current webpage and returns the Buffer of the screenshot. For CodeSandbox we can use this as a snapshot tool: after every commit we take a screenshot of all test sandboxes and compare them with the previously stored screenshots. If there’s a difference of more than 1% we fail the test suite.</p><h3><strong>Implementation</strong></h3><p>I decided to use <a href="https://facebook.github.io/jest/">Jest</a> for running all tests. We start by setting up an array of sandboxes to test:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7d2ac3193e09a5b27e1bd3cdb0b0efdc/href">https://medium.com/media/7d2ac3193e09a5b27e1bd3cdb0b0efdc/href</a></iframe><p>This is a list of sandbox ids, of which some have extra options like a more tolerant threshold. We iterate this list to create test cases:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/cdb98175ea7e1caf217612962e2b46c3/href">https://medium.com/media/cdb98175ea7e1caf217612962e2b46c3/href</a></iframe><p>The biggest question was how to take a screenshot of a single sandbox. This turned out to be quite simple, we already support opening a sandbox as a separate page by going to https://:id.codesandbox.io (example: <a href="https://vue.codesandbox.io/">https://vue.codesandbox.io</a>). So the only thing left for me was adding this functionality to the development server, so we can create screenshots with the new code. I ended up changing our webpack config to have a ‘test’ mode, this mode will only build the sandbox bundler and host it at http://localhost:3001#:id (example: http://localhost:3001#vue). Note that we set the id as a hash, this way we don’t interfere with the routing of the sandbox.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*nxsohnjlNUCR8ugV." /><figcaption>A generated screenshot of a todo redux example</figcaption></figure><p>After having this set up it was fairly straightforward to build the rest. There’s already a library for comparing screenshots called <a href="https://github.com/americanexpress/jest-image-snapshot">jest-image-snapshot</a>. This library exposes toMatchImageSnapshot on expect, which works almost exactly the same as toMatchSnapshot.</p><p>The final implementation looks like this:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/cc1a3b59865f3c5781c9d8c4b7b02324/href">https://medium.com/media/cc1a3b59865f3c5781c9d8c4b7b02324/href</a></iframe><p>You can see in the code that we expose a function called window.__puppeteer__. The bundler calls window.__puppeteer__ when it’s finished, this function is exposed by puppeteer so we can exactly know when we can take the screenshot. The generated screenshots are then saved in the GitHub repo. You can find them <a href="https://github.com/CompuIves/codesandbox-client/blob/master/packages/app/integration-tests/tests/__image_snapshots__/">here</a>.</p><p>We run these tests using CircleCI, but we need to generate the initial screenshots locally. To ensure that we generate similar screenshots as CircleCI we generate screenshots using a docker container. We have a simple script which we just run to generate new screenshots:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/47f161d9eb5a1efa3b2fff6e847645a1/href">https://medium.com/media/47f161d9eb5a1efa3b2fff6e847645a1/href</a></iframe><p>I have set up a simple workflow for CircleCI to start the test server and simultaneously run the tests. These tests are run in a docker container that has Puppeteer preinstalled.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ucz8MXgvrK6SVOyfPMs4TA.png" /><figcaption>The workflow of CodeSandbox, notice the test-integrations step</figcaption></figure><p>We save all diffs as artifacts, so we can easily compare the screenshots. You can see a list of artifacts of a recent test run here: <a href="https://circleci.com/gh/CompuIves/codesandbox-client/4291#artifacts/containers/0">https://circleci.com/gh/CompuIves/codesandbox-client/4291#artifacts/containers/0</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*SreQNaaRyAwc765D.png" /><figcaption>A diff artifact: the arrows are different</figcaption></figure><h3>Conclusion</h3><p>The implementation turned out to be quite simple, but it has saved me a lot of time already. We now test a little over 20 sandboxes for every commit and PR. I also noticed that I’m more inclined to add sandboxes to the test suite too, which made the bundler more stable in general.</p><p>In the next post I will cover how we use Puppeteer with serverless functions to generate metadata and oEmbed tags for sandboxes. You can follow my Twitter <a href="https://twitter.com/CompuIves">@CompuIves</a> or <a href="https://twitter.com/codesandboxapp">@codesandboxapp</a> to stay up to date!</p><p>If you’re interested in the code; all code that was described here (and of CodeSandbox) is open source on GitHub. You can find the main repository here:</p><p><a href="https://github.com/CompuIves/codesandbox-client">CompuIves/codesandbox-client</a></p><p>I hope you found the post interesting, don’t hesitate to respond with more ideas and uses for Puppeteer!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=17068b3bd23b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/how-codesandbox-uses-puppeteer-jest-to-test-sandbox-functionality-17068b3bd23b">How CodeSandbox uses Puppeteer &amp; Jest to test sandbox functionality</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>