Bix 1.0.0-beta-004

This is a prerelease version of Bix.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Bix --version 1.0.0-beta-004                
NuGet\Install-Package Bix -Version 1.0.0-beta-004                
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="Bix" Version="1.0.0-beta-004" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Bix --version 1.0.0-beta-004                
#r "nuget: Bix, 1.0.0-beta-004"                
#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 Bix as a Cake Addin
#addin nuget:?package=Bix&version=1.0.0-beta-004&prerelease

// Install Bix as a Cake Tool
#tool nuget:?package=Bix&version=1.0.0-beta-004&prerelease                

Bix

the "Bix" name is just a codename for now (until I decide it's good to go).

Templates

dotnet new --install Bix.Templates::*

  • dotnet new bix.bun -o BunProject
  • dotnet new bix.cloudflare -o CloudFlareWorker
  • dotnet new bix.deno -o DenoProject

An F# microframework that provides a router and http handler abstractions for web frameworks that work with a Request -> Response http server model.

Examples of runtimes that work with this model:

This microframework is heavily inspired by Giraffe, and Saturn frameworks from F# land so if you have ever used that server model then Bix will feel fairly similar.

An hypotetical example could be like the following code:

// define a function that takes HttpHandlers to satisfy existing handler constrains
let authenticateOrRedirect (authenticatedRoute: HttpHandler, notAuthenticatedRoute: HttpHandler) =
    Handlers.authenticateUser
        authenticatedRoute
        notAuthenticatedRoute

// compose different handlers for code reusability
// and granular control of handler execution
let checkAdminCredentials successRoute =
    authenticateOrRedirect (successRoute, Admin.Login)
    >=> Handlers.requiresAdmin

let checkUserCredentials successRoute =
    authenticateOrRedirect (successRoute, Views.Login)
    >=> Handlers.requiresUserOrAbove

// define routes for this application
let routes =
    // check the Cloud flare Worker sample/tempalte to see other router options
    // basic, giraffe, and saturn like
    Router.Empty
    |> Router.get("/", authenticateOrRedirect >=> Views.Landing)
    |> Router.get ("/login", authenticateOrRedirect >=> Views.Login)
    |> Router.get ("/me", checkUserCredentials(Views.Login))
    |> Router.get ("/portal", checkUserCredentials(Views.Portal))
    |> Router.get ("/admin", checkAdminCredentials(Admin.Portal))
    |> Router.post ("/users", checkAdminCredentials(Api.Users.Create >=> negotiateContent))
    |> Router.patch ("/users/:id", checkAdminCredentials(Api.Users.Update >=> negotiateContent))

// Start the web server
Server.Empty
|> Server.withPort 5000
|> Server.withDevelopment true
|> Server.withRouter routes
|> Server.run

The idea is to create simple and single purposed functions that work like middleware so you can organize and re-use

Adapters

Bix currently has two adapters

  • Bix.Deno
  • Bix.Bun

Adapters under investigation:

  • Bix.ServiceWorker
  • Bix.CloudflareWorker

Development

This project is developed with VSCode in Linux/Windows/WSL but either rider, and visual studio should work just fine.

Requirements

Try the samples

Depending on what you want to try change the directory to your selected sample, example: cd samples/Bix.Bun.Sample and run one of the following commands

  1. dotnet tool restore (run once per clone)
  2. start the project
    • bun start
    • deno task start

both commands will restore the projects and run fable, bun/deno in watch mode.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Bix:

Package Downloads
Bix.Bun

Package Description

Bix.Deno

Package Description

Bix.Cloudflare

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0-beta-006 85 5/22/2024
1.0.0-beta-004 118 7/10/2023
1.0.0-beta-003 127 7/22/2022
1.0.0-beta-002 129 7/18/2022
1.0.0-beta-001 149 7/17/2022