{"size": 1359, "ext": "scrbl", "max_stars_repo_path": "docs-src/guide-rpc.scrbl", "max_stars_repo_name": "Bhaney44/reach-lang", "max_stars_repo_stars_event_min_datetime": "2021-05-15T21:43:05.000Z", "max_stars_repo_stars_event_max_datetime": "2021-05-15T21:43:05.000Z", "max_issues_repo_path": "docs-src/guide-rpc.scrbl", "max_issues_repo_name": "Bhaney44/reach-lang", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "docs-src/guide-rpc.scrbl", "max_forks_repo_name": "Bhaney44/reach-lang", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 1, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 56.625, "max_line_length": 241, "alphanum_fraction": 0.7652685798}
#lang scribble/manual
@(require "lib.rkt")

@title[#:version reach-vers #:tag "guide-rpc"]{Do I have to use JavaScript to write my frontend? What about Python, Go, or other languages?}

Most Reach examples, tutorials, and workshops use JavaScript as the language of choice for @tech{frontend} implementation, but Reach supports @tech{frontend} development in any language via the @seclink["ref-backends-rpc"]{Reach RPC Server}.
This server allows @tech{backends} compiled to @seclink["ref-backends-js"]{JavaScript} to be provided to another language via a simple @seclink["ref-backends-rpc-proto"]{RPC protocol}.

Presently, Reach provides RPC client implementations for:
@itemlist[

@item{@seclink["ref-frontends-rpc-js"]{JavaScript}}
@item{@seclink["ref-frontends-rpc-py"]{Python}}
@item{@seclink["ref-frontends-rpc-go"]{Go}}

]

The @seclink["tut-7-rpc"]{tutorial section on RPC-based frontends} provides a walkthrough of using these libraries.

If your language of choice isn't available yet, it is very simple to @seclink["ref-backends-rpc-proto"]{implement one yourself} if you've ever used a JSON-based RPC protocol before.
Most implementations are less than 100 lines of code!
Or, you could submit a request for Reach to build one on the Reach @link["https://github.com/reach-sh/reach-lang/issues"]{GitHub issue tracker} or on @(the-community-link).

