openapi3-code-generator: OpenAPI3 Haskell Client Code Generator

[ code-generator, library, mit, program ] [ Propose Tags ]

Please see the README on GitHub at

[Skip to Readme]
Versions [faq],,,,,
Change log
Dependencies aeson, base (>=4.7 && <5), bytestring, containers, directory, filepath, hashmap, http-client, http-conduit, http-types, mtl, openapi3-code-generator, options, scientific, split, template-haskell, text, time, transformers, unordered-containers, vector, yaml [details]
License MIT
Copyright 2020 Remo Dörig & Joel Fisch
Author Remo Dörig & Joel Fisch
Maintainer Joel Fisch <> & Remo Dörig <>
Category Code-Generator
Home page
Bug tracker
Source repo head: git clone
Uploaded by remo_doerig at 2020-06-09T06:37:45Z
Distributions NixOS:
Executables openapi3-code-generator-exe
Downloads 359 total (14 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2020-06-09 [all 1 reports]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for openapi3-code-generator-

[back to package description]



How to use?

  1. install cabal
  2. cabal update
  3. cabal install openapi3-code-generator
  4. openapi3-code-generator-exe my_specification.yml

An out directory is created with the generated code. Hint you can use --output-dir to specify another output directory. You can use openapi3-code-generator --help to list all CLI options.

If openapi3-code-generator-exe is not found, you may not have added the cabal bin to your PATH. Execute ~/.local/bin/openapi3-code-generator-exe instead.

How to run from source

  1. install stack
  2. stack run -- --help

Example package

In the folder example is a package that uses the generated code from specifications/petstore.yml. You can run stack test inside the example directory to run the code, it calls the server "" with some sample data. uses this code generator to generate a Stripe API client.


The documentation for the code can be found at This package was created as part of a bachelor thesis. This thesis can be found here TODO.

Large specifications

For large specifications some modules (CyclicTypes.hs for example) can get pretty big. It may be necessary to use --fast with stack build --fast to build the code.

Module structure of the generated code.

All symbols are globally unique and are reexported in the module OpenAPI (Module name can be changed with --module-name). To reduce compile time, the code is split up into multiple modules. Mainly for every operation and for every schema. Schemas with cyclic dependencies are are in the module OpenAPI.CyclicTypes.

Troubleshooting naming conflicts

Naming conflicts can happen, sometimes a little manual adjustment is needed. With the following options naming conflicts can be resolved. It can happen, that the names get so long, that they are longer than the file system supports.

  • property-type-suffix
  • response-type-suffix
  • response-body-type-suffix
  • request-body-type-suffix
  • use-numbered-variant-constructors
  • convert-to-camel-case


The following features are not supported

  • links
  • callbacks
  • Only references to components are supported
  • Only JSON is supported for both sending and receiving data. application/x-www-form-urlencoded can only be used to send data.
  • Some circular references in the schemas. For example if an allOf contains itself
  • Parameters not in path or query
  • additionalProperties
  • not schemas
  • writeOnly and readOnly
  • multipleOf
  • maximum
  • exclusiveMaximum
  • minimum
  • exclusiveMinimum
  • minLength
  • maxItems
  • minItems
  • uniqueItems
  • maxProperties
  • minProperties
  • xml