# Heyapi > url: /openapi-ts/plugins/adonis.md --- # Source: https://heyapi.dev/openapi-ts/plugins/adonis.md --- url: /openapi-ts/plugins/adonis.md description: AdonisJS plugin for Hey API. Compatible with all our features. --- # AdonisJS soon ### About [AdonisJS](https://adonisjs.com) is a TypeScript-first web framework for building web apps and API servers. It comes with support for testing, modern tooling, an ecosystem of official packages, and more. ## Sponsors Hey API is sponsor-funded. If you rely on Hey API in production, consider becoming a [sponsor](https://github.com/sponsors/hey-api) to accelerate the roadmap. --- # Source: https://heyapi.dev/openapi-ts/plugins/ajv.md --- url: /openapi-ts/plugins/ajv.md description: Ajv plugin for Hey API. Compatible with all our features. --- # Ajv soon ### About [Ajv](https://ajv.js.org) is the fastest JSON validator for Node.js and browser. ## Sponsors Hey API is sponsor-funded. If you rely on Hey API in production, consider becoming a [sponsor](https://github.com/sponsors/hey-api) to accelerate the roadmap. --- # Source: https://heyapi.dev/openapi-ts/plugins/angular.md # Source: https://heyapi.dev/openapi-ts/clients/angular.md --- url: /openapi-ts/clients/angular.md description: >- Generate a type-safe Angular v20 client from OpenAPI with the Angular client for openapi-ts. Fully compatible with validators, transformers, and all core features. --- ::: warning Angular client is currently in beta. The interface might change before it becomes stable. We encourage you to leave feedback on [GitHub](https://github.com/hey-api/openapi-ts/issues). ::: ### About [Angular](https://angular.dev/) is a web framework that empowers developers to build fast, reliable applications. The Angular client for Hey API generates a type-safe client from your OpenAPI spec, fully compatible with validators, transformers, and all core features. ### Collaborators ## Features * Angular v20 support * seamless integration with `@hey-api/openapi-ts` ecosystem * type-safe response data and errors * support for [`@Injectable()`](https://angular.dev/api/core/Injectable) decorators * response data validation and transformation * access to the original request and response * granular request and response customization options * minimal learning curve thanks to extending the underlying technology * support bundling inside the generated output ## Installation In your [configuration](/openapi-ts/get-started), add `@hey-api/client-angular` to your plugins and you'll be ready to generate client artifacts. :tada: ::: code-group ```js [config] export default { input: 'hey-api/backend', // sign up at app.heyapi.dev output: 'src/client', plugins: ['@hey-api/client-angular'], // [!code ++] }; ``` ```sh [cli] npx @hey-api/openapi-ts \ -i hey-api/backend \ -o src/client \ -c @hey-api/client-angular # [!code ++] ``` ::: ### Providers You can use the Angular client in your application by adding `provideHeyApiClient` to your providers. ```ts import { provideHeyApiClient, client } from './client/client.gen'; export const appConfig: ApplicationConfig = { providers: [ provideHttpClient(withFetch()), provideHeyApiClient(client), // [!code ++] ], }; ``` ## Configuration The Angular client is built as a thin wrapper on top of Angular, extending its functionality to work with Hey API. If you're already familiar with Angular, configuring your client will feel like working directly with Angular. When we installed the client above, it created a [`client.gen.ts`](/openapi-ts/output#client) file. You will most likely want to configure the exported `client` instance. There are two ways to do that. ### `setConfig()` This is the simpler approach. You can call the `setConfig()` method at the beginning of your application or anytime you need to update the client configuration. You can pass any `HttpRequest` configuration option to `setConfig()`, and even your own [`httpClient`](#custom-instance) implementation. ```js import { client } from 'client/client.gen'; client.setConfig({ baseUrl: 'https://example.com', }); ``` The disadvantage of this approach is that your code may call the `client` instance before it's configured for the first time. Depending on your use case, you might need to use the second approach. ### Runtime API Since `client.gen.ts` is a generated file, we can't directly modify it. Instead, we can tell our configuration to use a custom file implementing the Runtime API. We do that by specifying the `runtimeConfigPath` option. ```js export default { input: 'hey-api/backend', // sign up at app.heyapi.dev output: 'src/client', plugins: [ { name: '@hey-api/client-angular', runtimeConfigPath: './src/hey-api.ts', // [!code ++] }, ], }; ``` In our custom file, we need to export a `createClientConfig()` method. This function is a simple wrapper allowing us to override configuration values. ::: code-group ```ts [hey-api.ts] import type { CreateClientConfig } from './client/client.gen'; export const createClientConfig: CreateClientConfig = (config) => ({ ...config, baseUrl: 'https://example.com', }); ``` ::: With this approach, `client.gen.ts` will call `createClientConfig()` before initializing the `client` instance. If needed, you can still use `setConfig()` to update the client configuration later. ### `createClient()` You can also create your own client instance. You can use it to manually send requests or point it to a different domain. ```js import { createClient } from './client/client'; const myClient = createClient({ baseUrl: 'https://example.com', }); ``` You can also pass this instance to any SDK function through the `client` option. This will override the default instance from `client.gen.ts`. ```js const response = await getFoo({ client: myClient, }); ``` ### SDKs Alternatively, you can pass the client configuration options to each SDK function. This is useful if you don't want to create a client instance for one-off use cases. ```js const response = await getFoo({ baseUrl: 'https://example.com', // <-- override default configuration }); ``` ## `@Injectable` If you prefer to use the [`@Injectable()`](https://angular.dev/api/core/Injectable) decorators, set the `asClass` option in your SDK plugin to `true`. ::: code-group ```ts [example] @Injectable({ providedIn: 'root' }) export class FooService { // class methods } ``` ```js [config] export default { input: 'hey-api/backend', // sign up at app.heyapi.dev output: 'src/client', plugins: [ '@hey-api/client-angular', { name: '@hey-api/sdk', asClass: true, // [!code ++] }, ], }; ``` ::: ## Interceptors ::: warning This section is under construction. We appreciate your patience. ::: ## Auth ::: warning This section is under construction. We appreciate your patience. ::: ## Build URL If you need to access the compiled URL, you can use the `buildUrl()` method. It's loosely typed by default to accept almost any value; in practice, you will want to pass a type hint. ```ts type FooData = { path: { fooId: number; }; query?: { bar?: string; }; url: '/foo/{fooId}'; }; const url = client.buildUrl({ path: { fooId: 1, }, query: { bar: 'baz', }, url: '/foo/{fooId}', }); console.log(url); // prints '/foo/1?bar=baz' ``` ## Custom Instance You can provide a custom `httpClient` instance. This is useful if you need to extend the default instance with extra functionality, or replace it altogether. ```js import { client } from 'client/client.gen'; client.setConfig({ httpClient: inject(CustomHttpClient), }); ``` You can use any of the approaches mentioned in [Configuration](#configuration), depending on how granular you want your custom instance to be. ## Plugins You might be also interested in the [Angular](/openapi-ts/plugins/angular) plugin. ## API You can view the complete list of options in the [UserConfig](https://github.com/hey-api/openapi-ts/blob/main/packages/openapi-ts/src/plugins/@hey-api/client-angular/types.d.ts) interface. ## Examples You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). ## Sponsors Hey API is sponsor-funded. If you rely on Hey API in production, consider becoming a [sponsor](https://github.com/sponsors/hey-api) to accelerate the roadmap. --- # Source: https://heyapi.dev/openapi-ts/plugins/arktype.md --- url: /openapi-ts/plugins/arktype.md description: Arktype plugin for Hey API. Compatible with all our features. --- # Arktype soon ### About [Arktype](https://arktype.io) is a TypeScript's 1:1 validator, optimized from editor to runtime. ## Sponsors Hey API is sponsor-funded. If you rely on Hey API in production, consider becoming a [sponsor](https://github.com/sponsors/hey-api) to accelerate the roadmap. --- # Source: https://heyapi.dev/openapi-ts/clients/axios.md --- url: /openapi-ts/clients/axios.md description: >- Generate a type-safe Axios v1 client from OpenAPI with the Axios client for openapi-ts. Fully compatible with validators, transformers, and all core features. --- ### About [Axios](https://axios-http.com) is a simple promise based HTTP client for the browser and Node.js. Axios provides a simple to use library in a small package with a very extensible interface. The Axios client for Hey API generates a type-safe client from your OpenAPI spec, fully compatible with validators, transformers, and all core features. ### Demo \