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.
| Language | Package | Registry | Requirements |
|---|---|---|---|
| Node.js / TypeScript | @verne-software/sdk | npm | Node.js 18+ |
| PHP | vernesoft/sdk | Packagist | PHP 8.2+ |
| Python | vernesoft | PyPI | Python 3.9+ |
| Rust | nautilus-rs (in code: nautilus_rs) | lib.rs | Rust 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,clockworkorpassepartout); 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
- Create an API key on the API Keys page and tick the APIs it may call. See API Keys.
- Skim All Endpoints for the whole API surface on one page.
- Follow Sign-in and users to register and sign in your first end user.
- Send events to your customers' endpoints with Webhooks.
- Run HTTP calls on a schedule with Scheduled jobs.
- Let your end users sign in with Telegram.