> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nimbusbci.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Nimbus Quickstart

> Choose the Python or Julia SDK quickstart path and find the setup guide for your first BCI workflow.

Choose the SDK that matches your workflow. The Python SDK leads with `wrap` → `Personalizer` → `BrainState` (classical heads remain available). The Julia SDK uses NimbusSDK.jl and requires an API key for the commercial core.

<CardGroup cols={2}>
  <Card title="Python SDK Quickstart" icon="braces" href="/python-sdk/quickstart">
    Install `nimbus-bci`, fit a Personalizer (or classical head), and try streaming / active learning.
  </Card>

  <Card title="Julia SDK Quickstart" icon="code" href="/julia-sdk/quickstart">
    Install NimbusSDK.jl, authenticate with an API key, and run your first Julia inference workflow.
  </Card>
</CardGroup>

<Tip>
  Using a frozen neural encoder (EEGNet, BrainDecode, REVE, …)? Start with [Personalizer & Middleware](/personalizer/overview) instead of the classical classifier path.
</Tip>

## Before You Start

* Use **Python 3.11+** for the Python SDK or **Julia 1.9+** for the Julia SDK.
* Provide **embeddings** (`encode(X) → Z`) or **preprocessed EEG features**, not raw EEG.
* Start with [Personalizer & Middleware](/personalizer/overview) for the encoder contract, or [Preprocessing Requirements](/inference-configuration/preprocessing-requirements) for CSP / bandpower / ERP features.

<Tip>
  Nimbus focuses on Bayesian personalization and BCI workflow tooling. Filtering, artifact removal, epoching, and feature extraction (or a frozen trunk) happen before data reaches the head.
</Tip>

## Common Next Steps

<CardGroup cols={2}>
  <Card title="Personalizer & Middleware" icon="layers" href="/personalizer/overview">
    Encoder contract, BrainState, and decision presets.
  </Card>

  <Card title="Model Selection" icon="brain" href="/model-specification">
    Compare NimbusLDA, NimbusQDA, NimbusSoftmax, NimbusProbit, and NimbusSTS heads.
  </Card>

  <Card title="Feature Normalization" icon="arrow-up-down" href="/inference-configuration/feature-normalization">
    Normalize features consistently across sessions.
  </Card>

  <Card title="Streaming Inference" icon="activity" href="/inference-configuration/streaming-inference">
    Configure chunk-by-chunk low-latency inference.
  </Card>
</CardGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Do I need an API key for both SDKs?" icon="key">
    No. The Python SDK (`nimbus-bci`) runs locally and does not require an API key. The Julia SDK (`NimbusSDK.jl`) requires an API key to install and use NimbusSDKCore.
  </Accordion>

  <Accordion title="Which quickstart should I choose?" icon="arrow-right">
    Choose Python for Personalizer / BrainState app integration, sklearn/MNE, and local installation. Choose Julia for the NimbusSDK.jl workflow, RxInfer-backed models, or Julia model registry tooling.
  </Accordion>

  <Accordion title="What data format does Nimbus expect?" icon="database">
    Embeddings or extracted features — not raw EEG. Personalizer expects `(n_trials, n_features)` after encode (or with `encoder=None`). Classical classifier examples use the same shape. Julia batch data usually uses `(n_features, n_samples, n_trials)` inside `BCIData`.
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.