List of different packages, related to asynchronous I/O and
Authorization and Authentication are a big deal for web development. Take OAuth, the most widely used protocol of authentication between services on the web. Such a simple idea, but with so many varying implementations (twitter, facebook, whatever...) and tricky parts in the details – it's almost impossible to get right without a library. Luckily, these crates will help you address authentication problems. For hashing and algorithm crates, see: Cryptography
Binary protocol support
The Webbrowser is the bastion, the holy grail of web development and one of the biggest projects in the Rust ecosystem focusses exactly on that. If Rust achieves to run a browser engine, be used to write server code while also being used as the frontend-development language within the browser, then it will truly be the language of the web like no other.
Managing digital content is a fundamental part of the web as we have it today. Content management systems aim to make it easier to create, update, and serve digital content. Currently, the Rust CMS ecosytem consists only of static site generators, which serve as frameworks for creating websites from static content files.
One of the first things almost anyone does to improve performance (specifically bandwidth) is to turn on compression. Luckily compression is well supported in rust.
Cryptography is a corner stone of a trusted web. Without it many services could not be offered reliably. Rust has strong cryptography libraries. Many of these are managed by Rust Crypto, an organization that maintains cryptography algorithms written in pure Rust.
Proper Database support is crucial for modern web development. This page gives an overview of the various drivers, ORMs, integrations and tools.
How is Rust deployment onto existing server infrastructures? Well, stuff is looking quite good actually.
What would the web be without Email? It is one of the mose widely used communication, authentication, and notification systems. There are rust crates providing smtp and imap clients, as well integrations with third party email delivery services.
Encoding is one of those things you don't really want to bother about, but just rely on a well tested library for – there are just too many edge and quirky cases. Luckily, as a system language, this is one of the things rust shines at – and offers a set of nice packages for all data formats.
When building a modern web-application you don't want to bother on how to parse the http-header or where the route is supposed to be dispatched to. Frameworks offer exactly those features and make it quick'n'easy to build your specific app on the web-stack. Rust has many backend server frameworks, as well as frontend frameworks for building client apps with webassembly.
Without a proper HTTP Client there isn't much web - even for the backend, scraping or API-Services on the web HTTP is the protocol of choice. Thus a stable, strong HTTP-Client stack is very important to any web-ecosystem.
Internationalization is still a work in progress. There is no standard mature implementation of i18n in Rust, although there are many newer libraries aiming to fill this gap.
Logging is part of the rust ecosystem for a long time and with log and env_logger you have some great defaults.
A strong lower web-stack is important not only to build strong web frameworks on top, but also to allow performance critical systems to reach deeper to squeeze out extra juice. Rust has a good support on HTTP servers, even an HTTP2 implementation, websockets and other protocols.
Rust can be used to write fast and safe native Node.js modules through bindings to the V8 engine!
Serializers allow you to easily transfer states and reliably get it back – important not only when working with JSON but also backbone of many types of worker-queue systems. Many of these crates are built on top of Serde, the awesome serialization framework for Rust.
The modern web development stack doesn't only need a web-server but is often built on a range of external services to provide specific features, from worker queues to search and pubsub. There are many mature crates for popular external services. For services accessed through a Web API, such as Cloud SDKs, see: External Web APIs and for database support, see: Databases
Syndication has often been announced dead just to still stick around. Parsing and generating good RSS feeds isn't especially hard, but also something you don't necessarily want to have to do yourself. There are some libraries and packages to help you with that.
No Web-App is complete if it doesn't spit out HTML at least some of the time. Managing that, and making sure it renders performant and can be maintained is what templating libraries focus on. Rust has many traditional templating languages, as well as macro-based libraries that enforce type safety! Some of these are listed below.
Rust and Cargo have a very good system for testing. However, there are still many useful utility crates that make testing easier. Some of them are listed below:
This collects a range of packages which are commonly used and needed in web development, like URL or HTTP-Body-parsers.
While the main showcase of WebAssembly initially was the web browser, there is new exciting work on using it outside too. Here is a list of WebAssembly runtimes that are compatible with Rust.
With many Web-Apps we want to reach farther than our locally hosted services and reach APIs hosted by other platforms and services outside our network. Connecting to the outside world is important, too many modern web applications are useless without an external party they connect to and interact with. There are many client libraries for most of the popular web APIs. Some of them are listed below: