Skip to content

Releases: SuaveIO/suave

Bugfix release

16 Nov 19:25
@haf haf
Compare
Choose a tag to compare
Bugfix release Pre-release
Pre-release
v2.0.0-rc2

update project.json version

v2.0.0-rc1 - the first release candidate

04 Nov 15:37
@haf haf
Compare
Choose a tag to compare

Suave v2.0-rc1

This is a pre-release. Besides improvements to the code-base and a slightly larger surface area, there are also bugfixes, better logging, better owin support, better libuv handling, etc.

There will be more release candidates. Primary focus points for v2.0 are:

  • .Net Core preview3 support, and moving towards that as the recommended default
  • HttpClient will potentially be replaced for Http.fs: Zipkin support out of the box, together with Http.fs to bring distributed tracing to everyone!
  • Better and more colourful logging
  • Removal of deprecated functions
  • Suave.Testing has gone from Fuchu to Expecto as the testing and asserting library. There may be a much better testing story coming before v2.0 is released – if it comes, we'll be aiming to auto-generate the API structure/docs. (Note that only Testing can come to depend on Http.fs)

Non functional changes:

  • Bump required .Net to 4.6.1 – supported by both Mono and Windows .Net
  • Bump .Net Core to netstandard1.6 for now
  • Bump required F# Core to v4.x

We're moving towards recommending Kubernetes as the default way of deploying Suave apps in the cloud since we expect that platform to win the greatest mind-share (if it hasn't already...). And of course you should have a place to put your feature flags and security tokens which supports updating your site without recompilation.

Note: this is only a recommendation; of course you can deploy Suave in any way you want 👍

When it all comes around, the aim of Suave is to give you a smooth developer experience that lends itself to creating software with good operability. This includes having excellent logging and metrics too.

The most contentious area for us right now are the docs. We'd like someone to help us to do an overhaul on them and help us bring them both up-to-date with what Suave supports and to structure them in a way that facilitates reading them like a book - from the start to the end. They're all Markdown, in /docs.

We've created a new docs issue to track the updating of the docs – if we distribute the writing across many people, we'll get done a lot quicker! Just ping us in the issue and state what bullet point you'll take care of.

We're both looking forward to hearing your input before we cut the major release!
/Henrik & Ademar

Upgrade notes

  • Writers.createMimeType ->Writers.mkMimeType
  • XXX.mk -> XXX.create

v2.0.0-alpha7

22 Oct 07:49
@haf haf
Compare
Choose a tag to compare

Some highlights since the v2-alpha4:

  • Coloured console output by default using Logary's facade
  • Owin cookie bugfixes
  • Owin send content-lenght: 0 for empty responses
  • Adding HTTP Status Codes, 306 and 426
  • Remove divAttr function family from experimental
  • Fix docs for startWebServerAsync
  • Decode multipart data based on charset
  • adding hasFlag (temporary implementation, see #502 )

HTTP 2.0 is progressing. We're aiming to release Suave 2.0 with HTTP2 support and full integration with Logary: Zipkin and Metrics support out of the box. Another idea gaining slowly traction is a separation of the combinators from the server. There will also be more performance optimisation done, either for 2.0 or for a minor release thereafter.

We're very grateful for the community around Suave. Keep the PRs flowing, talks coming and books being written! And don't hesitate to ask in the gitter chat or in an issue if you have any questions or are wondering something.

Have fun!
Henrik & Ademar

v1.1.3 – Websocket bugfix release

20 Jun 15:30
Compare
Choose a tag to compare

Websocket support for multiple readers and writers.

v1.1.2 – setHeaderValue

29 Mar 06:58
@haf haf
Compare
Choose a tag to compare

In Suave 1.1.2 we've added a function for setting individual header values, imaginatively named setHeaderValue.

It's for example useful when you compose Suave WebParts together, when each web part may have different policies as to how caching should be done.

E.g. if you have basic authentication, or are using Logibit Hawk, then you want the authorise web part to add a Vary header with values Authorization,Cookie even if the vary header already contains Accept-Language (like it should, or you'll run into trouble with your downstream proxies). Your own code should/may also add a Cache-Control and Vary header on top of that, to indicate to downstream proxies and the end-client how cacheable the resource is.

You can still override the header with setHeader, though.

This is a backwards-compatible patch release.

v1.1.1

06 Feb 22:54
Compare
Choose a tag to compare

OWIN fix #385

v1.1.0

25 Jan 21:22
Compare
Choose a tag to compare

Minor release to address the buffer manager underflow issue #379

Suave v1.0.0

03 Jan 22:07
@haf haf
Compare
Choose a tag to compare

Suave has been in development since 2012. It's been a long and winding road that has involved thousands of people; and after a lot of engineering effort, we've arrived at v1.0.

During the last couple of weeks we both have been talking with the good people behind Community for F#, WebSharper and Freya. We've all decided to work together to create a more coherent F#-web story together. More info is available at http://c4fsharp.net/ (which now runs on Suave)!

Where has Suave been used?

Atom & Visual Studio Code

Sometimes Suave has been used in ways we did not expect; for example, the F# compiler services now has a REST-API, built with Suave, written by Krzysztof which powers the cross-platform code-completion engine for use in Atom and Visual Studio Code.

Microsoft Involvement

Suave was the first F# program Microsoft made work on CoreCLR:

Happy that the first F# thing Microsoft run on CoreCLR on Linux is an open source community-authored web framework VisualFSharp/staus

https://twitter.com/dsyme/status/664578666236665861

F# TV

That (me) Henrik has joined F# TV: Brice and Mark, helps Suave move forward by providing a modest income to help document, review, improve and record content about Suave.

Help Suave by learning F# or by recommending the courses to your friends and family who want to understand what you're on about, talking about this smooth web server all the time!

And many many more

Ping us on twitter to add your example to this list!

Testimonials

When I started Community for F# in 2010, I had dreamed of building the site using only F#. As a member of the OWIN project, I've long recognized that the existing web stacks for .NET typically emphasize a lot of unnecessary boilerplate and poor abstractions. WebSharper, Freya, and other projects provide better abstractions for building web APIs and browser applications, but I was still tied to ASP.NET and IIS for hosting. Suave finally completes the puzzle and brings a beautifully simple and fast web server to F# and .NET and includes excellent tools for routing, serving web APIs, and even support for OWIN applications and middleware! I'm proud the new http://c4fsharp.net/ will be powered entirely by F#, but I'm thrilled that the F# web stack of Suave, WebSharper, and others provides a simpler, superior web stack. Building the new http://c4fsharp.net/ has been a true delight because of these tools.

Ryan Riley

New TLS provider.

We have coded a new TLS provider DefaultTlsProvider using only BCL code which makes possible now to have HTTPS bindings without the OpenSSL dependency.

Upgrading to v1.0 from previous versions

As a part of v1.0 we've decided to give the API an overhaul to make it even easier to use, discover and understand. In particular we've moved almost everything from Suave.Http into Suave, and replaced >>= for >=>, also called the fish operator.

To get help with the migration, at the beginning of all open statements, add open Suave.Classic and you'll get help from the F# compiler while upgrading:

screen shot 2015-12-20 at 17 15 29

Afterwards:

screen shot 2015-12-20 at 17 18 02

Here's the full commit you can use to guide your upgrade.

Below you can find a trouble-shooting list, that we've composed from upgrading our own projects, and a list of known changes to look out for.

  • Replaced >>= with >=>
  • You now need to open Suave.Operators to get access to the above "fish" operator
  • WebPart is now in scope by opening the Suave namespace
  • Suave.Types is no more. The HTTP types have been moved to Suave.Http
  • Suave.Http.Applicatives -> Suave.Filters
  • Suave.Http.* -> Suave.*
  • HTTP code 451, Unavailable For Legal Reasons has been added to highlight the problem of internet censorship throughout the world

Troubleshooting

We'll expand this list when we get questions in the issue tracker, stackoverflow or on twitter.com/suaveio.

GET, POST, etc. filters are "is not a function and cannot be applied":

You've explicitly opened Suave.Http below Suave.Filters. You can probably just remove open Suave.Http from your code.

FAKE is using the @@ operator from Suave.Operators and they're clashing!

If you use suave in a FAKE script then you might encounter a operator name clash. The @@ operator is used in FAKE and suave and therefor you need to solve the conflict. The recommend way is to use </> from FAKE instead of @@. If this doesn't work for you, then make sure that you open the FAKE namespace as the last open statement. This will ensure that your script keeps using the @@ operator that was defined in FAKE.

v0.33.0 – LibUV debut!

08 Nov 19:14
@haf haf
Compare
Choose a tag to compare

v0.33.0

LibUV logo

In this release LibUV is ready for prime-time! Follow the guide on how to use it.

Further, we've documented multipartFields, added fieldData to extract multipart-form data fields.

Using LibUV will give you an approximate 72% performance increase.

Happy coding!
Henrik & Ademar

v0.33.0-libuv.2

04 Nov 21:49
Compare
Choose a tag to compare
v0.33.0-libuv.2 Pre-release
Pre-release
v0.33-libuv.2