Build full-stack web apps. Stay in F#.
Build reactive UIs, call server functions directly, and share types across your application - all with the power of F# and .NET.
Trusted by fast-growing companies around the world
How it works
Write your app once in C# or F#, or in OCaml. The compiler emits a native .NET or OCaml server and a JavaScript client that share both their data types and the metadata that connects them.
Shared types and typed calls across the boundary — no hand-written serialization or fetch glue.
Functional, reactive applications with WebSharper.UI
Bind composite data models to your reactive user interfaces. The flow of reactive values through the code yet concise, readability.
Powerful UI abstractions
Declare full interactive forms in just a few lines of code with WebSharper Forms.
Web Workers without hassle
Write client-side parallel code directly in your code.
The compiler automatically creates the separate trimmed JavaScript file for the web worker.
let worker = new Worker(fun self ->
// This code runs in the worker:
self.OnMessage <- fun e ->
Console.Log(
"Received message from main thread: "
+ string e.Data
)
)
// This code runs in the main thread:
worker.PostMessage("Hello, worker!")
var worker = new Worker("worker.js");
worker.postMessage("Hello, worker!");
self.onmessage = function (e) {
console.log(
"Received message from main thread: "
+ e.data.toString());
}
More in the box
A single toolset spanning the server, the client, and the boundary between them.
Sitelets
Strongly-typed routing and content. Endpoints are values, and links are generated and checked by the compiler.
Forms
Declarative, composable web forms with retargetable rendering and validation.
Typed WebSockets
Bidirectional messaging between server and client with automatically serialized messages.
Metaprogramming
Translate calls to specific methods with custom logic, or emit JavaScript generated at compile time.
Client-side testing
A unit-testing framework that is easy to use from .NET and compiles to QUnit tests.
Bindings & npm
Generate typed bindings for JavaScript libraries, or package your .NET code as an npm module with .d.ts files.
Get Started
Instant access to the power of WebSharper