As described in Next steps for the Swift Server work group, we are marching on with this effort. Going forward, the work group will focus on creating a robust, healthy ecosystem, where developers can easily find high quality libraries and tools that enable them to effectively build and run server applications built with Swift.
As described on Swift.org - Swift on Server the goal of the work group is to eventually recommend libraries and tools for server application development with Swift. The difference between this work group and the Swift Evolution process is that server-oriented libraries and tools that are produced as a result of work group efforts will exist outside of the Swift language project itself, and will be distributed across different code bases.
The teams at Apple, IBM and Vapor have engineers that will actively participate in the development of such libraries and tools, and we would love to see the community joining in this effort. To that end, the work group will define and launch an incubation process where anyone can pitch, propose, develop and contribute to such libraries and tools. The workgroup will then help nurture and mature them ensuring standardization, quality and longevity. The exact details of the incubation process are yet to be defined, so stay tuned for a follow up announcement on that.
To bootstrap the process, the work group came up with the following focus areas which we feel can make a real and immediate impact on the ecosystem. The list reflects what we previously heard from the community as well as our own personal experience writing server applications with Swift, and is designed to solve tangible needs that do not require new features from the language or core libraries.
Our goal in publishing this list is to collect feedback, and then work with the community to make pitches and proposals to the @server-workgroup around each one of these libraries and tools, then make progress on them individually. We encourage everyone to review and provide feedback on the content of this list, as well as where they think they can contribute.
Database Drivers and Storage Clients
As many as possible, some critical items include:
- postgres
- mysql
- redis
- foundationdb
- cassandra
- mongodb
- zookeeper
- kafka
Tooling and Production Readiness
Official docker support
Official build and runtime docker images. This effort was launched and tracked in https://forums.swift.org/c/development/docker.
Logging
Abstract logging API that allows the concrete logger to be pluggable at compile or run time.
Metrics
Abstract metrics API that allows the concrete metrics collector to be pluggable at compile or run time.
Distributed Tracing
Abstract tracing API that allows the concrete tracing collector to be pluggable at compile or run time.
Crash Handling and Debugging
- Better debuggability of crashes, for example: capture stack traces and ship them through the logging API before process exits.
- Recommending best practices and tools for minimizing the impact of exceptions.
Distributed Systems, Microservices and Event Driven Architecture
Http Client
Feature complete Http client that works on Linux without dependency on curl.
File System Library
Non-blocking file system abstraction.
Logging
See above
Metrics
See above
Distributed Tracing
See above
Auth and Crypto
JWT, JOSE, macaroons and others. Requires a basic common crypto library.