orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. ๐บ
> /plugin marketplace add orval-labs/orval
Repo: orval-labs/orval
What's inside
orval generates type-safe JS clients (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats.
[!IMPORTANT] Version 8.0.0+ comes with a lot of improvements and changes please see the Migration Guide
generate models, requests, hooks, mocks and more, for these supported clients:
You can find some samples below:
Try Orval out for yourself using our Playground application!
Orval 8+ requires Node.js 22.18 or newer. Projects on an older Node LTS can run code generation with the official Docker image.
Basic usage
# macOS / Linux
docker run --rm -v "$(pwd):/app" -w /app ghcr.io/orval-labs/orval
# Windows Git Bash
MSYS_NO_PATHCONV=1 docker run --rm -v "$(pwd):/app" -w /app ghcr.io/orval-labs/orval
# Windows CMD
cd /d "C:\path\to\your-project"
docker run --rm -v "%cd%:/app" -w /app ghcr.io/orval-labs/orval
# Windows PowerShell
cd "C:\path\to\your-project"
docker run --rm -v "${PWD}:/app" -w /app ghcr.io/orval-labs/orval
Local API (localhost โ host.docker.internal)
# macOS / Linux
docker run --rm -v "$(pwd):/app" -w /app -e ORVAL_SWAGGER_URL="https://host.docker.internal:7142/swagger/v1/swagger.json" -e NODE_TLS_REJECT_UNAUTHORIZED=0 ghcr.io/orval-labs/orval --config ./orval.config.ts
# Linux (native Docker)
docker run --rm --add-host=host.docker.internal:host-gateway -v "$(pwd):/app" -w /app -e ORVAL_SWAGGER_URL="https://host.docker.internal:7142/swagger/v1/swagger.json" -e NODE_TLS_REJECT_UNAUTHORIZED=0 ghcr.io/orval-labs/orval --config ./orval.config.ts
# Windows Git Bash
MSYS_NO_PATHCONV=1 docker run --rm -v "$(pwd):/app" -w /app -e ORVAL_SWAGGER_URL="https://host.docker.internal:7142/swagger/v1/swagger.json" -e NODE_TLS_REJECT_UNAUTHORIZED=0 ghcr.io/orval-labs/orval --config ./orval.config.ts
# Windows CMD
cd /d "C:\path\to\your-project"
docker run --rm -v "%cd%:/app" -w /app -e "ORVAL_SWAGGER_URL=https://host.docker.internal:7142/swagger/v1/swagger.json" -e "NODE_TLS_REJECT_UNAUTHORIZED=0" ghcr.io/orval-labs/orval --config ./orval.config.ts
# Windows PowerShell
cd "C:\path\to\your-project"
docker run --rm -v "${PWD}:/app" -w /app -e ORVAL_SWAGGER_URL="https://host.docker.internal:7142/swagger/v1/swagger.json" -e NODE_TLS_REJECT_UNAUTHORIZED=0 ghcr.io/orval-labs/orval --config ./orval.config.ts
Replace ghcr.io/orval-labs/orval with orval:local when testing locally before the official image is published. See the installation docs for details.
First of all, we do not reject the use of AI agents outright. That said, please do not submit AI-generated output in a PR without reviewing it yourself. Every change must have a clear intent and purpose โ do not submit changes you cannot explain in your own words. Making the effort to understand orval's codebase, TypeScript, and API clients beforehand, and reviewing what AI produces, is the contributor's responsibility, not the reviewer's. Finally, we will continue to welcome new contributors and actively support you through review and iteration.
See CONTRIBUTING.md for details.
This project uses Bun for package management and building. Bun install guide.
vp run nuke:all - Completely clean your workspace by removing all build artifacts, node_modules, and cached files. Use this when you want to start fresh.
vp run build - Build the project and make changes available to the workspace. Run this after making code changes to compile TypeScript and prepare the project for use.
vp run typecheck - Run TypeScript type checking across all packages.
vp run test - Run unit tests in all packages.
vp run update-samples - Generate sample outputs using the newly built version of Orval. This regenerates the sample code based on the current build.
vp run test:samples - Run tests in the samples directory using the newly generated output from update-samples.
vp run test:snapshots - Run snapshot tests to verify generated sample outputs match the committed snapshots. Fails if any generated file differs from its snapshot.
vp run test:snapshots:update - Regenerate snapshot files to match the current generated output. Run this after vp run update-samples when the generated output has intentionally changed.
vp run test:cli - Test that the generated output (not samples) is valid TypeScript. This validates the TypeScript compilation of the generated code.
A typical development workflow would be:
vp run build to compile your changesvp run typecheck to verify package typingsvp run lint to catch lint issues earlyvp run test to run unit tests in packagesvp run test:snapshots to verify generated output matches snapshotsIf step 6 fails because the generated output has intentionally changed, run vp run test:snapshots:update to update the snapshots.
If you encounter issues or want to start completely fresh:
vp run nuke:all to clean everythingThank you to all our sponsors! ๐ป
Support orval development by Open Collective and your logo will be displayed here with a link to your website.
Thank you to all our backers! ๐
Support us with a one-time donation and help us continue our activities on Open Collective.
Note: After becoming a sponsor or backer, please contact us on Discord to upload your logo.
.claude-plugin/
marketplace.json
.coderabbit.yaml
.dockerignore
.gitattributes
.github/
dependabot.yml
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
other.yml
PULL_REQUEST_TEMPLATE.md
workflows/
deploy-doc.yaml
docker-publish.yaml
issue-labeler.yaml
pr-checks.yaml
release-prepare.yaml
release-publish.yaml
stale.yaml
.gitignore
.prettierrc.json
.vite-hooks/
commit-msg
pre-commit
.vscode/
extensions.json
settings.json
bun.lock
bunfig.toml
CODE_OF_CONDUCT.md
commitlint.config.mjs
CONTRIBUTING.md
DEBUGGING.md
Dockerfile
docs/
.gitignore
biome.json
bun.lock
content/
docs/
guides/
angular-query.mdx
angular.mdx
basics.mdx
client-with-effect.mdx
client-with-zod.mdx
custom-axios.mdx
custom-client.mdx
effect.mdx
enums.mdx
faker.mdx
fetch-client.mdx
fetch.mdx
hono.mdx
mcp.mdx
meta.json
msw.mdx
react-query.mdx
set-base-url.mdx
solid-query.mdx
solid-start.mdx
stream-ndjson.mdx
svelte-query.mdx
swr.mdx
vue-query.mdx
zod.mdx
index.mdx
installation.mdx
meta.json
quick-start.mdx
reference/
cli.mdx
configuration/
full-example.mdx
hooks.mdx
index.mdx
input.mdx
meta.json
output.mdx
integration.mdx
meta.json
versions/
meta.json
v8.mdx
zh/
guides/
angular-query.mdx
angular.mdx
basics.mdx
client-with-effect.mdx
client-with-zod.mdx
custom-axios.mdx
custom-client.mdx
effect.mdx
enums.mdx
faker.mdx
fetch-client.mdx
fetch.mdx
hono.mdx
mcp.mdx
meta.json
msw.mdx
react-query.mdx
set-base-url.mdx
solid-query.mdx
solid-start.mdx
stream-ndjson.mdx
svelte-query.mdx
swr.mdx
vue-query.mdx
zod.mdx
index.mdx
installation.mdx
meta.json
quick-start.mdx
reference/
cli.mdx
configuration/
full-example.mdx
hooks.mdx
index.mdx
input.mdx
meta.json
output.mdx
integration.mdx
meta.json
versions/
meta.json
v8.mdx
package.json
plugins/
generate-md-pages.ts
public/
images/
emblem.svg
favicon.svg
og-image.png
orval-logo-horizontal.svg
README.md
scripts/
check-i18n-coverage.ts
site.config.json
source.config.ts
src/
components/
docs/
docs-page.tsx
home/
home-page.tsx
not-found.tsx
particle-network.tsx
playground/
EditorPanel.tsx
ExampleSelector.tsx
OutputPanel.tsx
playground-page.tsx
Playground.tsx
lib/
i18n.ts
layout.shared.tsx
playground/
examples.ts
generate.ts
types.ts
source.ts
sponsors.ts
router.tsx
routes/
__root.tsx
$locale/
docs/
$.tsx
api/
search.ts
docs/
$.tsx
index.tsx
playground.tsx
zh_.playground.tsx
zh.tsx
routeTree.gen.ts
styles/
app.css
tsconfig.json
vite.config.ts
worker-configuration.d.ts
wrangler.jsonc
LICENSE
logo/
orval-logo-horizontal.svg
package.json
packages/
angular/
package.json
README.md
src/
constants.ts
http-client.test.ts
http-client.ts
http-resource.test.ts
http-resource.ts
index.test.ts
index.ts
test-helpers.ts
types.test.ts
types.ts
utils.test.ts
utils.ts
tsconfig.build.json
tsconfig.json
vite.config.ts
vitest.config.ts
axios/
package.json
README.md
src/
index.test.ts
index.ts
tsconfig.build.json
tsconfig.json
vite.config.ts
vitest.config.ts
core/
package.json
README.md
src/
constants.ts
generators/
__tests__/
mutator-test-files/
call-expression-tests/
factory-default-export.ts
factory-named-export.ts
default-anonymous-function-0-args.ts
default-anonymous-function-1-args.ts
default-anonymous-function-2-args.ts
default-anonymous-function-3-args.ts
default-anonymous-lambda-0-args.ts
default-anonymous-lambda-1-args.ts
default-anonymous-lambda-2-args.ts
default-anonymous-lambda-3-args.ts
default-anonymous-nested-lambda-0-args.ts
default-anonymous-nested-lambda-1-args.ts
default-anonymous-nested-lambda-2-args.ts
default-anonymous-nested-lambda-3-args.ts
dynamic-import-tests/
dynamic-import-named-export.ts
external-module-tests/
external-module.ts
mutation.ts
named-export-tests.ts
re-export-tests/
external-named-export.ts
component-definition.ts
dynamic-ref.test.ts
factory.test.ts
factory.ts
imports.test.ts
imports.ts
index.ts
input-filters.test.ts
input-filters.ts
interface.test.ts
interface.ts
models-inline.ts
mutator-info.test.ts
mutator-info.ts
mutator.test.ts
mutator.ts
options.test.ts
options.ts
parameter-definition.test.ts
parameter-definition.ts
schema-definition.test.ts
schema-definition.ts
verbs-options.ts
getters/
array.test.ts
array.ts
body.test.ts
body.ts
combine.test.ts
combine.ts
discriminators.test.ts
discriminators.ts
enum.test.ts
enum.ts
imports.test.ts
imports.ts
index.ts
keys.test.ts
keys.ts
object.ts
operation.test.ts
operation.ts
parameters.test.ts
parameters.ts
params.test.ts
params.ts
props.test.ts
props.ts
query-params.test.ts
query-params.ts
ref.test.ts
ref.ts
res-req-types.test.ts
res-req-types.ts
response.test.ts
response.ts
route-extended.test.ts
route.test.ts
route.ts
scalar.test.ts
scalar.ts
index.ts
resolvers/
dynamic-ref.test.ts
index.ts
object.ts
ref.test.ts
ref.ts
value.test.ts
value.ts
test-utils/
context.ts
split-modes.ts
types.ts
utils/
assertion.test.ts
assertion.ts
async-reduce.ts
case.test.ts
case.ts
compare-version.test.ts
compare-version.ts
content-type.ts
debug.ts
deep-non-nullable.ts
doc.test.ts
doc.ts
dynamic-import.ts
extension.ts
file-extensions.ts
file.ts
get-property-safe.ts
index.ts
is-body-verb.ts
log-warning.test.ts
logger.ts
merge-deep.ts
occurrence.ts
path.test.ts
path.ts
resolve-version.test.ts
resolve-version.ts
schemas-options.test.ts
schemas-options.ts
sort.ts
string.test.ts
string.ts
tags.test.ts
tags.ts
tsconfig.test.ts
tsconfig.ts
writers/
file.ts
finalize-mock-implementation.ts
generate-imports-for-builder.test.ts
generate-imports-for-builder.ts
index.ts
mock-imports.test.ts
mock-imports.ts
mock-outputs.test.ts
mock-outputs.ts
mock-utils.test.ts
mock-utils.ts
schema-tag-mapper.test.ts
schema-tag-mapper.ts
schemas-tags-split.test.ts
schemas-tags-split.ts
schemas.test.ts
schemas.ts
single-mode.test.ts
single-mode.ts
split-mode.test.ts
split-mode.ts
split-tags-mode.test.ts
split-tags-mode.ts
tags-mode.test.ts
tags-mode.ts
tags-operations-mode.test.ts
tags-operations-mode.ts
tags-operations-split-mode.test.ts
tags-operations-split-mode.ts
target-tags-operations.ts
target-tags.ts
target.ts
... 1600 moreShowing a partial view of a very large repo.
FAQ
orval is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes orval. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.