> For the complete documentation index, see [llms.txt](https://docs.codemash.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.codemash.io/sdks-and-cli/install.md).

# Install a Norbix SDK

Norbix ships one SDK per language. Every SDK works the same way: you install the package, set your credentials **once** as environment variables, and then create a client with no arguments — the client reads the environment for you.

That is why the code examples across these docs use `new Norbix()`, `NorbixHub()`, and the like with empty parentheses. You do not paste your API key into every call.

{% hint style="info" %}
Prefer the terminal? The [Norbix CLI](/sdks-and-cli/cli.md) drives the same API — every SDK reference page has a CLI tab.
{% endhint %}

## Pick your language

| SDK                         | Install                                        | Package                                                                  | Source                                                   |
| --------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------- |
| **JavaScript / TypeScript** | `npm i @norbix.ai/ts`                          | [npm](https://www.npmjs.com/package/@norbix.ai/ts)                       | [github](https://github.com/norbix-code/sdk-ts)          |
| **Python**                  | `pip install norbix`                           | [PyPI](https://pypi.org/project/norbix/)                                 | [github](https://github.com/norbix-code/sdk-python)      |
| **.NET**                    | `dotnet add package Norbix.Api` · `Norbix.Hub` | [NuGet](https://www.nuget.org/packages/Norbix.Hub)                       | [github](https://github.com/norbix-code/sdk-net)         |
| **Go**                      | `go get github.com/norbix-code/sdk-go`         | [pkg.go.dev](https://pkg.go.dev/github.com/norbix-code/sdk-go)           | [github](https://github.com/norbix-code/sdk-go)          |
| **Dart / Flutter**          | `dart pub add norbix`                          | [pub.dev](https://pub.dev/packages/norbix)                               | [github](https://github.com/norbix-code/sdk-dart)        |
| **Swift**                   | Swift Package Manager                          | [github](https://github.com/norbix-code/sdk-swift)                       | [github](https://github.com/norbix-code/sdk-swift)       |
| **Kotlin**                  | `dev.norbix:norbix` (Maven)                    | [Maven Central](https://central.sonatype.com/artifact/dev.norbix/norbix) | [github](https://github.com/norbix-code/sdk-kotlin)      |
| **React / Redux**           | `npm i @norbix/react-redux`                    | [npm](https://www.npmjs.com/package/@norbix/react-redux)                 | [github](https://github.com/norbix-code/sdk-react-redux) |

## Set your credentials

Set these environment variables once (for example in a `.env` file or your shell). The client picks them up automatically:

| Variable              | What it is                              | Needed for                        |
| --------------------- | --------------------------------------- | --------------------------------- |
| `NORBIX_API_KEY`      | Your project API key (server-to-server) | All server-side calls             |
| `NORBIX_PROJECT_ID`   | The project the call runs against       | All calls                         |
| `NORBIX_ACCOUNT_ID`   | Your account                            | Account-scoped **Hub** calls only |
| `NORBIX_BEARER_TOKEN` | A logged-in user's token                | Calls made **as an end user**     |
| `NORBIX_REGION`       | Your data region (optional)             | Non-default regions               |

With those in place, the client needs nothing:

{% tabs %}
{% tab title="JavaScript / TypeScript" %}

```ts
import { Norbix } from '@norbix.ai/ts';

const norbix = new Norbix(); // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title=".NET" %}

```csharp
using Norbix.Sdk;

using var client = new NorbixClient(); // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title="Python" %}

```python
from norbix_python import NorbixHub

norbix = NorbixHub()  # reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title="Go" %}

```go
c, _ := norbix.New(norbix.Options{}) // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title="Dart / Flutter" %}

```dart
import 'package:norbix/norbix_hub.dart';

final hub = NorbixHub(); // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title="Swift" %}

```swift
import NorbixSwift

let client = Norbix() // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import dev.norbix.sdk.hub.NorbixHub

val hub = NorbixHub() // reads NORBIX_API_KEY, NORBIX_PROJECT_ID, ...
```

{% endtab %}
{% endtabs %}

## Prefer to pass values in code?

You do not have to use environment variables. Every client also accepts the same values in its constructor — useful for multi-project apps or tests:

{% tabs %}
{% tab title="JavaScript / TypeScript" %}

```ts
const norbix = new Norbix({ apiKey: '<api_key>', projectId: 'pr_09YhICNV067WkJZ3FphoXg' });
```

{% endtab %}

{% tab title=".NET" %}

```csharp
using var client = new NorbixClient(new NorbixClientOptions
{
    ApiKey = "<api_key>",
    ProjectId = "pr_09YhICNV067WkJZ3FphoXg",
});
```

{% endtab %}

{% tab title="Python" %}

```python
norbix = NorbixHub(api_key="<api_key>", project_id="pr_09YhICNV067WkJZ3FphoXg", account_id="acc_7R72LiFNr0gzNfCd1tyx52")
```

{% endtab %}

{% tab title="Go" %}

```go
c, _ := norbix.New(norbix.Options{ApiKey: "<api_key>", ProjectID: "pr_09YhICNV067WkJZ3FphoXg"})
```

{% endtab %}

{% tab title="Dart / Flutter" %}

```dart
final hub = NorbixHub(apiKey: '<api_key>', projectId: 'pr_09YhICNV067WkJZ3FphoXg');
```

{% endtab %}

{% tab title="Swift" %}

```swift
let client = Norbix(apiKey: "<api_key>", projectId: "pr_09YhICNV067WkJZ3FphoXg")
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
val hub = NorbixHub(apiKey = "<api_key>", projectId = "pr_09YhICNV067WkJZ3FphoXg", accountId = "acc_7R72LiFNr0gzNfCd1tyx52")
```

{% endtab %}
{% endtabs %}

Anything you do not set in code falls back to the environment variables above.
