Frank 6.3.0
dotnet add package Frank --version 6.3.0
NuGet\Install-Package Frank -Version 6.3.0
<PackageReference Include="Frank" Version="6.3.0" />
paket add Frank --version 6.3.0
#r "nuget: Frank, 6.3.0"
// 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
Nuget
Stable | Prerelease |
---|---|
Building
Make sure the following requirements are installed in your system:
- dotnet SDK 2.2 or higher
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.
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
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
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
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
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 | Versions 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. |
-
net8.0
- FSharp.Core (>= 9.0.201)
-
net9.0
- FSharp.Core (>= 9.0.201)
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.