<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><style type="text/css">ol.lst-kix_87xzkob9hq8z-4.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-4 0}.lst-kix_87xzkob9hq8z-5>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-5}ul.lst-kix_ch5oks6706ga-1{list-style-type:none}ul.lst-kix_ch5oks6706ga-2{list-style-type:none}ul.lst-kix_ch5oks6706ga-3{list-style-type:none}ul.lst-kix_ch5oks6706ga-4{list-style-type:none}ol.lst-kix_87xzkob9hq8z-8{list-style-type:none}ul.lst-kix_ch5oks6706ga-5{list-style-type:none}ul.lst-kix_ch5oks6706ga-6{list-style-type:none}ul.lst-kix_ch5oks6706ga-7{list-style-type:none}ul.lst-kix_ch5oks6706ga-8{list-style-type:none}ol.lst-kix_87xzkob9hq8z-4{list-style-type:none}ol.lst-kix_87xzkob9hq8z-5{list-style-type:none}ol.lst-kix_87xzkob9hq8z-6{list-style-type:none}ol.lst-kix_87xzkob9hq8z-7{list-style-type:none}ol.lst-kix_87xzkob9hq8z-0{list-style-type:none}ol.lst-kix_87xzkob9hq8z-1{list-style-type:none}ol.lst-kix_87xzkob9hq8z-2{list-style-type:none}.lst-kix_87xzkob9hq8z-8>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-8,lower-roman) ". "}ol.lst-kix_87xzkob9hq8z-3{list-style-type:none}ul.lst-kix_ch5oks6706ga-0{list-style-type:none}.lst-kix_87xzkob9hq8z-7>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-7,lower-latin) ". "}ol.lst-kix_87xzkob9hq8z-7.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-7 0}.lst-kix_87xzkob9hq8z-5>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-5,lower-roman) ". "}.lst-kix_87xzkob9hq8z-0>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-0}.lst-kix_87xzkob9hq8z-4>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-4}.lst-kix_87xzkob9hq8z-6>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-6,decimal) ". "}.lst-kix_87xzkob9hq8z-3>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-3,decimal) ". "}.lst-kix_87xzkob9hq8z-4>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-4,lower-latin) ". "}.lst-kix_87xzkob9hq8z-1>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-1,lower-latin) ". "}.lst-kix_87xzkob9hq8z-2>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-2,lower-roman) ". "}ol.lst-kix_87xzkob9hq8z-5.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-5 0}ol.lst-kix_87xzkob9hq8z-8.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-8 0}.lst-kix_87xzkob9hq8z-0>li:before{content:"" counter(lst-ctn-kix_87xzkob9hq8z-0,decimal) ". "}.lst-kix_ch5oks6706ga-8>li:before{content:"\0025a0 "}ol.lst-kix_87xzkob9hq8z-1.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-1 0}.lst-kix_yqkf4mgu6nx9-0>li:before{content:"\0025cf "}.lst-kix_yqkf4mgu6nx9-3>li:before{content:"\0025cf "}.lst-kix_yqkf4mgu6nx9-1>li:before{content:"\0025cb "}.lst-kix_87xzkob9hq8z-2>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-2}.lst-kix_yqkf4mgu6nx9-2>li:before{content:"\0025a0 "}.lst-kix_yqkf4mgu6nx9-7>li:before{content:"\0025cb "}.lst-kix_87xzkob9hq8z-8>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-8}.lst-kix_yqkf4mgu6nx9-4>li:before{content:"\0025cb "}.lst-kix_yqkf4mgu6nx9-8>li:before{content:"\0025a0 "}.lst-kix_yqkf4mgu6nx9-5>li:before{content:"\0025a0 "}.lst-kix_yqkf4mgu6nx9-6>li:before{content:"\0025cf "}.lst-kix_ch5oks6706ga-7>li:before{content:"\0025cb "}.lst-kix_ch5oks6706ga-6>li:before{content:"\0025cf "}.lst-kix_ch5oks6706ga-4>li:before{content:"\0025cb "}ol.lst-kix_87xzkob9hq8z-2.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-2 0}.lst-kix_ch5oks6706ga-3>li:before{content:"\0025cf "}.lst-kix_ch5oks6706ga-5>li:before{content:"\0025a0 "}.lst-kix_87xzkob9hq8z-7>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-7}ul.lst-kix_yqkf4mgu6nx9-3{list-style-type:none}.lst-kix_ch5oks6706ga-0>li:before{content:"\0025cf "}ul.lst-kix_yqkf4mgu6nx9-2{list-style-type:none}ul.lst-kix_yqkf4mgu6nx9-5{list-style-type:none}.lst-kix_ch5oks6706ga-1>li:before{content:"\0025cb "}ul.lst-kix_yqkf4mgu6nx9-4{list-style-type:none}.lst-kix_ch5oks6706ga-2>li:before{content:"\0025a0 "}ol.lst-kix_87xzkob9hq8z-3.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-3 0}ul.lst-kix_yqkf4mgu6nx9-1{list-style-type:none}ul.lst-kix_yqkf4mgu6nx9-0{list-style-type:none}.lst-kix_87xzkob9hq8z-1>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-1}ol.lst-kix_87xzkob9hq8z-0.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-0 0}.lst-kix_87xzkob9hq8z-3>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-3}ul.lst-kix_yqkf4mgu6nx9-7{list-style-type:none}.lst-kix_87xzkob9hq8z-6>li{counter-increment:lst-ctn-kix_87xzkob9hq8z-6}ul.lst-kix_yqkf4mgu6nx9-6{list-style-type:none}ul.lst-kix_yqkf4mgu6nx9-8{list-style-type:none}ol.lst-kix_87xzkob9hq8z-6.start{counter-reset:lst-ctn-kix_87xzkob9hq8z-6 0}ol{margin:0;padding:0}table td,table th{padding:0}.c5{background-color:#ffffff;color:#24292e;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:10.5pt;font-family:"Arial";font-style:normal}.c22{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:26pt;font-family:"Arial";font-style:normal}.c3{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c7{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c17{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c21{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:10pt;font-family:"Courier New";font-style:normal}.c1{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c23{padding-top:0pt;padding-bottom:10pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c12{padding-top:0pt;padding-bottom:12pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c19{padding-top:0pt;padding-bottom:12pt;line-height:1.15;orphans:2;widows:2;text-align:center}.c24{padding-top:3pt;padding-bottom:12pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c20{padding-top:0pt;padding-bottom:10pt;line-height:1.15;orphans:2;widows:2;text-align:center}.c15{padding-top:0pt;padding-bottom:12pt;line-height:1.15;page-break-after:avoid;text-align:left}.c14{padding-top:3pt;padding-bottom:12pt;line-height:1.15;page-break-after:avoid;text-align:left}.c30{padding-top:20pt;padding-bottom:12pt;line-height:1.15;page-break-after:avoid;text-align:left}.c13{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;text-align:left}.c27{padding-top:10pt;padding-bottom:12pt;line-height:1.15;page-break-after:avoid;text-align:left}.c28{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c9{background-color:#ffffff;font-size:10.5pt;color:#1155cc;text-decoration:underline}.c26{color:#000000;text-decoration:none;vertical-align:baseline;font-style:normal}.c4{font-size:8pt;font-family:"Courier New";font-weight:400}.c29{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c6{background-color:#ffffff;font-size:10.5pt;color:#24292e}.c10{color:#1155cc;text-decoration:underline}.c8{color:inherit;text-decoration:inherit}.c16{padding:0;margin:0}.c18{border:1px solid black;margin:5px}.c11{margin-left:36pt;padding-left:0pt}.c25{text-indent:36pt}.c2{height:11pt}.c0{font-style:italic}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style></head><body class="c29"><p class="c15 title" id="h.n45rv0n3qdqc"><span class="c22">Binder 2.0, a tech guide</span></p><p class="c23"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 320.11px; height: 256.50px;"><img alt="" src="images/image1.png" style="width: 320.11px; height: 256.50px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12"><span class="c5">Note: this post focuses more on technical changes in the Binder 2.0 reboot. For a post about user-facing features and future plans, see this eLife blog post LINK TO POST.</span></p><p class="c12"><span class="c9"><a class="c8" href="https://www.google.com/url?q=https://docs.google.com/document/d/16JPTJQWz2IvMzckZA-AI29fY-jxd2gmOBIuUA5_3TIQ/edit&sa=D&ust=1511981005732000&usg=AFQjCNGNmyqq-oYDQG1QsJnhS5SB-8ri9w">Current link to elife draft</a></span></p><p class="c12"><span class="c6">We are undergoing a dramatic increase in the complexity of techniques for analyzing data, doing scientific research, and sharing our work with others. In early 2016, the </span><span class="c9"><a class="c8" href="https://www.google.com/url?q=http://mybinder.org&sa=D&ust=1511981005733000&usg=AFQjCNGORjicQ72dX2whIFfMaCrWol6fng">Binder project</a></span><span class="c6"> was announced, attempting to connect these three components. A </span><span class="c9"><a class="c8" href="https://www.google.com/url?q=https://elifesciences.org/labs/a7d53a88/toward-publishing-reproducible-computation-with-binder&sa=D&ust=1511981005733000&usg=AFQjCNF5Qqc33lLpq75RMi6aQ3v85FawbQ">blogpost in eLife</a></span><span class="c6"> described a vision where scientists could specify dependencies along with a collection of </span><span class="c6">Jupyter notebooks</span><span class="c5">. Binder builds a Docker image from these dependencies, and provides a URL where any user in the world can instantly recreate this environment.</span></p><p class="c12"><span class="c5">Want to see it in action? Click the button below.</span></p><p class="c19"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 155.50px; height: 33.46px;"><img alt="" src="images/image2.png" style="width: 155.50px; height: 33.46px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12"><span class="c6">With this post we are proud to announce the next version of Binder. It aims to be more modular, more flexible, more stable, faster, and more extensible than its predecessor. Powering this version of Binder is a collection of tools in the Jupyter ecosystem. Since being released, the Binder project has </span><span class="c6">learned many things</span><span class="c6"> about implementing fast, flexible online deployments. In addition, its vision has expanded to include not only Jupyter notebooks, but many other computational workflows. You can access an open beta version of this deployment here:</span></p><p class="c12"><span class="c9"><a class="c8" href="https://www.google.com/url?q=http://beta.mybinder.org&sa=D&ust=1511981005735000&usg=AFQjCNH3nXzvfB-CvGvg7A5Sk2FWWPmvKw">mybinder.org</a></span></p><p class="c12"><span class="c6">You can find a list of sample repositories to learn how to create “Binder”-ready repositories </span><span class="c6">here</span><span class="c5">:</span></p><p class="c12"><span class="c9"><a class="c8" href="https://www.google.com/url?q=http://github.com/binder-examples&sa=D&ust=1511981005735000&usg=AFQjCNHc0ympzK4iMOsvxV0WqxiVuqnFHQ">github.com/binder-examples</a></span></p><p class="c12"><span class="c6">You can also see what the Binder community has been up to in creating their own repositories by checking the GitHub </span><span class="c6">Binder </span><span class="c6">topic</span><span class="c5">:</span></p><p class="c12 c25"><span class="c9"><a class="c8" href="https://www.google.com/url?q=https://github.com/topics/binder&sa=D&ust=1511981005736000&usg=AFQjCNEbDzI4NdWtW3iN3CDGsyhsQ8iCmQ">https://github.com/topics/binder</a></span></p><p class="c12 c25"><span class="c9"><a class="c8" href="https://www.google.com/url?q=https://github.com/topics/binder-ready&sa=D&ust=1511981005737000&usg=AFQjCNG_bWlPVi8z7gGpmocTbPldD06aUQ">https://github.com/topics/binder-ready</a></span></p><p class="c12"><span class="c6">Give it a shot, build some repositories, and importantly, tell us what could be improved on our </span><span class="c9"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/binderhub&sa=D&ust=1511981005737000&usg=AFQjCNFcJWRTJ3hf-GnXma8bkYFwBHdF2Q">GitHub repo</a></span><span class="c5">. Below we’ll describe a bit about what’s new.</span></p><h1 class="c30" id="h.a93al1e8betg"><span>What’s new?</span><sup><a href="#cmnt1" id="cmnt_ref1">[a]</a></sup><sup><a href="#cmnt2" id="cmnt_ref2">[b]</a></sup></h1><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>First off we’ll describe how the experience will change for users. The short answer is: not much. The goal of Binder is still enabling you to intantly create interactive and shareable repositories. We’ve completely rebuilt the backend of Binder, but we’ve made minimal changes to the front-end user experience.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>The biggest difference you should notice is that Binder is both </span><span class="c0">faster </span><span>and </span><span class="c0">more stable</span><span>. </span><span class="c3">You’ll still be able to generate Binder links from a git URL from a single web-page. However, there are a few key differences:</span></p><h2 class="c14" id="h.yucarsc63wl"><span class="c7">New Default Environment</span></h2><p class="c1"><span>Old versions of Binder were based off of a Docker image that contained a fairly heavy computational environment. The new Binder deployment makes minimal assumptions about what environment you want installed,</span><span> by default</span><span> the only thing that will be installed is the Jupyter </span><span>Notebook </span><span>and Python 3. This means you’ll need to be more expressive in the dependencies you include in your dependency files. </span><span>For example, if you want `numpy` or `matplotlib`, you should specify them in a “requirements.txt” or “environment.yml” file. </span><span>This will make the base Binder Docker image much smaller and faster to deploy.</span><span> In addition, since you’re explicitly listing your requirements it makes reproducing your work more reliable, and allows the Binder infrastructure to change more freely without breaking your repository code. </span></p><p class="c1 c2"><span class="c3"></span></p><h2 class="c14" id="h.adv5nhmu6jlj"><span class="c7">New URL structure</span></h2><p class="c1"><span>The new URL structure for Binder follows the following convention</span><span class="c3">:</span></p><p class="c1 c2"><span class="c4 c26"></span></p><p class="c1"><span class="c4">`</span><span class="c4">https://</span><span class="c4">mybinder.org/v2/gh/<org-name>/<repo-name>/<branch</span><span class="c4">|</span><span class="c4">tag</span><span class="c4">|</span><span class="c4">hash-name>?filepath=<path-to-file>`</span></p><p class="c1"><span>For example, below is the URL for a basic Binder-ready Python 3 repository, it includes basic information about the </span><span>repository</span><span class="c3">:</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span class="c21">https://mybinder.org/v2/gh/binder-examples/requirements/master</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span class="c3">You can also specify parameters that will be passed to BinderHub, which do things like point users to a particular file or initialize a user-interface. For example, the following URL initializes JupyterLab once users click the link:</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span class="c21">https://mybinder.org/v2/gh/binder-examples/jupyterlab/master?urlpath=lab</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>In each case, note the `gh` at the very beginning - this specifies that the git URL exists on github.</span><span>com</span><span>. It </span><span>is</span><span> possible to build new URL parsers for other online repositories such as BitBucket</span><span>, osf.io, or any other provider</span><span>.</span><span> We are currently focusing on </span><span>Git and GitHub,</span><span> but nothing prevents Binder from being compatible with other kinds of content providers. Shortly before this blog post we added support for arbitrary git URLs to binderhub, so watch this space.</span></p><h2 class="c13" id="h.cehsqdn8voph"><span class="c7">Specify a specific branch / tag / commit</span></h2><p class="c1"><span>Also notice that in the URL above you can specify a branch, tag, or commit hash for the Binder image. </span><span>This allows you to ensure that a Binder image will *always* remain the same (if you specify package versions properly)</span><span>. This is a crucial step for reproducibility and maintaining consistency in how users experience the files in your repository.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>Notice that in the URL above you can specify a commit hash for the Binder image. This hash is unique to the state of the code at the moment that the commit was made, ensuring that Binder can rebuild the </span><span class="c0">exact </span><span>same environment any time. Note that if authors don’t want to guarantee the same reproducible environment, they can specify a branch or tag and BinderHub will resolve it to the latest commit hash before building the environment. </span></p><h2 class="c13" id="h.t77v05zcm88m"><span class="c7">Binder auto-building</span></h2><p class="c1"><span class="c3">When a git repository is launched, Binder will now check whether an image has already been built for that repository at the same commit hash. If it has, then Binder will skip the building process and take you straight to a JupyterHub instance that serves this image.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>If the image </span><span class="c0">hasn’t </span><span>been built, then it will automatically be generated before sending the user to JupyterHub. The only difference will be the amount of time it takes before entering the JupyterHub environment. This means that authors no longer need to explicitly build their Binder images when they update a branch. The next time someone clicks a Binder link, it will happen automatically. </span><span>If you </span><span class="c0">don’t </span><span>want this behavior, be sure to point Binder to a specific tag or commit hash, rather than a branch name or tag.</span><span class="c3"> For example, here’s a Binder URL that will always point to the same commit hash:</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c20"><span class="c4">https://mybinder.org/v2/gh/wildtreetech/explore-open-data/</span><span class="c4 c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/wildtreetech/explore-open-data/tree/binder20-elife&sa=D&ust=1511981005745000&usg=AFQjCNFhO6P3N1EaOhXyJ7AmskOaW53XUA">binder20-elife</a></span></p><p class="c1"><span class="c3">While this URL points to a branch, and will thus be re-built each time a new commit is made to that branch:</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c20"><span class="c4">https://mybinder.org/v2/gh/wildtreetech/explore-open-data/master</span></p><h2 class="c14" id="h.gqyet88qnmxz"><span class="c7">More options for dependency files</span></h2><p class="c1"><span>Users often want to specify a computational environment that is more complex than a simple list of Python requirements. While this is possible by specifying a Dockerfile, it’s often an overly-complicated solution to this problem. Binder now utilizes </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyter/repo2docker&sa=D&ust=1511981005746000&usg=AFQjCNFHkmMBaoybank52UF_i_hJf2Z3fA">repo2docker</a></span><span> to build a Docker image from your repository. This makes it possible to specify a more complex environment with text files. For example, you can use an `apt.txt` file to install packages with `apt-get`, or use a file called `postBuild` to define shell commands that are run before generating the Docker image (e.g. for downloading some data or running scripts). See the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=http://repo2docker.readthedocs.io/en/latest/samples.html%23system-post-build-scripts&sa=D&ust=1511981005746000&usg=AFQjCNGgB-_0poV5sIQBixN3ULExWSg1TA">repo2docker documentation</a></span><span> for a list of files that are supported with Binder.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span>For a selection of examples that show off how to specify dependencies take a look at the example gallery: https://github.com/binder-examples</span></p><h2 class="c14" id="h.ckporyctil9k"><span class="c7">More user interfaces</span></h2><p class="c1"><span>The previous iteration of Binder only supported the classic Jupyter Notebook user interface, while the new deployment will additionally support </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/binder-examples/dockerfile-rstudio&sa=D&ust=1511981005747000&usg=AFQjCNGgM8vN3dNz-I9c-AMD6quNnLZ8vw">RStudio</a></span><span> </span><span>and</span><span> </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/binder-examples/jupyterlab&sa=D&ust=1511981005748000&usg=AFQjCNHuOp2bPnUhLQkSS5-IKni1Run2dg">JupyterLab</a></span><span>. Because of the extra build configuration files specified above, you can also utilize more tools in the Jupyter widgets ecosystem, such as the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/binder-examples/jupyter-rise&sa=D&ust=1511981005748000&usg=AFQjCNGQh_AgRnL3KocnDOp10xorysCUHA">RISE plugin for interactive presentations</a></span><span> or the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/oschuett/appmode&sa=D&ust=1511981005748000&usg=AFQjCNEpszkBayL9hpK3f0DxHoRP8VM3ig">appmode </a></span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/oschuett/appmode&sa=D&ust=1511981005748000&usg=AFQjCNEpszkBayL9hpK3f0DxHoRP8VM3ig">plugin</a></span><span> to generate interactive apps from your repository.</span><span>. We also welcome contributions to add support for other user interfaces.</span></p><p class="c1 c2"><span class="c3"></span></p><h2 class="c27" id="h.kgr9kbf58rd8"><span class="c7">More online repository providers</span></h2><p class="c1"><span>While GitHub is a fantastic repository of open-source code, it’s not the </span><span class="c0">only </span><span>repository. The new Binder deployment makes it straightforward to adding support for new sources of code (for example, GitLab, the OSF, or even non-git codebases). Currently GitHub is the only supported source for code, but we welcome contributions enabling support for new </span><span>sources</span><span class="c3">.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c24"><span>We’re excited about this next step in Binder’s development, and hopeful that we can build a community around this powerful set of tools. Don’t hesitate to open an issue or pull request on our </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/binderhub&sa=D&ust=1511981005750000&usg=AFQjCNEE4-R5xi7yVNHtCy-R6omUNv805g">GitHub repository</a></span><span>, or to reach out via </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://gitter.im/jupyterhub/binder&sa=D&ust=1511981005750000&usg=AFQjCNFxVd4aRHDvVK8g3Q7Om1Yk-aCTLQ">our Gitter channel</a></span><span>. We look forward to seeing what comes next, and to continue enabling reproducible and open workflows in data science and research.</span></p><h1 class="c14" id="h.z1xno2vptb10"><span class="c17">For developers</span></h1><p class="c1"><span class="c3">The next few sections are meant for developers interested in deploying their own Binder, or for those interested in the technical details behind the new deployment.</span></p><h2 class="c13" id="h.dx97a1j2gs1h"><span class="c7">Tech components</span></h2><p class="c1"><span class="c3">The three main technical components behind the new Binder backend are:</span></p><ul class="c16 lst-kix_ch5oks6706ga-0 start"><li class="c1 c11"><span class="c10"><a class="c8" href="https://www.google.com/url?q=http://binderhub.readthedocs.io&sa=D&ust=1511981005751000&usg=AFQjCNFy8yR-VuboonbXl-0tgXvdJrTsrA">BinderHub</a></span><span>, currently on display at `mybinder.org` and contained in the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/binderhub&sa=D&ust=1511981005751000&usg=AFQjCNGUw7L6HCXa2UyfR5epfIfGykHQEg">binderhub repository</a></span><span>.</span></li><li class="c1 c11"><span class="c10"><a class="c8" href="https://www.google.com/url?q=http://repo2docker.readthedocs.io&sa=D&ust=1511981005752000&usg=AFQjCNG-7WXVU_62bfYWM090VHR7exr1EA">repo2docker</a></span><span class="c3">, a tool that converts a code repository into a Docker image with an environment specified via dependency files (e.g., requirements.txt).</span></li><li class="c1 c11"><span class="c10"><a class="c8" href="https://www.google.com/url?q=http://jupyterhub.readthedocs.io/en/latest/&sa=D&ust=1511981005752000&usg=AFQjCNGw5RXN-N1mUgTg1oigHLO9KTl-nw">JupyterHub</a></span><span>, which hosts user instances with a server in the cloud. We use a </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=http://z2jh.jupyter.org&sa=D&ust=1511981005753000&usg=AFQjCNGTj6wR0Zr003qDQzCagOqCEk8BRQ">distribution of JupyterHub</a></span><span> that runs on top of Kubernetes.</span></li></ul><p class="c1"><span>For more information on the infrastructure behind Binder, </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://binderhub.readthedocs.io/en/latest/&sa=D&ust=1511981005753000&usg=AFQjCNGaaWuY0R8mycESS6s9ui4As4hIdw">see the documentation</a></span><span class="c3">.</span></p><p class="c1 c2"><span class="c3"></span></p><h2 class="c13" id="h.6y0j5uo0isnk"><span class="c7">Kubernetes</span></h2><p class="c1"><span>Binder now also heavily relies on </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://kubernetes.io/&sa=D&ust=1511981005754000&usg=AFQjCNECI0hxNuxrIoxJEZwm77zCxIOa-Q">Kubernetes</a></span><span> </span><span>for scaling our image building service and the JupyterHub. Kubernetes is massively scalable (it was originally developed to support Google’s web services) and has a strong community of developers behind it. Moreover, Kubernetes is cloud-agnostic. It can be run on Google Cloud, Microsoft Azure, and Amazon AWS among others, as well as on your own bare metal hardware if needed. Because BinderHub is built off of Kubernetes, you can deploy Binder off of any of these resources as well (see below).</span></p><h2 class="c14" id="h.fg01tnfi26g8"><span class="c7">Deploying your own Binder server</span></h2><p class="c1"><span>While mybinder.org will continue to exist as a public service, we hope to see new Binder deployments for many different use cases in the wild. </span><span>One of our primary goals is to make it easier for users to deploy their own Binder servers. This is relatively straightforward by following the instructions on the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://binderhub.readthedocs.io/en/latest/&sa=D&ust=1511981005755000&usg=AFQjCNHua71Rk3EV7qG3nG9Jg9XZ262b7Q">BinderHub documentation</a></span><span>, which are currently in an alpha state and undergoing improvements as the technology evolves</span><span>. We’re continuously updating these steps to make them as clear as possible, so please don’t hesitate to open an issue or a pull request on our </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/binderhub&sa=D&ust=1511981005756000&usg=AFQjCNE9WAuiR-9XxHcO9WJpZeoHJd4B3w">github repository</a></span><span> and make suggestions.</span></p><p class="c1 c2"><span class="c3"></span></p><p class="c1"><span class="c6">W</span><span class="c6">e would love to see others deploy their own BinderHub servers, either for their own communities, or as part of a federated public service of BinderHubs.</span></p><h1 class="c14" id="h.bobsyzk3qnmh"><span class="c17">Future development</span></h1><p class="c1"><span>This is the just the beginning of new features and improvements to Binder. We’re working hard to grow an open-source community around these tools, and we encourage issues, comments, and PRs on the </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/binderhub&sa=D&ust=1511981005757000&usg=AFQjCNFlPhmyXV7NM91B1SBDno_AsLpefA">BinderHub</a></span><span>, </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyter/repo2docker&sa=D&ust=1511981005758000&usg=AFQjCNFR-oiiNwZSvUywbPrfF78oQznN-Q">repo2docker</a></span><span>, and </span><span class="c10"><a class="c8" href="https://www.google.com/url?q=https://github.com/jupyterhub/jupyterhub&sa=D&ust=1511981005758000&usg=AFQjCNHvPhEybzK6h8T01j42_sXlnsHi3Q">JupyterHub</a></span><span> repositories.</span><span class="c6"> We look forward to growing the Binder ecosystem, and we’re excited to see all of the Binders that people design.</span></p><div class="c18"><p class="c28"><a href="#cmnt_ref1" id="cmnt1">[a]</a><span class="c3">it may make sense to have a table of contents with section links since this post is long</span></p></div><div class="c18"><p class="c28"><a href="#cmnt_ref2" id="cmnt2">[b]</a><span class="c3">let's see how it looks on the medium post...I'm not sure if it supports TOC but I agree it could be helpful</span></p></div></body></html>