Ives van Hoorne

@compuives

Co-Founder @ CodeSandbox

Eeeevs

Aives

Flip

https://codesandbox.io

Inner Workings

Future

Story

5 years back

What if I put my local editor on

the web?

31 October 2016

11 November 2016

25 November 2016

26 November 2016

17 December 2016

29 December 2016

Component Editor

Component Library Builder

Online Component Library Builder

Online React Editor

Let the idea

evolve

26 January 2017

I lost motivation

Seek external feedback

Release fast

Follow KISS

Keep it simple, stupid

Don't overengineer

Values

Accessibility

Collaboration

Empowerment

Lower the learning curve

Encourage Sharing & Discovery

Stay in flow

So, what is CodeSandbox today?

And how does it work?

In-Browser Bundler

In-Browser VSCode

Live Collaboration

Challenges

  • Bundling

  • NPM Dependencies

Before

import Hello from './Hello';
var Hello = require('./Hello').default;

Evaluate

JavaScript

Transpiled

const require = (path) => { };
(0, eval)(transpiledCode)

Limitations

1. Everything needs to be synchronous

2. No parallelization

3. No support for emitting module

- .vue => {.css, .js, .js}

4. No chained loaders

- sass => css => css modules

Now

Evaluate

Files

Transpiled

var

var

var

var

var

var

Workers

https://codesandbox.io/s/example-bundler-2-bru8v

Challenges

  • Bundling

  • NPM Dependencies

npm

npm

Create React App

158MB

Average Phone

1MB/s

3 minutes

creating a package

creating a package

saving the package

react@16.2.0.json

npm

react@16.2.0 & react-dom@16.2.0

I want

Packager

Packager

react

react-dom

Merge Dependencies

browser

It's not perfect

unpkg.com/react-icons/fa/beer.js

unpkg.com/react-icons/?meta

Sandpack

https://github.com/codesandbox/sandpack

https://sandpack.vercel.app/

In-Browser Bundler

In-Browser VSCode

Live Collaboration

VSCode Themes

.tmLanguage

oniguruma

onigasm

NeekSandhu

What about extensions?

How VSCode Extensions Work

VSCode + UI

Extension Host

tsserver

CodeSandbox Scenario #1

CodeSandbox

Extension Host

tsserver

bridge

CodeSandbox Scenario #2

CodeSandbox

Extension Host

tsserver

VSCode

Node

Shims

Node

Shims

Main Process

Renderer Process

Renderer Process

fs

net

tty

module

http

os

electron

Try #1

fileService

notificationService

clipboardService

storageService

requestService

editorService

codeSandboxService

fileService

storageService

Try #2

Requirements

Don't change code

Expose VSCode as an API

Keep it fast and small

The Future of CodeSandbox

Sandboxes

Prototypes

Bug Reports

Workshops

Job Interviews

Examples

Demos

Excalidraw

Sandbox

Project

CodeSandbox Projects

Single click fork

Start in single click

No configuration

Share with a link

Customizable devtools

But for git repositories

Live collaboration

Every branch is shared

Every branch is shared

Every branch is shared

Clicking "Fork" creates new branch

Clicking "Fork" creates new branch

Every branch is backed by a VM

/:owner/:repo/main

/:owner/:repo/feature/branch

Every VM is backed by a URL

/:owner/:repo/main

/:owner/:repo/feature/branch

But you can use any editor you like

with live collaboration!

Demo

Future Work

Thanks a lot!

@compuives

codesandbox/codesandbox-client

Facebook Talk CodeSandbox

By Ives van Hoorne

Facebook Talk CodeSandbox

  • 634