March 14, 2024
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:
Now, your Git email and name are dynamically set based on the commit author chosen in your Git Pane settings:
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:
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.
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.
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.
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:
System Dependencies search
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.
Developer experience
replit-py
Version 3.6.0 has been released (changelog), with two major callouts:
replit.db
now dynamically connects (instead of onimport replit
), which solves issues with the process not exiting cleanly due to an open connection. Callreplit.db.close()
when shutting down your app to terminate cleanly.flask >= 2.0.0
instead offlask ^2.0.0
, so 3.x releases of Flask can be used with thereplit
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: