WebR – R in the Browser

(webr.sh)

90 points | by creata 5 days ago

9 comments

  • maxi-k 5 hours ago
    This is an awesome project. We recently used it to build a statically hosted EC2 instance comparison website, using this for plotting (ggplot2) and DuckDB-Wasm for querying the instance data. Only the first page load is slow b/c of all the wasm and R packages, but it's fast for interactive querying and plotting and was really easy to create.
    • carbocation 5 hours ago
      If the URL is public, it would be neat to see if you want to share it.
      • maxi-k 5 hours ago
        Sure! https://cloudspecs.fyi/ (feedback welcome!)

        Since it's now accepted, I guess I can also share the accompanying paper [1] about cloud hardware evolution; the idea is that every plot in the paper is clickable and opens an interactive version of itself. WebR was perfect for this use case.

        https://www.cs.cit.tum.de/fileadmin/w00cfj/dis/papers/clouds...

        • cscheid 3 hours ago
          (Disclosure: I work on https://quarto.org, for the same company that the author of WebR works on) Thanks for sharing that PDF link. It's so good! Would you be willing to write a bit about how you produced that PDF? It's a great example of what places like CIDR should be encouraging in terms of academic publications.
          • maxi-k 2 hours ago
            I didn't know Quarto, it looks interesting, thanks for sharing!

            cloudspecs encodes the entire state (sql code, R code, view state) in the URL compressed and base64 encoded, since we wanted to be able to send links around to share interesting plots/tables with each other and revisit old plots if the data changes, e.g., if new EC2 instances come out.

            The PDF is produced by good old latex, and the state-in-URL mechanism allows us to just use regular hyperlinks for the clickable plot. The limit is the max URL length browsers allow, but we haven't hit it.

            Since we use R+ggplot for research anyway in the local environment (emacs+RSS), we just copied the code into cloudspecs, then copied the resulting link into latex. So a bit of manual work if we want to change the plots in the paper.

            Let me know if you're curious about specific things or want to collaborate. Cheers!

        • jansim 4 hours ago
          I love this, thanks for sharing! Linking to interactive versions of figures is such a great idea and use of WASM.
          • maxi-k 3 hours ago
            Thanks! We hope other papers will adopt the idea as well. I think most use either python+matplotlib or R+ggplot for figures, so WebR is a real win.

            Since it's only static files, you can also imagine "reproducibility archives" that you can just run in the browser (hopefully) years later w/o installing anything.

        • georgestagg 3 hours ago
          This is great! Thanks for sharing!
          • maxi-k 3 hours ago
            Well, based on your username, thanks for WebR! It took an hour or two to integrate with our DuckDB-Wasm prototype and just worked(TM). Really fantastic.
  • stateofinquiry 5 hours ago
    Impressive how nice this looks, and I am also impressed by how quickly it runs. I don't know who did this (could not find any "about" info), but kudos on a job well done.

    However: Aside from the above, and doing it "because one can", I don't understand why anyone would spend the effort to make this. R is FOSS software, if you can run a web browser, you can run R itself. R is not hard to install or maintain. Running in a web browser requires network, and resources on someone else's machine.

    So, I am a strange combination of impressed with this site and confounded trying to figure out why it exists. I'm probably missing something.

    • fn-mote 5 hours ago
      Use case: teaching classes.

      On HN, it seems trivial to install software, but for most people it is not.

      Also, tablet and Chromebook users.

      • levocardia 2 hours ago
        Yes, the first 15-20 min of every programming presentation I ever went to was "getting it set up on your computer." Very wasteful!
    • apwheele 2 hours ago
      When you want to run stuff client side instead of your server is one question to determine.

      For R specifically, it is focused on stats/graphing. So if you wanted an app where someone could upload data and fit a complicated regression model, this would be a good use case. (There are probably javascript libraries for regression, but if willing to live with the bit of start up lag, worth it for anything mildly complicated -- factors in R for example would not like to worry about writing my own code in javascript to make the design matrix.)

      In the case where you run the server, the data has to travel to your server, your computer estimates the model, and it sends it back. WASM apps this all happens client side.

      It is a good use case for dynamic graphs/dashboards as well. If the data is small enough to entirely fit in memory, can basically have a local interactive session with the data and everything will be quite snappy (do not need to continually go back and forth with your server to query data).

    • kevmo314 4 hours ago
      > Running in a web browser requires network, and resources on someone else's machine.

      The site is running completely locally. You can disable your network in devtools and it will continue to work.

    • ekianjo 4 hours ago
      > I don't know who did this

      I believe it's George Stagg https://github.com/georgestagg

  • kasperset 4 hours ago
    I use R a lot but I still prefer Javascript libraries for interactivity. Javascript libraries feels lot more smoother than something like webR. Having said that, it is impressive that R is able to transcend in the interactivity with just internet browser.
  • dash2 8 hours ago
    Impressively, this managed to download the large nycflights13 library very quickly, and run a regression on its multimillion-row data in just a second or two.
    • em500 7 hours ago
      That entire library/dataset is less than 5Mb compressed, which is barely larger than the size of modern commercial websites. An entire bible in uncompressed plaintext is only about 4Mb (compressed about 1Mb). Computers can really handle tons of data really fast; we've just become too accustomed to inefficiencies everywhere.
      • patmorgan23 5 hours ago
        Yeah modern computers are stupid fast. Like 1000x faster than stuff in the 90s, but we squander all that computing power on poorly built software.
  • droelf 3 hours ago
    Cool! Emscripten-forge also recently got a R distribution that runs natively on the browser: https://blog.jupyter.org/r-in-the-browser-announcing-our-web...
  • tkschmidtme 3 hours ago
    WebR is awesome and I’m trying to use it more and more instead of in operating fixed figures (https://tkschmidt.me/posts/dagstuhl-problem/). I would really recommend to stay with a fixed webR version (and use a CI/CD) process to check if newer versions are still compatible with your scripts.
  • juujian 8 hours ago
    Would be interesting to see if we can run shiny entirely client side with this.
  • gavmor 5 hours ago
    Can R be meaningfully run against datasets small enough to fit in the browser?
    • harvey9 3 hours ago
      Yes. There are domains where the data is not web-scale.
  • motohagiography 4 hours ago
    there should be another "browser" with better observability features. wasm is turning browsers into a hypervisor for virtual machines that run containers for a variety of languages now, including R.

    great that these products are finding a way, but there seems to be an opportunity to do this right.