LLM.coPrivate, self-hosted LLMs & custom AI applications.
Automatic.coAI-powered workflow & business process automation.
RMA.aiAI-powered cybersecurity monitoring, threat detection & defense.
VB.coOperating AI™ — one intelligent layer for middle-market ops.expecto
Expecto is a testing library for F# that emphasizes parallel, composable tests with built-in support for unit, property-based, stress, and performance testing. It treats tests as first-class values, enabling flexible composition and filtering.
Key facts
Objective fields from the source. Values we can't verify are shown as “Unknown” rather than guessed.
| Field | Value |
|---|---|
| Repository | haf/expecto |
| Owner | haf |
| Primary language | F# |
| License | Apache-2.0 — OSI-approved |
| Stars | 739 |
| Forks | 98 |
| Open issues | 59 |
| Latest release | 10.2.1 (2024-03-15) |
| Last updated | 2026-06-17 |
| Source | https://github.com/haf/expecto |
What expecto is
Expecto provides an F#-native testing DSL with async-first parallel test execution, integrated FsCheck property testing, BenchmarkDotNet performance analysis, and CLI-driven test filtering/shuffling. Tests compile as console applications with no separate test runner dependency.
Get the expecto source
Clone the repository and explore it locally.
git clone https://github.com/haf/expecto.gitcd expecto# follow the project's README for install & configurationNeed it deployed, integrated, or customized instead? DEV.co ships production installs.
Best use cases
Implementation considerations
- Tests are F# values and functions; requires F# language familiarity and functional programming patterns. Learning curve is moderate for imperative developers.
- Parallel execution is default; careful design of test isolation, shared state, and teardown is critical to avoid race conditions and flaky tests.
- CLI-driven configuration (filter, shuffle, stress-test parameters) via command-line args; no XML/YAML config files. Integration with CI/CD pipelines requires script wrapping.
- Setup/teardown are simple functions, not attributes; reduces magic but requires explicit function composition for complex fixture scenarios.
- Performance testing requires statistical understanding; misuse can lead to false positives. BenchmarkDotNet integration adds external dependency complexity.
When to avoid it — and what to weigh
- C# or Non-F# Primary Codebase — Expecto is F#-first. While it runs on CLR, the API and documentation are optimized for F# syntax and idioms. C# teams should consider xUnit, NUnit, or MSTest.
- Requires IDE Test Explorer Integration — VisualStudio.TestAdapter is available but adoption/support is unclear from data. Teams heavily reliant on Visual Studio Test Explorer may face friction.
- Need for Cross-Language or Language-Agnostic Test Suite — Expecto tests are F# values compiled to console applications. Polyglot teams needing unified test reporting across languages should consider language-agnostic frameworks.
- Minimal Dependencies or Offline-First Environments — Expecto pulls in FsCheck, BenchmarkDotNet, and Logary as optional dependencies. Air-gapped or dependency-minimalist teams may face supply chain constraints.
License & commercial use
Apache License 2.0 (Apache-2.0). Permissive OSI-compliant license.
Apache-2.0 permits commercial use, modification, and distribution without royalty. Attribution required; no warranty or liability. Safe for proprietary software development. Verify compliance with any internal policies.
DEV.co evaluation signals
Editorial assessment — not user reviews. Directional, with an explicit confidence level.
| Signal | Assessment |
|---|---|
| Maintenance | Active |
| Documentation | Adequate |
| License clarity | Clear |
| Deployment complexity | Low |
| DEV.co fit | Good |
| Assessment confidence | High |
No explicit security audit or vulnerability disclosures mentioned in data. Expecto is a test framework, not a runtime security boundary. Standard supply-chain considerations: vet FsCheck, BenchmarkDotNet, and Logary as transitive dependencies. No hardened secret-handling or cryptographic operations in scope.
Alternatives to consider
xUnit.net
Cross-language (.NET), mature, extensive IDE integration (Visual Studio, Rider, VSCode). Preferred for polyglot teams and C#-first shops.
NUnit
Long-standing .NET standard, attribute-based (familiar to many), strong documentation and tooling. Less functional-style; better for imperative teams.
Hedgehog (F#-native)
Alternative F# property-based testing library; lightweight composition model. Lacks integrated performance testing; less mature ecosystem than Expecto + FsCheck.
Build on expecto with DEV.co software developers
Expecto excels at functional testing with composable, parallel test execution. Confirm F# expertise on your team, validate IDE integration needs, and pilot with performance testing before full adoption.
Talk to DEV.coRelated open-source tools
Surfaced by semantic similarity across the DEV.co open-source index.
Related on DEV.co
Explore the category and the services that help you build with it.
expecto FAQ
Can I use Expecto in a C# project?
Does Expecto support test discovery and IDE test runners?
How do I integrate Expecto tests into CI/CD?
What are the performance testing capabilities?
Work with a software development agency
Standing up expecto properly takes more than a deploy. As a software development agency, DEV.co handles the open-source testing architecture, the web development on top, and the operational work underneath.
Evaluating Expecto for your F# test suite?
Expecto excels at functional testing with composable, parallel test execution. Confirm F# expertise on your team, validate IDE integration needs, and pilot with performance testing before full adoption.
LAW.co
RFP.co
Search.co
VDR.ai