Scriptorium.Ink
Pure ANSI colour and style for terminal output. Wrap any string in red, bold, underline, and more. Respects NO_COLOR. No dependencies.
open Scriptorium.Nibopen Scriptorium.Quill.Runneropen 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.