r/fsharp • u/statuek • Jun 07 '20
meta Welcome to /r/fsharp!
This group is geared towards people interested in the "F#" language, a functional-first language targeting .NET, JavaScript, and (experimentally) WebAssembly. More info about the language can be found at https://fsharp.org and several related links can be found in the sidebar!
r/fsharp • u/nichom69 • 2d ago
F# DSL for Excel that round-trips — read a real .xlsx back into runnable F#/C# source, not just build-only
Most Excel libraries (EPPlus, ClosedXML, NPOI, openpyxl on the Python side) give you a one-way street: an imperative API to build or mutate a workbook, but no way to turn an existing file back into readable source. I wanted the other direction too, so Kookerella.FsOpenXmlDsl is a typesafe DSL (records/DUs with structural equality) over SpreadsheetML, with a Reader that parses a real .xlsx/.xlsm back into the same DSL, plus code generation that renders that model back out as a self-contained script — genuinely a decompiler for spreadsheets, not just a writer.
open Kookerella.FsOpenXmlDsl
open type Kookerella.FsOpenXmlDsl.SheetDsl
let data =
sheet "Sheet1"
[ row [ cell (Text "Name"); cell (Text "Amount") ]
row [ cell (Text "Widgets"); cell (Number 42.5) ] ]
workbook [ data ] |> Workbook.save "out.xlsx"
// and back:
let wb = Workbook.load "out.xlsx"
Workbook.generateScript referenceLines "out.xlsx" wb // -> runnable .fsx that rebuilds it
There's also a plain XML/JSON surface (Xml.ofWorkbook/Json.ofWorkbook) against a real embedded schema, aimed at making .xlsx diffable in git — output is deterministically sorted by cell position so a real content change doesn't get buried in reshuffled-list noise. Chasing that determinism claim down actually surfaced two genuine bugs in the .xlsx writer itself (conditional-format dxfId/priority swapping between logically-identical workbooks depending on rule insertion order, and a similar issue in custom number format IDs) — fixed with regression tests in the last release.
Covers cells/styles/formulas (shared-formula reconstruction on read), conditional formatting, data validation, charts, images, pivot tables (real aggregation, not just description), sparklines, and VBA macro embedding. There's a C# wrapper with full feature parity, and an MCP server if you want an AI agent driving it directly.
dotnet tool install -g Kookerella.FsOpenXmlDsl.Mcp
fsopenxmldsl-mcp convert your-file.xlsx --lang fsharp
NuGet · MAPPING.md for exactly what's modeled vs. approximated vs. missing.
Happy to take feedback/criticism — genuinely curious whether the DSL shape (SheetItem list folded by sheet) reads well to other F# people or feels awkward.
r/fsharp • u/fsharpweekly • 2d ago
F# weekly F# Weekly #36, 2026 — Fable 5.16, FsLexYacc 12, and MSTest Goes Native AOT
Seeking an F# code reviewer for transpiled package
I wrote a Gleam library for manipulating SVG paths and I transpiled to F# to check dimensionality mistakes in various Float parameters.
I caught ~30 or so mistakes/inaccuracies/bugs via the transpilation out of ~50K original lines of code. (Also notable: the KLOC drop to 21K in F#, less than one-half of Gleam. Seems Gleam is very vertical whitespace-happy.) The transpilation was done chunk by chunk by Codex, and some bugs were not really language-related, just found by looking at the code again, though the great majority were dimensionality problems, as I intended to catch.
Ok anyway now I've published this as an F# package, and wondering if someone who actually uses F# could tell me if I did right, or if the library is missing something stupid (like proper source docs or sth) that I wouldn't catch myself because I never use F#. It would be better if it was usable, now that I've gone to this trouble.
F# version: https://www.nuget.org/packages/SvgPath/0.3.0
Gleam version: hex.pm/packages/svg_path
Thanks!
r/fsharp • u/jonas1ara • 8d ago
Algebraic Tiny Compiler
Algebraic Tiny Compiler in F#
A from‑scratch compiler that uses algebra as the lens to understand how real compilers work — no abstractions for the sake of abstractions, no academic overhead, just a clean, inspectable pipeline built in F#.
By treating expressions as algebraic structures, the project walks through every stage of a compiler with concrete, mathematical transformations:
- Tokenizer → turns raw text into meaningful tokens
- Parser → recursive‑descent parsing with operator precedence
- AST → algebraic expression trees representing structure and intent
- Polynomial Expansion → distributive expansion and normalization
- Term Combination → merging like terms into canonical form
- Equation Solving → linear and quadratic solvers using discriminants
- Code Generation → assembly‑style output to show how machines evaluate expressions
- Execution Modes → JIT on .NET or AoT with NativeAOT for ultra‑fast startup
A practical, algebra‑driven walkthrough of how compilers read, understand, transform, and execute code.
Blog posts:
r/fsharp • u/fsharpweekly • 8d ago
F# weekly F# Weekly #35, 2026 — Fabulous 10, .NET Conf 2026 Announced, and C# 15 Preview
r/fsharp • u/fsharpweekly • 16d ago
F# weekly F# Weekly #34, 2026 — Every Repo is A Software Factory Now
r/fsharp • u/Consistent-Ruin1868 • 21d ago
WebWeaveX — deterministic runtime cognition, byte-identical across 5 languages (Apache 2.0)
ni-sh-a-char.github.ioWebWeaveX captures what a running application is doing, DOM event surfaces, network envelopes, execution state, and normalizes it into canonical bytes so it gets a stable SHA-256 identity.
The same input produces the same digest in Python, JavaScript, Dart, Java and Kotlin. There's a verification harness that replays Python-generated golden vectors through each runtime and reports MATCH / DIFFER / MISSING per API.
That lets you prove two runs are equivalent, reconstruct a runtime from its IR for network-free test fixtures, resume
authenticated sessions from an encrypted envelope, and hand an LLM a compact graph instead of raw HTML.
pip install webweavex
npm install webweavex
dart pub add webweavex
Maven Central: io.github.piyush-mishra-00:webweavex:3.0.0
Apache 2.0.
r/fsharp • u/fsharpweekly • 23d ago
F# weekly F# Weekly #33, 2026 — .NET 11 Preview 7 Ships with F# Updates and PaketaBot
r/fsharp • u/existentialnonormie • 29d ago
misc Getting Back into F# - Learning Data Modeling with a Little Help from AI
Beginner here 👋, I'm currently picking up data modeling in F# after a long break. Work and procrastination got in the way, but I'm finally circling back to fill the gaps.
To stay on track, I've been using Claude to generate practice tasks. When I get stuck, I ask for a gentle nudge without giving away the solution, and it's been surprisingly effective. I'm currently using Sonnet 5 Medium(Free), and based on the task I just implemented, it said my work was "good," so I'll take that as a win.
The task was about modeling a Job Application pipeline. I didn't bother applying validation just yet, since I'm currently focused on getting the shape of the data right and trying to make invalid state unrepresentable.
I'd recommend giving this approach a try. It keeps things interactive without handing you the answers outright.
r/fsharp • u/fsharpweekly • Aug 08 '26
F# weekly F# Weekly #32, 2026 — FSharp.Data 8.2.0, Mibo 4.0, and F# MCP Ecosystem Grows
r/fsharp • u/fun_si • Aug 03 '26
FunStripe 2.3.0 — F# Stripe client: webhook deserialisation fixed, resilient enums, latest Stripe API
Just released FunStripe 2.3.0, the F# client library for the Stripe API (also compiles to JS via Fable). This one's a bigger release than the usual spec bump, thanks to some excellent contributions from Thorium:
Webhooks work properly now. Event.data.object was typed as string, which meant deserialising any real webhook payload threw. It's now a RawJson fragment you can turn into a typed model with Util.deserialiseRaw<'a>; the README has a full webhook-handling example. (Technically a field type change, but since the old field could never deserialise, it ships as a minor; details in the changelog.)
List parameters encode correctly. List<record> and List<union> request fields (e.g. Checkout line_items, payment_method_types) were being ToString()'d instead of form-encoded. Fixed.
Resilient to Stripe's enum churn. Stripe adds event types and error codes without an API version bump, and one unknown value used to fail the whole response. EventType and ErrorType now have an UnknownEnumValue of string catch-all that round-trips losslessly, deliberately scoped to just those two high-churn enums, so everywhere else you keep exhaustive matching and the compiler still tells you when Stripe adds something.
Latest Stripe API (2026-07-29.dahlia): Financial Connections authorization resource and deactivation lifecycle events, allowed_payment_method_types on Payment/SetupIntents, new Tax registration options, and more.
- GitHub: https://github.com/simontreanor/FunStripe
- NuGet: FunStripe.Core (https://www.nuget.org/packages/FunStripe.Core)
Feedback and PRs welcome!
r/fsharp • u/fsharpweekly • Aug 01 '26
F# weekly F# Weekly #31 — MCP C# SDK v2.0, Unit-Test Agent, and MSBuild Binlog in VS Code
r/fsharp • u/fun_si • Jul 31 '26
showcase Pyfun: an F#-inspired language that compiles to readable Python
My idea for getting coders into functional programming earlier...
r/fsharp • u/fun_si • Jul 30 '26
article Your Database Schema Is Your Codebase: F# as the Single Source of Truth
https://si-fi.dev/articles/fsharp-schema-as-code/
I recently architected a full-stack app from scratch and needed a way to rapidly prototype the database schema. I came up with a way to do it in one place in F#, giving me strong typing across the stack and an efficient way to tweak the database structure as much as I needed. Here I share what this looks like as well as a repo containing an extracted version of the code. Hope you find it interesting and do let me know your thoughts.
r/fsharp • u/Taikal • Jul 29 '26
question Rider and nested type providers?
Does Rider have issues with nested type providers?
I have a class library that defines types through a nested type provider -- that is, a type provider nested inside a root type provider -- see below for an example.
The library builds and runs fine, but Rider flags every use of the nested type provider after the first as an error. The same code is displayed without errors in VS Code.
Thank you.
// Requires NuGet package "FSharp.Data.GraphQL.Client".
open System
open System.Net.Http
open FSharp.Data.GraphQL
type MyProvider =
GraphQLProvider<"https://graphqlzero.almansi.me/api">
let postQuery =
// ERROR
MyProvider.Operation<"""
query PostQuery {
post(id: 1) {
id
}
}
""">()
let usersQuery =
// ERROR
MyProvider.Operation<"""
query UsersQuery {
users(options: { paginate: { page: 1, limit: 5 } }) {
data {
id
}
}
}
""">()
[<EntryPoint>]
let main _ =
try
use runtimeContext: GraphQLProviderRuntimeContext =
{
ServerUrl = "https://graphqlzero.almansi.me/api"
HttpHeaders = []
Connection =
new GraphQLClientConnection(
new HttpClient(),
true
)
}
let result = usersQuery.Run runtimeContext
printfn "Data: %A\n" result.Data
printfn "Errors: %A\n" result.Errors
printfn "Custom data: %A\n" result.CustomData
0
with ex ->
eprintfn "Error: %s" ex.Message
1
EDIT: Provided working sample code.
r/fsharp • u/fsharpweekly • Jul 25 '26
F# weekly F# Weekly #30 — FsHttp.Studio & fable-lit-fullstack-template
r/fsharp • u/yyannekk • Jul 19 '26
Building a Readable DSL for Playwright Tests in F# | blog
jannikbuschke.der/fsharp • u/fsharpweekly • Jul 19 '26
F# weekly F# Weekly #29 — .NET 11 Preview 6 and Mibo 3.0
r/fsharp • u/fsharpweekly • Jul 12 '26
F# weekly F# Weekly #28 — Mibo 2.0, Fable 5.7, and Cast Shadows in F#
r/fsharp • u/ad3mar • Jul 11 '26
SuaveHooks — a webhook platform built entirely in F# with Suave
I just launched SuaveHooks — a webhook capture, inspection, transformation and routing platform built completely with Suave + F#.
Some highlights:
- Live tailing of webhooks over WebSockets
- Type-safe transforms written in F# (also C# and JS) running in an isolated process
- JSON rule-based transforms as a lighter option
- Multi-target forwarding (HTTP + S3, SQS, Kafka, Pub/Sub)
- Retries with exponential backoff + circuit breaker
- Full REST API + MCP server support
Site: https://suavehooks.com
Would love some feedback; like what features would make this more useful for you? Happy to answer any technical questions.
r/fsharp • u/Constant-Junket6038 • Jul 06 '26
library/package Initial alpha release of Zigote - UI framework and game engine
r/fsharp • u/lyfever_ • Jul 05 '26
question Still worth learning F# 2026
Hi guys,
Probably another question like this but found none recently.
I'm a little upset with my current view on IT generalistic, ofc AI is not going anywhere besides up, but I feel I want to write more with my hands and new paradigms, maybe just AI as reviser, I would like to ask if learning F# in 2026 will make me able to make perfomance headed systems, and also gaming with something like Nu or Monogame, not a AAA game but something playable.