Skip to content

RandomHashTags/destiny

Repository files navigation

Destiny

Requires at least Swift 5.9 Apache 2.0 License

Destiny is a standalone lightweight web server that makes use of the latest Swift features to push performance to the absolute limits of the Swift Language, and designed to require the minimum amount of dependencies.

It provides a router (which is used via a Swift Macro) that accepts router groups, redirects, middleware and routes for processing requests.

Features like TLS/SSL, Web Sockets and embedded support are coming soon.

Roadmap

Completed

  • Custom hostname and port (Nov 8, 2024)
  • Middleware and Routes (Nov 8, 2024)
  • Register middleware/routes after starting server (Nov 8, 2024)
  • Support multiple data representations (Nov 8, 2024)
  • Routes with parameters (Nov 8, 2024)
  • Configure settings via Command Line Arguments (Dec 11, 2024)
  • Compression (Dec 24, 2024 | see Swift Compression)
  • Hybrid Routes (Dec 24, 2024 | see ConditionalRouteResponderProtocol)
  • Router Groups (Dec 27, 2024)
  • Error Middleware (Dec 29, 2024 | see ErrorResponderProtocol)
  • Commands (Dec 31, 2024)

WIP

  • CORS (Dynamic CORS implemented Dec 9, 2024)
  • Redirects (Static Redirects implemented Dec 11, 2024)
  • DocC Documentation and tutorials
  • Unit testing
  • SIMD processing for better performance
  • File Middleware
  • Rate Limit Middleware

TODO

  • Metric Middleware
  • Cache Middleware
  • Route queries
  • Case insensitive routes
  • Routes with wildcards
  • Response/data streaming
  • Data Validation (form, POST, etc)
  • Authentication
  • TLS/SSL
  • Web Sockets
  • Better handling of clients to unlock more throughput
  • Optimal Memory Layout for stored objects
  • Support custom middleware & routes in default #router
  • Support third-party macro expansions in #router
  • CSS & JavaScript minification (separate repo?)
  • Swift-APNS (separate repo?)
  • Embedded support

Getting started

coming soon...

Command Line Arguments

Command Line Arguments are prefixed using double hyphens. Command Line Argument aliases are prefixed using a single hyphen.

hostname

Assign the hostname of the server.

  • Aliases: h
  • Usage: --hostname <hostname>
port

Assigns the port of the server.

  • Aliases: p
  • Usage: --port <port>
backlog

Assigns the maximum pending connections the server can queue.

  • Aliases: b
  • Usage: --backlog <max pending connections>

Benchmarks

Static

Initial testing of a basic HTML response shows that this library has the lowest server latency and most consistent timings when serving the same content.

Dynamic

Depends on how much dynamic content you add, but initial testing compared to a Static response cost only a few microseconds more (~10-50). I am actively researching and testing improvements.

Conclusion

This library is the clear leader in reliability, performance and efficiency. Static content offer the best performance, while dynamic content still tops the charts.

Contributing

Create a PR.