norbix 0.1.0
norbix: ^0.1.0 copied to clipboard
Workspace root for the Norbix Dart SDKs (norbix_core, norbix_api, norbix_hub).
Norbix Dart SDKs #
Two installable packages, one repo:
| Package | What it talks to | Default URL |
|---|---|---|
norbix_api |
Project-scoped Norbix API | https://api.norbix.ai |
norbix_hub |
Account-scoped Norbix Hub | https://hub.norbix.ai |
A small shared package, norbix_core, holds the
HTTP transport, config, and typed errors. Both SDKs depend on it.
Why two packages? #
The two Norbix services are deployed to different hosts and used in different contexts. Apps that only call the project API should not pull in account-management code, and vice versa.
You install only what you need:
dart pub add norbix_api # for app / runtime use
dart pub add norbix_hub # for tooling / admin / dashboards
Resource-style API (no namespace nesting) #
Resources are direct properties on the client:
final api = NorbixApi();
await api.users.getUsers();
await api.auth.authenticate();
await api.apiKeys.getApiKeys();
final hub = NorbixHub();
await hub.projects.getProjects();
await hub.database.getDatabaseSchemas();
await hub.emailNotifications.createEmailTemplate(body: {...});
There is no client.api.xxx or client.hub.xxx middle layer.
Configuration #
Defaults to the public *.norbix.ai hosts. Override the URL when you
self-host:
// Self-hosted at your company domain
final api = NorbixApi(
config: NorbixConfig(
baseUrl: 'https://api.norbix.isidos.lt',
apiKey: 'nbx_...',
),
);
// Local development
final dev = NorbixHub(
config: NorbixConfig(baseUrl: 'http://localhost:5000'),
);
Or load everything from environment variables — no boilerplate, no
String.fromEnvironment compile-time defines:
final api = NorbixApi.fromEnv(); // reads NORBIX_API_*
final hub = NorbixHub.fromEnv(); // reads NORBIX_HUB_*
See each package README for the full list of variables.
Repo layout #
norbix-dart/
├── packages/
│ ├── norbix_core/ # transport, config, errors
│ │ ├── lib/
│ │ │ ├── norbix_core.dart
│ │ │ └── src/
│ │ │ ├── config.dart
│ │ │ ├── errors.dart
│ │ │ ├── http_driver.dart
│ │ │ ├── resource.dart
│ │ │ └── transport.dart
│ │ └── test/
│ ├── norbix_api/ # resources for api.norbix.ai
│ │ ├── lib/
│ │ │ ├── norbix_api.dart
│ │ │ └── src/
│ │ │ ├── client.dart
│ │ │ └── resources/
│ │ │ ├── auth.dart
│ │ │ ├── api_keys.dart
│ │ │ └── users.dart
│ │ └── test/
│ └── norbix_hub/ # resources for hub.norbix.ai
│ ├── lib/
│ │ ├── norbix_hub.dart
│ │ └── src/
│ │ ├── client.dart
│ │ └── resources/ # accounts, projects, database, emails, ...
│ └── test/
├── tool/
│ └── generate_resources.py # codegen for resource modules
├── pubspec.yaml # Dart workspace root
└── Makefile # gen / lint / test
Development #
dart pub get # resolves all 3 packages via the workspace
make gen # regenerate resource modules
make test # run all package tests
make lint # dart analyze
Releases #
norbix_core, norbix_api, and norbix_hub are versioned together.
Conventional Commits + semantic-release drive the version bump:
feat:— minorfix:— patchfeat!/BREAKING CHANGE:— major
Channels: main → stable, next → -rc.*, beta → -beta.*.