{"id":25880419,"url":"https://github.com/jwosty/denverfp-frp","last_synced_at":"2026-05-12T10:31:20.493Z","repository":{"id":68008161,"uuid":"197259865","full_name":"jwosty/DenverFP-FRP","owner":"jwosty","description":"A functional reactive web application template using F#, WebSharper, and .NET Core. Use this as a starting point to tinker and build your own application.","archived":false,"fork":false,"pushed_at":"2019-07-17T16:44:27.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-02T13:37:43.707Z","etag":null,"topics":["dotnet-core","fsharp","functional-reactive-programming","websharper"],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jwosty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-16T20:05:14.000Z","updated_at":"2019-07-17T16:44:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"318ef860-39a9-4840-96c3-26b9c92fbac8","html_url":"https://github.com/jwosty/DenverFP-FRP","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jwosty/DenverFP-FRP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwosty%2FDenverFP-FRP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwosty%2FDenverFP-FRP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwosty%2FDenverFP-FRP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwosty%2FDenverFP-FRP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwosty","download_url":"https://codeload.github.com/jwosty/DenverFP-FRP/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwosty%2FDenverFP-FRP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32934437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet-core","fsharp","functional-reactive-programming","websharper"],"created_at":"2025-03-02T13:32:48.275Z","updated_at":"2026-05-12T10:31:20.487Z","avatar_url":"https://github.com/jwosty.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DenverFP-FRP\nThis project was the starting point Alan and I used in [our talk](https://www.meetup.com/denverfp/events/263198218/?comment_table_id=263045508\u0026comment_table_name=reply) at the DenverFP meetup.\nIt is a functional reactive web application template using F#, WebSharper, and .NET Core. This project is based on the `websharper-web` dotnet template for F#.\n\n## Getting Started\nAll you have to do is clone this repo and run `dotnet restore`, and then start it up with `dotnet run`.\n\n## Purpose\nNormally, you would just start a new project with `dotnet new websharper-web -lang f#`, but as of the time of this writing on July 16, 2019, it's [broken](https://fpish.net/topic/Some/0/86609) and is an [open Websharper issue](https://github.com/dotnet-websharper/core/issues/1044).\\*\n\n*\\* If you're on Windows, it might actually be working, in which case you don't need this repo.*\n\nThis project uses a workaround as partially described [here](https://github.com/dotnet-websharper/core/issues/1044#issuecomment-478963571). More complete instructions on the exact steps that we took are coming.\n\n## Code Overview\n* `Site.fs`\n  * Contains server-side definitions for the HTTP page routes, as well as the server-side computed parts of all the pages. It has some WebSharper [HTML templating](https://developers.websharper.com/docs/v3.x/fs/ui.next-templating3x) to build most of each page.\\* \n* `Client.fs`\n  * Contains all of the client-side code, which gets transpiled to JavaScript (notice the `JavaScript` attribute on the module), and which gets inserted [into the home page](https://github.com/jwosty/DenverFP-FRP/blob/master/Site.fs#L43). This client-side code uses reactive variables to compute [an output text node](https://github.com/jwosty/DenverFP-FRP/blob/master/Client.fs#L20) based on an [input text field](https://github.com/jwosty/DenverFP-FRP/blob/master/Client.fs#L12) and [a server computation](https://github.com/jwosty/DenverFP-FRP/blob/master/Remoting.fs#L11)\n* `Remoting.fs`\n  * Contains a remoting function that executes on the server side but can be called from the client side (internally using AJAX remoting mechanisms). It's only performing a string reversal for demonstration purposes; you can of course perform much more complicated server-side operations here.\n\nNote: The one tweak in functionality we made is to remove the `submit` button next to the text box from [the original template](https://github.com/dotnet-websharper/templates/blob/0baf2861df31658d7aa087273031ba200a2e655a/FSharp/ClientServer/Client.fs#L22), in order to demonstrate how reactive values continuously update. It's obviously not a good idea to use it in that way, since every user keystroke in the input box ends up triggering a web request to the server. In real code, you'd want to use a submit button or to throttle the requests or something.\n\n*\\* This link is old, but unfourtunately you can't link to particular headers in the 4.x documentation. However AFAIK, templates didn't change in 4.x. If you want to find the 4.x documentation, first go [here](https://developers.websharper.com/docs/v4.x/fs), then in the left sidebar, navigate to Basics\u003eReactive\u0026nbsp;HTML\u003eHTML\u0026nbsp;Templates.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwosty%2Fdenverfp-frp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwosty%2Fdenverfp-frp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwosty%2Fdenverfp-frp/lists"}