Axial 0.10.0
Prefix Reserveddotnet add package Axial --version 0.10.0
NuGet\Install-Package Axial -Version 0.10.0
<PackageReference Include="Axial" Version="0.10.0" />
<PackageVersion Include="Axial" Version="0.10.0" />
<PackageReference Include="Axial" />
paket add Axial --version 0.10.0
#r "nuget: Axial, 0.10.0"
#:package Axial@0.10.0
#addin nuget:?package=Axial&version=0.10.0
#tool nuget:?package=Axial&version=0.10.0
Axial
<picture> <source media="(prefers-color-scheme: dark)" srcset="docs/content/img/axial-readme-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/content/img/axial-readme-light.svg"> <img alt="Axial" src="docs/content/img/axial-readme-light.svg" width="160"> </picture>
Write asynchronous F# workflows whose expected failures and required dependencies are visible in their types.
Axial is pre-1.0 and its API may change before the first stable release.
Your first flow
A handler usually needs services and can fail, but a Task signature shows neither fact. Flow<'env, 'error, 'value>
makes both part of the contract.
open Axial
type CheckoutError =
| OrderNotFound of orderId: int
| PaymentDeclined of reason: string
type Receipt = { OrderId: int; Total: decimal; Reference: string }
type CheckoutEnv =
{ FindTotal: int -> ColdTask<Result<decimal, CheckoutError>>
Charge: decimal -> ColdTask<Result<string, CheckoutError>> }
let checkout orderId : Flow<CheckoutEnv, CheckoutError, Receipt> =
flow {
let! findTotal = Flow.envWith _.FindTotal
let! charge = Flow.envWith _.Charge
let! total = findTotal orderId
let! reference = charge total
return { OrderId = orderId; Total = total; Reference = reference }
}
The application supplies live functions. A test supplies a record of fakes. The workflow does not change.
Adding a timeout, a retry policy, and a resource that must be released does not change the signature either, because the runtime that starts the workflow owns cancellation, retries, and cleanup:
open System
let checkoutOrder orderId : Flow<CheckoutEnv, CheckoutError, Receipt> =
checkout orderId
|> Flow.retry (Schedule.recurs 2)
|> Flow.timeout (TimeSpan.FromSeconds 5.0) (PaymentDeclined "checkout timed out")
Flow also carries concurrency, scheduling, streams, and structured child fibers through the same runtime.
Install
dotnet add package Axial
Package family
Axial: the core workflow model: typed failures, dependencies, concurrency, resources, schedules, streams, and layers.Axial.Process: external process composition, pipelines, streaming output, typed failures, cancellation, and cleanup.Axial.HttpClient: typed HTTP requests, response handling, and reliability policies.
Supporting packages provide platform services, console and file-system access, hosting, and telemetry. The package catalogue links the first-class libraries and the complete compatibility matrix.
Documentation and examples
- Getting started
- Add Axial to an existing Task application
- Failures and defects
- Dependencies and services
- Concurrency
- Process
- HTTP client
- Runnable examples
- Integration reference application
Reified integration
Reified declares value, model, JSON, and HTTP contracts. Axial's optional server adapters execute Reified HTTP contracts as workflows; neither core depends on the other.
Declare a contract with Reified. Serve it with Axial.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 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 was computed. 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. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Fable.Core (>= 4.3.0)
- FSharp.Core (>= 10.1.401)
-
net8.0
- Fable.Core (>= 4.3.0)
- FSharp.Core (>= 10.1.401)
NuGet packages (11)
Showing the top 5 NuGet packages that depend on Axial:
| Package | Downloads |
|---|---|
|
Axial.PlatformService
Shared explicit service primitives for Axial flow clock, random, GUID, logging, and environment-variable boundaries. |
|
|
Axial.Layers
Reusable provisioning for Axial workflows: build an environment with flow capabilities, then provide it. |
|
|
Axial.Console
Standard console I/O service for Axial workflows. |
|
|
Axial.FileSystem
Standard file-system service for Axial workflows. |
|
|
Axial.Process
Composable external processes for F# workflows, with pipelines, streaming, typed failures, cancellation and safe cleanup. |
GitHub repositories
This package is not used by any popular GitHub repositories.