Skip to main content

March 14, 2024

· 5 min read
Ornella Altunyan
Developer Advocate

Welcome to the Replit Changelog.

Last month, we released many new features and improvements designed to boost your productivity, collaboration, and coding experience on Replit. Some of the key highlights include:

  • Git improvements - Multiplayer Git in the Shell, consistent commit usernames, and more.
  • AI in the Shell - Generate commands and explain unfamiliar code in the Shell with Replit AI.
  • Port management updates - More options for port configuration and networking.

Explorers: If you want to try new features as soon as they are available, turn on the Explorer role in your Account Settings.

Workspace

Git improvements

Multiplayer Git in the Shell

A year ago, we shipped Git support in the Shell, and now we’re back with an upgrade: Git in the Shell is now compatible with Multiplayer. We now track who initiated a Git action (whether from the Git Pane, Console, or Shell) and ask the correct session for their GitHub credentials. We’ve also fixed Multiplayer issues with xdg-open and how Git commands in the Shell can open the Workspace editor for commit messages and rebasing.

Consistent commit usernames

Usernames for Git commits are now consistent. Before, Replit would use your GitHub or Replit username. Now, we use your GitHub or Replit public name (if present) and fall back to the username. The change is more consistent with how GitHub shows commits in its web interface and also matches our understanding of what people prefer to show up in Git log history.

For example, before, Replit would use your username in commits like:

ryantm <email@example.com>

And now it uses your public name like:

Ryan Mulligan <email@example.com>

Username and email config in the Shell

If you connect your GitHub account to Replit from the Account page, you won't see this error message again:

Unable to auto-detect email error

Now, your Git email and name are dynamically set based on the commit author chosen in your Git Pane settings:

Commit author correctly set

Setting the default branch

Previously, if you ran git init in a Repl, you’d be greeted with a large hint message. We’ve set the default branch to main to have a shorter default name and avoid this message.

The final flow

With all these fixes together, if you’ve connected your GitHub account to Replit, you can now initialize and make a commit seamlessly, without any warning messages:

Using Git seamlessly

Ports

Because Replit runs in the browser, there’s a specific method required to allow processes you’re running to be accessible in the Webview or via an external request. We’ve updated our documentation to explain how ports work in Replit, and to detail some new features related to port management.

In the Webview, you can change which external port is rendered by selecting the domain and choosing a different port.

Changing ports in Webview

Use the Networking tool to view the status of ports open in your Repl and what external port they’re bound to, and to add or remove configurations.

Networking tool

AI Generation in the Shell

We’ve added inline command generation in the Shell pane. Hit Cmd/Ctrl+I or select the Generate button on the right side of the prompt to open the text input and ask Replit AI to create the command for you. This feature can help you navigate the Shell if you’re unfamiliar.

Generate shell commands

If you ever get a result you don’t understand, select the result and ask Replit AI about it from the right-click context menu:

Explain shell contents

The System Dependencies pane now has search functionality. Search for the package you’d like to use in the search bar at the top of the System Dependencies pane. From there, select the Install button to automatically add the package to your replit.nix file. The package versions listed are even accurate to the Nix channel you’ve set in your .replit file.

System dependencies search

Developer experience

replit-py

Version 3.6.0 has been released (changelog), with two major callouts:

  • replit.db now dynamically connects (instead of on import replit), which solves issues with the process not exiting cleanly due to an open connection. Call replit.db.close() when shutting down your app to terminate cleanly.
  • flask >= 2.0.0 instead of flask ^2.0.0, so 3.x releases of Flask can be used with the replit library.

Replit RTLD loader

Some Replit users have experienced issues with programs crashing with errors like these:

symbol lookup error: /nix/store/dg8mpqqykmw9c7l0bgzzb5znkymlbfjw-glibc-2.37-8/lib/libc.so.6: undefined symbol: _dl_audit_symbind_alt, version GLIBC_PRIVATE

/nix/store/dg8mpqqykmw9c7l0bgzzb5znkymlbfjw-glibc-2.37-8/lib/libm.so.6: version `GLIBC_2.38' not found (required by /nix/store/8w6mm5q1n7i7cs1933im5vkbgvjlglfn-python3-3.10.13/lib/libpython3.10.so.1.0)

This happened due to a compatibility problem between different versions of glibc (GNU standard C library) caused by using libraries and programs from different Nix channels within the Replit environment. Previously, setting the LD_LIBRARY_PATH environment variable was used to direct the system's library loader to find shared libraries in specified locations. However, this method proved problematic when libraries depended on different versions of glibc, leading to crashes due to version mismatches.

To mitigate this, we introduced the Replit RTLD loader, which utilizes a new environment variable, REPLIT_LD_LIBRARY_PATH. This loader searches for required libraries only after a program's own run path fails to locate them, providing a more refined approach than the broad application of LD_LIBRARY_PATH. This change, plus delivering our software on the latest Nix channel, will help us eliminate those glibc version mismatch problems, so you’ll experience fewer disruptions and more stability while running your applications.

Infrastructure

More reliable connections to your Repls

We’ve deployed a new reverse WebSocket proxy service that ensures more reliable connections between you and your Repls. This service minimizes spurious offline Repl instances and refreshes. Internally, it helps Replit developers easily diagnose unexpected connection disruptions.

Documentation

The following docs have been updated for clarity, with updated screenshots, and to accompany newly released features: