Frank 6.3.0

dotnet add package Frank --version 6.3.0                
NuGet\Install-Package Frank -Version 6.3.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Frank" Version="6.3.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Frank --version 6.3.0                
#r "nuget: Frank, 6.3.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Frank as a Cake Addin
#addin nuget:?package=Frank&version=6.3.0

// Install Frank as a Cake Tool
#tool nuget:?package=Frank&version=6.3.0                

Frank

F# computation expressions, or builders, for configuring the Microsoft.AspNetCore.Hosting.IWebHostBuilder and defining routes for HTTP resources using Microsoft.AspNetCore.Routing.

This project was inspired by @filipw's Building Microservices with ASP.NET Core (without MVC).


Builds

Build status

Build History

Nuget

Stable Prerelease
NuGet Badge NuGet Badge

Building

Make sure the following requirements are installed in your system:

dotnet build

Performance

Benchmarks should never be taken at face value. The following are taken from the web-frameworks application, which simply returns an "" with a 200 OK response. These benchmarks compare Frank, Falco, Giraffe, Suave, and WebSharper under a load of 2000 and 10000 concurrent requests for a duration of 10 seconds using bombardier. Frank, Falco, and Giraffe are all pretty well aligned, with each edging out the others in different runs. WebSharper is quite close behind and had surprising bursts of Max values on each run.

Test machine stats

Frank

C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 2000
Bombarding http://127.0.0.1:5000 for 10s using 2000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     74771.81   16274.70  213042.61
  Latency       27.06ms    14.99ms      1.17s
  HTTP codes:
    1xx - 0, 2xx - 735729, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    11.76MB/s
C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 10000
Bombarding http://127.0.0.1:5000 for 10s using 10000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     66859.74   21516.50  135402.71
  Latency      154.69ms    70.68ms      2.31s
  HTTP codes:
    1xx - 0, 2xx - 636305, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    10.06MB/s

Falco

C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 2000
Bombarding http://127.0.0.1:5000 for 10s using 2000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     68816.05   19014.03  260693.85
  Latency       29.49ms    16.89ms      1.14s
  HTTP codes:
    1xx - 0, 2xx - 675620, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    13.43MB/s
C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 10000
Bombarding http://127.0.0.1:5000 for 10s using 10000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     61873.98   18588.41  144228.63
  Latency      167.55ms    80.43ms      2.63s
  HTTP codes:
    1xx - 0, 2xx - 585628, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    11.50MB/s

Giraffe

C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 2000
Bombarding http://127.0.0.1:5000 for 10s using 2000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     70654.17   20454.63  161930.16
  Latency       28.69ms    27.63ms      1.68s
  HTTP codes:
    1xx - 0, 2xx - 695363, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    12.89MB/s
C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 10000
Bombarding http://127.0.0.1:5000 for 10s using 10000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     64535.14   19824.63  191980.80
  Latency      159.96ms    92.95ms      2.67s
  HTTP codes:
    1xx - 0, 2xx - 615054, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    11.29MB/s

Suave

C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:3000 -c 2000
Bombarding http://127.0.0.1:3000 for 10s using 2000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     47804.68   33925.73  251817.76
  Latency       42.40ms    47.92ms      2.30s
  HTTP codes:
    1xx - 0, 2xx - 475110, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     8.77MB/s
C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:3000 -c 10000
Bombarding http://127.0.0.1:3000 for 10s using 10000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     38277.80   39849.83  225515.79
  Latency      244.58ms   223.99ms      4.42s
  HTTP codes:
    1xx - 0, 2xx - 396062, 3xx - 0, 4xx - 0, 5xx - 0
    others - 8568
  Errors:
    dial tcp 127.0.0.1:3000: connectex: No connection could be made because the target machine actively refused it. - 8568
  Throughput:     6.88MB/s

WebSharper

C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 2000
Bombarding http://127.0.0.1:5000 for 10s using 2000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     58768.49   41779.96  254730.90
  Latency       37.97ms    12.10ms   642.00ms
  HTTP codes:
    1xx - 0, 2xx - 525470, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:    10.08MB/s
C:\Users\ryanr\Code> .\bombardier-windows-amd64.exe http://127.0.0.1:5000 -c 10000
Bombarding http://127.0.0.1:5000 for 10s using 10000 connection(s)
[===========================================================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec     53442.13   50090.03  290941.81
  Latency      224.47ms   129.43ms      3.25s
  HTTP codes:
    1xx - 0, 2xx - 438677, 3xx - 0, 4xx - 0, 5xx - 0
    others - 0
  Throughput:     8.33MB/s
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
6.3.0 59 3/15/2025
6.2.0 5,067 11/18/2020
6.1.0 1,702 6/11/2020
6.0.0 714 6/2/2020
5.0.5 903 1/7/2019
5.0.4 843 1/6/2019
5.0.3 872 1/5/2019
5.0.2 895 1/5/2019
5.0.1 859 1/5/2019
5.0.0 855 1/5/2019
4.0.0 1,397 3/28/2018
4.0.0-b037 893 8/17/2017
4.0.0-b036 915 8/17/2017
4.0.0-b035 953 11/10/2016
4.0.0-b034 981 11/9/2016
3.1.1 2,257 12/7/2014
3.1.0 1,402 10/13/2014
3.0.19 1,342 10/13/2014
3.0.18 1,337 10/12/2014
3.0.0.9 1,409 5/25/2014
3.0.0.8 1,384 5/25/2014
2.0.2 1,440 1/26/2014
2.0.0 1,488 1/7/2014
1.1.1 1,413 1/1/2014
1.1.0 1,380 1/1/2014
1.0.2 1,450 12/10/2013
1.0.1 1,392 12/10/2013
1.0.0 1,385 12/10/2013
0.9.130703 1,699 7/3/2013
0.9.130702 1,624 7/1/2013
0.8.56 1,550 6/26/2013
0.8.27 1,555 6/25/2013
0.8.26 1,755 8/8/2012
0.8.25 1,504 7/26/2012
0.8.23 1,557 6/4/2012
0.7.120524 1,498 5/24/2012
0.7.120523.1 1,494 5/23/2012
0.6.120122 1,669 2/20/2012
0.6.111226 1,685 12/26/2011
0.5.111206 1,667 12/7/2011
0.5.111127 1,673 11/27/2011
0.3.0 2,176 6/6/2011

### New in 6.3.0 (Released 2025-03-14)
- Updated to target net8.0 and net9.0
- Updated examples
### New in 6.2.0 (Released 2020-11-18)
- Updated samples
### New in 6.1.0 (Released 2020-06-11)
- Encapsulate `IHostBuilder` and expose option to use web builder defaults with `useDefaults`.
- Server application can now be simply a standard console application. See [samples](https://github.com/frank-fs/frank/tree/master/sample).
### New in 6.0.0 (Released 2020-06-02)
- Update to .NET Core 3.1
- Use Endpoint Routing
- Pave the way for built-in generation of Open API spec
### New in 5.0.0 (Released 2019-01-05)
- Starting over based on ASP.NET Core Routing and Hosting
- New MIT license
- Computation expression for configuring IWebHostBuilder
- Computation expression for specifying HTTP resources
- Sample using simple ASP.NET Core web application
- Sample using standard Giraffe template web application
### New in 4.0.0 - (Released 2018/03/27)
- Update to .NETStandard 2.0 and .NET 4.6.1
- Now more easily used with Azure Functions or ASP.NET Core
### New in 3.1.1 - (Released 2014/12/07)
- Use FSharp.Core from NuGet
### New in 3.1.0 - (Released 2014/10/13)
- Remove dependency on F#x
- Signatures remain equivalent, but some type aliases have been removed.
### New in 3.0.19 - (Released 2014/10/13)
- Merge all implementations into one file and add .fsi signature
### New in 3.0.18 - (Released 2014/10/12)
- Use Paket for package management
- FSharp.Core 4.3.1.0
- NOTE: Jumped to 3.0.18 due to bad build script configuration
### New in 3.0.0 - (Released 2014/05/24)
- Updated dependencies to Web API 2.1 and .NET 4.5
### New in 2.0.3 - (Released 2014/02/07)
- Add SourceLink to link to GitHub sources (courtesy Cameron Taggart).
### New in 2.0.2 - (Released 2014/01/26)
- Remove FSharp.Core.3 as a package dependency.
### New in 2.0.0 - (Released 2014/01/07)
- Generate documentation with every release
- Fix a minor bug in routing (leading '/' was not stripped)
- Reference FSharp.Core.3 NuGet package
- Release assembly rather than current source packages:
- FSharp.Net.Http
- FSharp.Web.Http
- Frank
- Adopt the FSharp.ProjectScaffold structure
### New in 1.1.1 - (Released 2014/01/01)
- Correct spacing and specify additional types in HttpContent extensions.
### New in 1.1.0 - (Released 2014/01/01)
- Remove descriptor-based implementation.
### New in 1.0.2 - (Released 2013/12/10)
- Restore Frank dependency on FSharp.Web.Http. Otherwise, devs will have to create their own routing mechanisms. A better solution is on its way.
### New in 1.0.1 - (Released 2013/12/10)
- Change Web API dependency to Microsoft.AspNet.WebApi.Core.
### New in 1.0.0 - (Released 2013/12/10)
- First official release.
- Use an Option type for empty content.