twirp alternatives and similar packages
Based on the "Web" category.
Alternatively, view twirp alternatives based on common mentions on social networks and blogs.
-
haskell-bitmex-rest
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
swagger-petstore
swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. -
servant
Main repository for the servant libraries — DSL for describing, serving, querying, mocking, documenting web applications and more! -
scotty
Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp (Official Repository) -
neuron
Future-proof note-taking and publishing based on Zettelkasten (superseded by Emanote: https://github.com/srid/emanote) -
haskell-kubernetes
Haskell bindings to the Kubernetes API (via swagger-codegen) -
apecs-gloss
a fast, extensible, type driven Haskell ECS framework for games -
digestive-functors
A general way to consume input using applicative functors -
tagsoup
Haskell library for parsing and extracting information from (possibly malformed) HTML/XML documents -
airship
Helium + Webmachine = Airship. A toolkit for building declarative, RESTful web apps. -
backprop
Heterogeneous automatic differentiation ("backpropagation") in Haskell -
servant-elm
Automatically derive Elm functions to query servant webservices -
keera-hails-reactive-htmldom
Keera Hails: Haskell on Rails - Reactive Programming Framework for Interactive Haskell applications -
kubernetes-client-core
Haskell client for the kubernetes API. A work in progress. -
ghcjs-base
base library for GHCJS for JavaScript interaction and marshalling, used by higher level libraries like JSC -
ghcjs-dom
Make Document Object Model (DOM) apps that run in any browser and natively using WebKitGtk
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of twirp or a related project?
README
twirp-haskell
Very, very alpha implementation of Twirp service generation for Haskell.
This project provides a number of things:
- A protoc plugin for generating a Haskell Twirp service (based on Servant) for Services defined in a proto file.
- A haskell library,
twirp
for quickly serving up the generated application.
It requires the use of proto-lens to generate haskell datatypes from proto messages.
An example, end-to-end application is included in app
.
Requirements
- Install
protoc
(e.g.,brew install protoc
) - Install the required protoc plugins:
cabal install proto-lens-protoc
go get github.com/tclem/twirp-haskell/protoc-gen-twirp_haskell
go get github.com/tclem/proto-lens-jsonpb/protoc-gen-jsonpb_haskell
Usage
Use the protoc plugin to generate a twirp service and associated protobuf types from a proto file.
protoc -I=. --proto_path=./proto \
--plugin=protoc-gen-haskell=`which proto-lens-protoc` --haskell_out=./app \
--jsonpb_haskell_out=./app \
--plugin=protoc-gen-twirp_haskell=./script/run-twirp_haskell --twirp_haskell_out=./app/Twirp/Example/Haberdasher \
haberdasher.proto
The result is a couple of files that describe your service. First, here are the types that define a Servant API:
-- Code generated by protoc-gen-twirp_haskell 0.1.0, DO NOT EDIT.
{-# LANGUAGE TypeOperators #-}
module Twirp.Example.Haberdasher.Haberdasher where
import Servant
import Twirp
import Proto.Haberdasher
-- This is an example set of twirp services.
type HaberdasherAPI
= "twirp" :> "twirp.example.haberdasher.Haberdasher" :> HaberdasherService
:<|> "twirp" :> "twirp.example.haberdasher.Health" :> HealthService
-- Haberdasher service makes hats for clients.
type HaberdasherService
-- MakeHat produces a hat of mysterious, randomly-selected color!
= "MakeHat" :> ReqBody [Protobuf, JSON] Size :> Post '[Protobuf, JSON] Hat
-- Get paid
:<|> "GetBill" :> ReqBody [Protobuf, JSON] Hat :> Post '[Protobuf, JSON] Bill
-- Health check service
type HealthService
= "Check" :> ReqBody [Protobuf, JSON] Ping :> Post '[Protobuf, JSON] Pong
The datatypes are defined in [Proto.Haberdasher
](app/Proto/Haberdasher.hs).
Plugging this into an existing warp/wai server is straightforward. See [app/Main.hs
](app/Main.hs) for the full details:
type RequestID = String
type API
= Header "X-Request-Id" RequestID
:> HaberdasherAPI
main :: IO ()
main = run 8003 app
app :: Application
app = twirpErrorResponses apiApp
apiApp :: Application
apiApp = serve (Proxy :: Proxy API) server
server :: Server API
server _requestID = (makeHat :<|> getBill) :<|> checkHealth