Installing the Nautilus SDKs

Verne Software ships official server-side SDKs for Nautilus. Each SDK gives you an idiomatic client for Gate (sign-in and users), Relay (webhooks), Clockwork (scheduled jobs) and Passepartout (Telegram sign-in) behind a single entry point, and each is distributed through the standard package registry of its ecosystem. The current version of all four is 1.4.1.

Server-side only. API keys carry full access to the APIs they were created for and must never be used in browser, client-side, or WASM contexts.

LanguagePackageRegistryRequirements
Node.js / TypeScript@verne-software/sdknpmNode.js 18+
PHPvernesoft/sdkPackagistPHP 8.2+
PythonvernesoftPyPIPython 3.9+
Rustnautilus-rs (in code: nautilus_rs)lib.rsRust 1.75+

One key for everything

You need one API key. Create it on the API Keys page and tick the APIs it may call (its scopes: gate, relay, clockwork, passepartout). A key looks like vrn_9f8a7… and does not name an API. Keep it in the environment of your server:

export VERNE_API_KEY=vrn_9f8a7...

Each SDK takes it once and sends it as Authorization: Bearer … to every service. A call to an API the key has no scope for is refused with 403, code forbidden, and a message naming the API; the SDKs do not check scopes themselves.

  • To give one service a different key, pass it for that service (gate, relay, clockwork or passepartout); it overrides the shared key for that service only.
  • There is no test or live mode and no sandbox: every key acts on your real data. Use a separate key for each environment (development, staging, production).
  • Keys made before scopes existed (vrn_gate_…, vrn_relay_…, …) keep working, for the one API they name.

See API Keys for the whole picture.


Node.js / TypeScript

Requires Node.js 18 or later. Ships with first-class TypeScript types and both ESM and CommonJS builds.

Install from npm with your preferred package manager:

npm install @verne-software/sdk
# or
yarn add @verne-software/sdk
# or
pnpm add @verne-software/sdk

Verify the installation:

import { Verne } from '@verne-software/sdk';

const verne = new Verne({ apiKey: process.env.VERNE_API_KEY });

await verne.gate.organizations.create({ name: 'Acme' });
await verne.relay.messages.send({ event_type: 'user.created', payload: { id: 'usr_123' } });

PHP

Requires PHP 8.2 or later (uses Guzzle 7 under the hood). To verify Gate's signed tokens offline you also need ext-openssl.

Install from Packagist via Composer:

composer require vernesoft/sdk

On Laravel 13, add -W: composer require vernesoft/sdk -W. A Laravel 13 app created today installs Guzzle 8, SDK 1.4.1 requires Guzzle 7, and Laravel 13 accepts either; without -W Composer refuses the install, with it Composer moves Guzzle to 7. Any other project that already has Guzzle 8 is in the same position. See Add sign-in to a Laravel app with Nautilus.

The SDK follows PSR-4 autoloading under the Vernesoft\ namespace:

use Vernesoft\Verne;

$verne = new Verne(apiKey: getenv('VERNE_API_KEY'));

$verne->gate()->organizations()->create(name: 'Acme');
$verne->relay()->messages()->send(eventType: 'user.created', payload: ['id' => 'usr_123']);

Pass apiKey: by name. It is the constructor's last parameter, so that code written against 1.3 with positional per-service keys keeps working.


Python

Requires Python 3.9 or later (built on httpx, with sync and async support).

Install from PyPI:

pip install vernesoft

Or with your project's dependency manager:

poetry add vernesoft
# or
uv add vernesoft

To verify Gate's signed tokens offline, install the extra: pip install "vernesoft[jwt]".

Verify the installation:

import os
from vernesoft import Verne

verne = Verne(api_key=os.environ["VERNE_API_KEY"])

verne.gate.organizations.create(name="Acme")
verne.relay.messages.send(event_type="user.created", payload={"id": "usr_123"})

Rust

Requires Rust 1.75 or later. The crate is async (Tokio) and uses rustls — no OpenSSL system dependency. It is published as nautilus-rs and imported as nautilus_rs.

Install from crates.io:

cargo add nautilus-rs

Or add it to Cargo.toml manually:

[dependencies]
nautilus-rs = "1.4"
tokio = { version = "1", features = ["full"] }

# to verify Gate's signed tokens (JWT) offline:
# nautilus-rs = { version = "1.4", features = ["jwt"] }

Verify the installation:

use nautilus_rs::Verne;

#[tokio::main]
async fn main() -> Result<(), nautilus_rs::Error> {
    let verne = Verne::builder()
        .api_key(std::env::var("VERNE_API_KEY").unwrap())
        .build()?;

    // verne.gate()?, verne.relay()?, verne.clockwork()?, verne.passepartout()?
    Ok(())
}

API docs for the crate are published on docs.rs.


Next Steps