Skip to content

Scriptorium

A family of focused F# libraries for building and testing F#/Fable applications.
open Scriptorium.Nib
open Scriptorium.Quill.Runner
open type Scriptorium.Quill.Runner.Test
[<EntryPoint>]
let main _ =
runTests [
testList "My suite" [
test("equality", fun () ->
assertThat 42 (isEqualTo 42)
)
test("option chain", fun () ->
assertThat (Some "hello") (Option.value >> isEqualTo "hello")
)
test("record fields with tags", fun () ->
assertThat { Name = "alice"; Age = 25 } (
inside _.Age (tag "age" >> isGreaterOrEqual 18)
>> inside _.Name (tag "name" >> isNotEqualTo "")
)
)
]
]

Scriptorium.Ink

Pure ANSI colour and style for terminal output. Wrap any string in red, bold, underline, and more. Respects NO_COLOR. No dependencies.

Scriptorium.Parchment

Structured logging with severity levels and a pluggable sink system. Create loggers, scope them with child prefixes, and route output to the console or your own sink.

Scriptorium.Nib

Composable, fluent assertions. Chain expectations with >>, drill into nested values with inside, label failures with tag, and collect every failure before throwing - never just the first.

Scriptorium.Quill

The test runner that holds everything together. Sync and async tests, focus mode, pending tests, per-test timeouts, slow-test warnings, and clickable source links in terminal output.

Scriptorium.Nib.Snapshot

Snapshot assertions for Scriptorium.Nib. Serialize any value to a file on first run, then compare on every subsequent run. Update with a single environment variable.

Scriptorium.Nib.Browser

Playwright-powered DOM assertions and test helpers for end-to-end testing. Wraps Playwright’s expect API behind Nib’s composable DomAssertion type.

Scriptorium.Hedgehog

Property-based testing, powered by Hedgehog.