{"id":25564,"library":"fable-compiler-netcore","title":"Fable: F# to JavaScript Compiler","description":"Fable is an F# to JavaScript compiler that leverages the F# compiler service and Babel to emit clean, readable JavaScript. It compiles F# source code directly (no .NET bytecode), includes a minimal runtime (~20KB min+gzip), and integrates with the JavaScript ecosystem (ES6 modules, npm, Webpack). Current stable version is 5.0.0 (released 2024-08). Release cadence: major versions (4.x, 5.x) have been stable for years; pre-release RCs and alphas are frequent (multiple per month). Differentiators: F# fidelity (most F# core library, quotations, type providers), multi-target (JS, TS, Python, Dart, Rust, Erlang/BEAM), and no runtime overhead.","status":"active","version":"0.7.42","language":"javascript","source_language":"en","source_url":"https://github.com/fable-compiler/Fable","tags":["javascript","fable","fsharp","F#"],"install":[{"cmd":"npm install fable-compiler-netcore","lang":"bash","label":"npm"},{"cmd":"yarn add fable-compiler-netcore","lang":"bash","label":"yarn"},{"cmd":"pnpm add fable-compiler-netcore","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Fable uses Babel for code generation and source maps.","package":"babel-core","optional":false},{"reason":"Requires F# compiler (fsc.exe) installed on system.","package":"fsharp","optional":false}],"imports":[{"note":"The npm package is named fable-compiler, not fable. The CLI command is just 'fable'.","wrong":"npm install fable","symbol":"fable-compiler","correct":"npm install -g fable-compiler"},{"note":"Core library for attributes like [<Import>], [<Emit>], etc. Separate NuGet package.","wrong":"open Fable","symbol":"Fable.Core","correct":"open Fable.Core"},{"note":"React bindings for Fable. Must reference the Fable-specific package.","wrong":"#r \"nuget: React\"","symbol":"Fable.React","correct":"#r \"nuget: Fable.React\""}],"quickstart":{"code":"// Create a simple F# project\n// 1. Create project.fsproj with:\n// <Project Sdk=\"Microsoft.NET.Sdk\">\n//   <PropertyGroup>\n//     <TargetFramework>net8.0</TargetFramework>\n//   </PropertyGroup>\n//   <ItemGroup>\n//     <Compile Include=\"Program.fs\" />\n//     <PackageReference Include=\"Fable.Core\" Version=\"4.0.0-beta-*\" />\n//   </ItemGroup>\n// </Project>\n\n// 2. Create Program.fs with:\nmodule Program\n\nopen Fable.Core\n\n[<EntryPoint>]\nlet main argv =\n    printfn \"Hello from Fable!\"\n    0\n\n// 3. Compile:\n// dotnet fable --lang JavaScript --outDir output\n\n// 4. Run output/Program.js with Node\n","lang":"javascript","description":"Shows minimal F# project setup with Fable, including fsproj, Fable.Core reference, and CLI compilation."},"warnings":[{"fix":"Use pattern matching or Option module functions instead of null checks on options.","message":"Options are erased — \"None\" becomes null/undefined, \"Some x\" becomes x.","severity":"breaking","affected_versions":">=1.0"},{"fix":"Install with 'npm install -g fable-compiler'; run with 'fable'.","message":"Fable 3.0 renamed package from \"fable-compiler\" to \"fable\"? Actually the package is still \"fable-compiler\"; the CLI command is \"fable\".","severity":"breaking","affected_versions":">=3.0"},{"fix":"Specify target language explicitly: 'dotnet fable --lang TypeScript'.","message":"Fable target languages: JavaScript (default), TypeScript, Python, Dart, Rust, Erlang/BEAM. Use --lang flag.","severity":"gotcha","affected_versions":">=4.0"},{"fix":"Upgrade to Fable 4.x or 5.x and use .NET SDK (net8.0+).","message":"Legacy Fable 1.x and 2.x are obsolete; .NET Framework requirement vs .NET Core/5+.","severity":"deprecated","affected_versions":"<3.0"},{"fix":"Use F# 8 and .NET 8 SDK for Fable 5.0+.","message":"Fable 5.0.0-rc released Aug 2024; stable 5.0.0 is final. Ensure compatibility with F# 8 and .NET 8.","severity":"gotcha","affected_versions":">=5.0.0"},{"fix":"Update Python-specific code expecting .length property; use len() or .Length (which maps to len()).","message":"Fable 5.0.0 final: Python target now uses len() instead of .length for ResizeArray (breaking).","severity":"breaking","affected_versions":">=5.0.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Install fable-compiler: npm install -g fable-compiler","cause":"Installed package 'fable' instead of 'fable-compiler'.","error":"fable: command not found"},{"fix":"Install globally: npm install -g fable-compiler, or use npx: npx fable-compiler","cause":"Running 'fable' before installing, or installed locally not globally.","error":"Cannot find module 'fable-compiler'"},{"fix":"Add <PackageReference Include=\"Fable.Core\" Version=\"*\" /> to .fsproj","cause":"Missing reference to Fable.Core NuGet package.","error":"The type 'Fable.Core.ImportAttribute' is not defined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}