Fri, Jan 29, 2021Rails in 30 seconds
Philosophically, Replit and Rails are incredibly aligned. We both exist to remove excessive configuration and complexity that stands in the way of building things. However, for a long time, it bothered me that Replit didn't work well with Rails because we focus on small and lightweight projects. Recently, our infrastructure has gotten much more powerful, and I decided to give Rails another spin. It turns out it's not only possible to do Rails on Replit; it's quite a delightful experience. It takes less than 30 seconds from starting a project to seeing the welcome screen: There is no magic under the hood. You can view the template here. I merely followed the getting started guide on the rails site and had to do only a couple of modifications to make the development website show up in the iframe on Replit (detailed in the readme file). Give it a spin, and let me know what you think!
Wed, Jan 27, 2021Going Global
We had the idea for Replit in Jordan, launched as a startup in New York, and incorporated as a company in San Mateo. The US gave us the infrastructure, the capital, and network to launch our business, and for that we're forever grateful. However, to us, the internet is a new country and we want to make our citizenship official and our commitment real. We're joining our global community of hackers, students, teachers, and entrepreneurs and becoming a global company and service. Starting today: Our first two non-US compute regions are up -- Mumbai, India and London, England -- making us a global service We're hiring worldwide making us a globally distributed company Global routing Previously, Replit has been operating out of a single datacenter in the United States. When you start a repl, or join multiplayer, all of your traffic had to make it to our one datacenter. While that's not a significant issue if you live nearby, for our friends all over the world it means every time you type a letter, you had to cross an ocean at least twice! That means you could see latencies as high as 300ms for each keystroke in the terminal! Now, when you create a repl, it lives in the datacenter closest to you. Instead of everyone having to cross the ocean multiple times, you can feel even closer than your own computer! And if you have friends far away, things will feel better too. Instead of connecting to a datacenter that is far away, you'll connect to the datacenter closest to you, and we'll deliver your bits as quickly as possible, so you don't have to travel the world all on your own.
Fri, Jan 15, 2021Native Graphics Love ❤️
We have reimagined the native graphics experience on Replit. Our community of educators and hackers have given us immense feedback on graphics performance and reliability. Yes, It Runs DOOM! Our engineers have built a native graphics experience that is faster, more reliable, and elegant. Games and other native GUI applications launch quickly and reliably on our platform. Common issues like applications not launching and window resizing have been fixed. Among our most popular use cases is Pygame for beginner game programming and Java Swing for AP CSA students. Engineering behind the scenes Before we take a peek behind the curtain, let's look at a very high-level view ofhow graphics work in practice. Like many Linux systems, Repl.it uses the X Windows System to display graphics. The X Windows System is natively a network-ready system: so there is one process that directly interacts with the hardware (the server), which doesn't need to be the on same machine where the program (the client) is being run. Nowadays, the networking capabilities of X are rarely used, since many optimizations rely on the fact that both the server and client processes run on the same machine and are able to share memory between them cheaply, to avoid having to move around massive amounts of graphics data through a narrow networking pipe. In order to support being able to view and interact with graphical user interfaces remotely other techologies are used, like VNC. And just for completeness' sake, X is not the only solution for graphics in Linux, and Wayland is slowly becoming the alternative of choice for X. Android users will be more familiar with SurfaceFlinger.
Mon, Dec 28, 2020Tabbed Shell
Among the many things that makes Repl.it special is our ability to provide free compute to millions of users. We've built a platform that not only lets you write and run code, but also gives you access to a Linux container through which you can execute arbitrarily complex commands. Despite being such a powerful feature, we haven't done a great job of exposing that capability to its fullest. Today, we're excited to announce that we're rolling out a redesign of the shell as a separate tab next to the console. Although we've already had a shell, this new redesign helps make it a more integral part of the experience in a repl. Here's what it looks like: Now it'll be easier than ever to switch between viewing your program's output in the console and executing bash commands in the shell. This will also greatly benefit beginners that are new to Linux since it will expose them to an easy to use shell that they can play around with in any repl. Note that you can still use the existing keyboard shortcut (Cmd/Ctrl + Shift + S) to open and focus the shell in addition to the new tab UI. If you have any comments or feedback, please let us know on Canny. We'd love to hear it!
Tue, Dec 15, 2020Input/Outputing Testing & Autograding
Today, a highly requested feature has been released: Input/Output testing & autograding. The Input/Output Tests pane is embeded within all new and existing Teams for Education projects. This pane contains tools designed to simplify testing code. Instead of manually entering typing input and checking output for every submission, the autograder allows you to define and automate testing. How do I use it? Input/Output tests is only available for projects created within the Teams for Education product. This feature is available on all projects - new and existing. Click on the icon within the workspace sidebar nav to reveal the Input/Output tests pane.
Wed, Dec 2, 2020We've Been Pwned
As long as I can remember Replit has been receiving a large number of vulnerability reports. We're very grateful for these and take them extremely seriously. However, 99% of them stem from a misunderstanding of what we do. Our main product is RCE (remote code execution) and naturally this leads to a whole lot of RCE vulnerability reports. Fed up with low effort and time consuming vulnerability reports I set up this repl earlier this year. The bounty is simple: read my secret or edit my file and receive a $1000 cash prize. Either would be a critical vulnerability in our infrastructure. Having a clear goal and a prize was a good motivator, and indeed there was a lot of initial interest with many valiant attempts. All was quiet until PDanielY was messing with our developer API (currently in closed alpha). Here is how he tells the story: I was trying to make a repl.run clone and then when I tried to use it run a public repo on my alt, I saw that my main account actually connected to the repl and I could edit files and stuff. This was ultimately due to an oversight in the token minting code used by our developer API. It used a long since deprecated method of generating tokens when accessing repls owned by someone else. Instead of producing a temporary transparent fork you'd get full access to the underlying repl. Yikes! Once PDanielY alerted us we verified it looked suspicious and immediately revoked all developer tokens. Next we looked at the logs to see if anyone other than PDanielY have exploited the bug and luckily, we found none (the alpha developer program has only a few developers).
Mon, Nov 30, 2020How Far We've Come
In early September we set out to simplify and stabilize Replit. "There's no better time to cut back than when you're growing," said Amjad. We've been working on this project in earnest for 10 weeks now. When you're in the thick of improving things all you can see is what remains undone, so it's good to look at how far you've come! Towards the end of September, we had multiple incidents where latency across Replit rose to unacceptable levels (the median request to the site could take 10 seconds). We were embarrassed. We had embarked on a stability sprint and the site felt worse. Increased load on Replit and in particular our legacy Classroom product seemed to have tipped us over a cliff. We added followers to our Postgres database and allowed people to export their classrooms into the much-more-stable Teams for Education, but it wasn't enough. We wanted to stop reacting to growth and put the web app on a solid footing. So we took the time to evenly distribute Postgres connections across all follower databases, cached the most frequently queried objects, and put rate limits in place. Since then latency has looked flat and boring. When you visit a repl, your browser opens a websocket connection to a running container. Despite this being a crucial step (if you can't connect to the container, you can't do much of anything in a repl), we had never measured how often it succeeded. The actual numbers weren't great but also weren't dire: if you tried to connect to the Replit backend in September, you would succeed 97% of the time (1 out of every 33 times you simply wouldn't connect). Now connections succeed 99.5% of the time (you'll only fail to connect 1 out of every 200 times).
Sat, Nov 28, 2020Replit's Community Standards
Welcome to the Replit Community! While you're here, please help us keep this community safe, supportive, and creative by adhering to our Community Values and Standards. Community Values Empower others. Replit is for everyone, and everyone starts somewhere. Be patient and inclusive - things that are simple for you may be hard for others. We have absolute beginners and coding experts on our platform, and we want everyone to feel at home here. Support one other. As part of the Replit Community, we hope you'll share your wins so other members can celebrate you and that you'll return the favor by supporting other users' work. Be kind. There is no place for hate in our community. Respect each other, use appropriate language, and be kind. Be positive, and always be sure to reinforce that coding on Replit is a fun and friendly experience.
Tue, Nov 3, 2020reCAPTCHA and the anonymous experience
When we started Repl.it, we set out to remove all friction from getting started with programming. That also meant getting out of the way and letting you code as quickly as possible. As part of that, and for a long time, you could start coding on Repl.it without a user account. We anticipated that giving free unfettered compute to the universe would be challenging. Still we didn't flinch and made it a point to innovate on sandboxing, security, and anti-abuse tools, and we've been largely successful at that. Today, Repl.it the largest open compute platform on the internet, one where you don't need a credit card or even an account to start executing. We run 150,000 concurrent containers, which is 10x what we used to run last year. We have our fair share of war stories, like when we had to battle dark-web hackers trying to sell DDoS attacks from our site for Bitcoin. Luckily reCAPTCHA from Google was a massive help, protecting against botting made it possible for us to continue to grow and offer our services for free. Sadly, earlier this year, Google surprised us that they're going to be charging for reCAPTCHA. Of course, it makes business sense for them, but for a startup like ours, operating at the scale we operate at, it meant that we have to pay them more than we make in monthly revenue[1]. That leaves us with two choices: leave the site vulnerable to botting and attacks resulting in an immense amount of time spent fighting abuse and risking outages
Sat, Oct 10, 2020Programming Language Jam Results
We're thrilled to announce the PL Jam results. Here are the criteria our judges used: Freshness: How novel are the ideas behind the language? This accounts for the most points since it's the Jam's theme. Value: How practical/useful this language could be? Polish: In its current state, how polished is the language? Technical difficulty: How hard was it to implement? The overall winner will take home a total of $10,000 (prize + grant). We also picked a winner team per category, which will receive $500 each.
Mon, Oct 5, 2020How Fig Shipped an MVP in Two Weeks During YC
My name is Brendan Falk. I am one of the co-founders of Fig (YC S20). Fig adds visual apps and shortcuts to your Terminal. We make it easy for developers to build visual apps that streamline terminal workflows. We then let developers share apps with their team and the community. Our website gives a good demo. After going through various pivots in early 2020, we realised that the Terminal was a huge pain point for us. We wondered if we could build a tool that would make our own lives easier. But rather than creating a new terminal, we wanted to attach to our existing Terminal. In late April, we started exploring whether building a tool like Fig was even technically possible. On the 15th of May we decided to go all in on Fig. Roughly two weeks later, we had a simple MVP in users' hands. YCombinator pushes companies to move fast. Repl.it helped us move fast.
Mon, Sep 28, 2020Code Annotations (available now for Teams for Education!)
The future of programming is collaborative. To this end, we've just added a new feature that unlocks a lot of potential for educators: the ability to annotate code. Annotations make it easy for students and teachers to communicate. You can point to particular sections of code, clear doubts about syntax, and question decisions during code reviews. And it's simple to use: just select a piece of code, click the floating annotate button, type in a message, and send. Once you create an annotation, it functions like chat: you instantly see your collaborators reply and can talk about code in real-time, just like how you write it. Remote learning This year, as students learn to code online, they are missing out on 'shoulder-to-shoulder debugging', where they work with their peers or teachers on the same screen to fix the inevitable bugs that beginners face.
Sun, Sep 20, 2020Focusing on a solid foundation
At Repl.it, our mission is to make programming more accessible, more creative, and more fun. A place away from the modern software development grind. It’s an ambitious mission, and it's already resonated with millions of coders who followed their creative energy to build great apps, like repl.email, a free email service built and hosted entirely on Repl.it and available to anyone with a Repl.it account. Repl.it has grown so much in the past few years: To give you an idea of the scale we're operating on, we now serve 120k concurrent containers. That is 120,000 computers started at once We doubled our team every year for the past 4 years: 2^4 = 16, and are still hiring Repl.it went from a simple online REPL to a world-leading collaborative coding environment focused on learning and prototyping However, with growth comes problems:
Sun, Sep 13, 2020A database for every repl
Repl.it is already the best place to build your apps. But there was a missing piece: where do you store your data? We’re introducing Repl.it Database: a fast, free, and easy key-value store that’s built into every repl.[](preview end) All you have to do is import one of our packages for Python, Node.js, or Go, and you can instantly start setting keys in your database. Because Database is built-in, there is no setup, provisioning, or configuration. It's the fastest and easiest way to store data on Repl.it.
Wed, Aug 26, 2020CLUI Command bar and Search
One of the challenges of adding new functionality to any interface is balancing discoverability with visual clutter. We've written before about how a universal command bar can be a great way to expose features without overloading the UI with buttons. This pattern already works well for us in our mobile interface, so now we're bringing it to desktop! Here's a demo of what it looks like: The new command bar replaces our old shortcuts and file switcher modal. Just like before, you can use keyboard shortcuts (Cmd/Ctrl + P to switch files, Cmd/Ctrl + K to bring up all the options, etc) to interact with it. As we add more commands, power users will be able to have a keyboard centric experience while beginners can learn about features by exploring the different options. Among the new features introduced in the updated command bar is Search! Search indexes the contents of every file in your project (with the exception of hidden files such as node_modules and anything in your .gitignore) and allows you to see every instance of a query across every file in your repl. From there, you can scroll through the results, see which line and file they appear in, and select a result to navigate directly to that line in the code like so:

