Get Dbrij on iPhone, Android, Mac, Windows, Linux and the browser, and build it into your own product with every SDK and package: Node, Python, Go, Swift, Kotlin, Flutter and React Native SDKs, the dbrij command line, plugins and drop in scripts.
Load an environment's secrets into a Node app with a machine token and open them on your own server.
SDK · TypeScript · npm · Runs on Node 20+
npm install @dbrij/secretsimport { DbrijSecrets } from '@dbrij/secrets';// Reads DBRIJ_SECRETS_TOKEN and DBRIJ_SECRETS_ENV from the environment.const secrets = new DbrijSecrets({ environment: 'production' });await secrets.load();const databaseUrl = secrets.get('DATABASE_URL');secrets.injectEnv(); // or put every value into process.envLoad an environment's secrets into a Python app with a machine token and open them on your own server.
SDK · Python · PyPI · Runs on Python 3.9+
pip install dbrij-secretsfrom dbrij_secrets import DbrijSecrets# Reads DBRIJ_SECRETS_TOKEN and DBRIJ_SECRETS_ENV from the environment.secrets = DbrijSecrets(environment="production")secrets.load()database_url = secrets.get("DATABASE_URL")secrets.inject_env() # or put every value into os.environLoad an environment's secrets into a Go service with a machine token and open them on your own server.
SDK · Go · Go module · Runs on Go 1.24+
go get github.com/DbrijHQ/secrets-goimport dbrijsecrets "github.com/DbrijHQ/secrets-go"// Reads DBRIJ_SECRETS_TOKEN and DBRIJ_SECRETS_ENV from the environment.secrets, err := dbrijsecrets.New(dbrijsecrets.Options{Environment: "production"})if err != nil { log.Fatal(err)}if _, err := secrets.Load(ctx); err != nil { log.Fatal(err)}databaseURL, _ := secrets.Get("DATABASE_URL")A Kubernetes operator that keeps a Secret in your cluster in step with an environment in Dbrij Secrets.
Kubernetes operator · Go · Container image · Runs on Kubernetes, linux/amd64, linux/arm64
kubectl apply -f https://dbrij.com/secrets-operator/0.1.0/install.yamlapiVersion: secrets.dbrij.com/v1alpha1kind: DbrijSecretmetadata: name: api namespace: shopspec: project: shop environment: production target: name: api-secrets auth: tokenSecretRef: { name: dbrij-token, key: token } rolloutRestart: - { kind: Deployment, name: api }A small relay you run inside a private network so Secrets server access can reach its servers and databases without opening a port.
Service you run · Go · Container image · Runs on Docker, linux/amd64, linux/arm64
docker run -d --name dbrij-relay --restart unless-stopped \ -e DBRIJ_RELAY_TOKEN=dbsr_... \ -e DBRIJ_RELAY_API=https://api.dbrij.com/api/v1 \ -e DBRIJ_RELAY_ALLOW=10.0.0.0/8:22,10.0.0.0/8:5432 \ ghcr.io/dbrijhq/dbrij-secrets-relay:0.1.0# relay.env, readable only by you:# DBRIJ_RELAY_TOKEN=dbsr_...# DBRIJ_RELAY_ALLOW=10.0.0.0/8:22,10.0.0.0/8:5432docker run -d --name dbrij-relay --restart unless-stopped \ --env-file relay.env \ ghcr.io/dbrijhq/dbrij-secrets-relay:0.1.0The Ship core for JavaScript apps: feature flags, remote config, the kill switch and the update decision in one check in.
SDK · TypeScript · npm · Runs on React Native, Capacitor, Node, Any runtime with fetch
npm i @dbrij/shipimport { createShip } from '@dbrij/ship';import AsyncStorage from '@react-native-async-storage/async-storage'; // or any getItem/setItem pairconst ship = createShip({ appKey: 'shp_...', channel: 'production', binaryVersion: '1.2.0', platform: 'android', storage: AsyncStorage,});const { killSwitch } = await ship.checkIn();if (!killSwitch && ship.getFlag('new_checkout')) { // ...}const apiUrl = ship.getConfig('api_url', 'https://fallback.example.com');Code push for React Native and Expo: signed bundle updates, verified on the device, with a boot canary that reverts a bad bundle.
Plugin · TypeScript · npm · Runs on React Native 0.71+, iOS 13+, Android (updates on Android 13 and later), Expo development and store builds
npm i @dbrij/ship @dbrij/ship-react-nativecd ios && pod installimport { createShip } from '@dbrij/ship';import { notifyAppReady, syncShipUpdates } from '@dbrij/ship-react-native';import AsyncStorage from '@react-native-async-storage/async-storage';const ship = createShip({ appKey: 'shp_...', channel: 'production', binaryVersion: '1.2.0', platform: Platform.OS, storage: AsyncStorage });// In your root component, once the first screen mounts:useEffect(() => { notifyAppReady(ship) .then(() => syncShipUpdates(ship, { signPublicKeys: ['BASE64_KEY_FROM_DASHBOARD'] })) .catch(() => undefined);}, []);Live updates for Capacitor and Ionic apps: your built web assets as a signed bundle, verified on the device, with boot canary rollback.
Plugin · TypeScript · npm · Runs on Capacitor 5+, Ionic, iOS 13+, Android (updates on Android 13 and later)
npm i @dbrij/ship @dbrij/ship-capacitornpx cap syncimport { createShip } from '@dbrij/ship';import { notifyAppReady, syncShipUpdates } from '@dbrij/ship-capacitor';import { Preferences } from '@capacitor/preferences';const ship = createShip({ appKey: 'shp_...', channel: 'production', binaryVersion: '1.2.0', platform: 'capacitor', storage: { getItem: async (k) => (await Preferences.get({ key: k })).value, setItem: async (k, v) => Preferences.set({ key: k, value: v }), },});await notifyAppReady(ship);await syncShipUpdates(ship, { signPublicKeys: ['BASE64_KEY_FROM_DASHBOARD'] });Ship for Flutter and Dart: feature flags, remote config, a kill switch and store version policy, plus asset packs you change without a store release.
SDK · Dart · pub.dev · Runs on Dart 3+, Flutter on iOS and Android
flutter pub add dbrij_shipimport 'package:dbrij_ship/dbrij_ship.dart';final ship = Ship( appKey: 'shp_…', channel: 'production', binaryVersion: packageInfo.version, platform: Platform.isIOS ? 'ios' : 'android', storage: PrefsShipStorage(), // any getItem/setItem pair);try { await ship.checkIn();} catch (_) {}if (ship.getFlag('new_checkout')) { /* … */ }final banner = ship.getConfig('banner', '');Server driven Flutter screens for Ship: Remote Flutter Widgets blobs that ride in asset packs and roll out like any release.
Plugin · Dart · pub.dev · Runs on Flutter 3.16+
flutter pub add dbrij_ship_rfwimport 'package:dbrij_ship_rfw/dbrij_ship_rfw.dart';final ui = ShipRemoteUi(assets: assets, widgets: createMaterialWidgets());await assets.restore();await ui.loadAll(['checkout']);ui.publishShipValues(ship);ShipRemoteWidget( ui: ui, name: 'checkout', fallback: (context) => const LocalCheckoutScreen(), onEvent: (name, args) { if (name == 'checkout.begin') startCheckout(args); },)A support bubble for any website: one script tag opens your Resolve desk in a panel on the page.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://resolve.dbrij.com/resolve-widget.js" data-desk="rk_..." defer></script><script src="https://resolve.dbrij.com/resolve-widget.js" data-desk="rk_..." data-email="ada@example.com" data-user-hash="HMAC_FROM_YOUR_SERVER" defer></script>Resolve inside Capacitor, Ionic, Cordova and web apps: the support screen, signed sign in and the unread badge.
SDK · TypeScript · npm · Runs on Capacitor, Ionic, Cordova, Browsers, Any runtime with fetch
npm install @dbrij/resolveimport { openResolve } from '@dbrij/resolve';const screen = openResolve({ desk: 'rk_...', identity: { email, name, externalId, userHash }, // userHash from your server onClose: () => {},});// screen.close() from your own back buttonResolve for React Native and Expo: your support desk as a screen in your app, with signed sign in, screenshots on tickets and the unread badge.
SDK · TypeScript · npm · Runs on React Native 0.71+, Expo, React 18+
npm install @dbrij/resolve-react-native react-native-webviewimport AsyncStorage from '@react-native-async-storage/async-storage';import { ResolveSupport } from '@dbrij/resolve-react-native';export function HelpScreen({ navigation }) { return ( <ResolveSupport desk="rk_..." identity={{ email: user.email, name: user.name, externalId: user.id, userHash: user.resolveHash }} storage={AsyncStorage} onClose={() => navigation.goBack()} /> );}Resolve for iOS in Swift: your support desk as a screen in SwiftUI or UIKit, with signed sign in, screenshots on tickets and the unread badge.
SDK · Swift · Swift Package Manager · Runs on iOS 15+, Swift 5.9+
.package(url: "https://github.com/DbrijHQ/resolve-ios", from: "0.1.0")import DbrijResolvelet me = ResolveIdentity(email: user.email, externalId: user.id, userHash: user.resolveHash).sheet(isPresented: $showHelp) { ResolveSupportView(desk: "rk_...", identity: me) { showHelp = false }}Resolve for Android in Kotlin: your support desk as a screen in your app, with signed sign in, screenshots on tickets and the unread badge.
SDK · Kotlin · JitPack · Runs on Android 6+ (API 23)
// settings.gradle.kts, under dependencyResolutionManagement.repositoriesmaven { url = uri("https://jitpack.io") }// app/build.gradle.ktsimplementation("com.github.DbrijHQ:resolve-android:0.1.0")import com.dbrij.resolve.ResolveIdentityimport com.dbrij.resolve.ResolveSupportResolveSupport.open( context, desk = "rk_...", identity = ResolveIdentity(email = user.email, externalId = user.id, userHash = user.resolveHash),)Resolve for Flutter: your support desk as a screen in your app, with signed sign in, screenshots on tickets and the unread badge.
SDK · Dart · pub.dev · Runs on Flutter 3.16+, iOS, Android
flutter pub add dbrij_resolvefinal resolve = ResolveClient(desk: 'rk_...', storage: MyStorage());Navigator.of(context).push(MaterialPageRoute( builder: (ctx) => Scaffold( body: SafeArea( child: ResolveSupport( desk: 'rk_...', client: resolve, identity: ResolveIdentity(email: user.email, externalId: user.id, userHash: user.resolveHash), onClose: () => Navigator.of(ctx).pop(), ), ), ),));The Glass tracker for websites: page views, clicks, custom events and session replay from one script tag.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://glass.dbrij.com/glass.js" data-site="gk_your_site_key" defer></script><script src="https://glass.dbrij.com/glass.js" data-site="gk_your_site_key" defer></script><script> // once the tag has loaded glass.track('signup', { plan: 'pro' }); glass.identify('user_1234', { plan: 'pro' });</script>Glass analytics for React Native: sessions, screens, taps and events in the same dashboard as your website.
SDK · TypeScript · npm · Runs on React Native, Any runtime with fetch
npm install @dbrij/glass-nativeimport AsyncStorage from '@react-native-async-storage/async-storage';import { AppState, Dimensions, Platform } from 'react-native';import { createGlass } from '@dbrij/glass-native';export const glass = createGlass({ siteKey: 'gk_your_site_key', platform: { os: Platform.OS === 'ios' ? 'ios' : 'android', device: 'mobile', appVersion: '1.4.2' }, storage: AsyncStorage, screen: Dimensions.get('screen'),});AppState.addEventListener('change', (state) => { if (state === 'active') glass.onForeground(); else if (state === 'background') glass.onBackground();});glass.track('signup', { plan: 'pro' });The Glass tracker for native iOS apps, as one Swift file you drop into your project.
SDK · Swift · Served by Dbrij · Runs on iOS, Other Swift platforms with Foundation
curl -O https://dbrij.com/glass-tracker.swiftlet glass = GlassTracker(siteKey: "gk_your_site_key", appVersion: "1.4.2")glass.screen("Checkout")glass.track("signup", props: ["plan": "pro"])glass.identify("user_1234", traits: ["plan": "pro"])glass.tap(xPct: 48, yPct: 88, label: "buy-button")The Glass tracker for native Android apps, as one Kotlin file you drop into your project.
SDK · Kotlin · Served by Dbrij · Runs on Android
curl -O https://dbrij.com/GlassTracker.ktval glass = GlassTracker(application, GlassTracker.Config( siteKey = "gk_your_site_key", appVersion = "1.4.2",))glass.screen("Checkout")glass.track("signup", mapOf("plan" to "pro"))glass.identify("user_1234", mapOf("plan" to "pro"))glass.tap(48.0, 88.0, "buy-button")The Glass tracker for Flutter apps, as one Dart file you drop into lib.
SDK · Dart · Served by Dbrij · Runs on Flutter, Dart with dart:io
curl -O https://dbrij.com/glass_tracker.dartfinal glass = GlassTracker(GlassConfig( siteKey: 'gk_your_site_key', platformOs: Platform.isIOS ? 'ios' : 'android', appVersion: '1.4.2',));glass.screen('Checkout');glass.track('signup', {'plan': 'pro'});glass.identify('user_1234', {'plan': 'pro'});Dbrij Search in the browser: a typed client, click and conversion tracking, a headless controller, ready made widgets and React components.
SDK · TypeScript · npm · Runs on Browsers, React 17+ for the components
npm install @dbrij/searchimport { SearchClient } from '@dbrij/search';const client = new SearchClient({ key: 'dbrij_live_your_search_key' });const results = await client.search('products', { q: 'running shoes', facets: ['brand'] });client.insights.clickedAfterSearch({ index: 'products', queryId: results.queryId, objectIds: ['sku-1'], positions: [3] });Search on any website with one script tag: box, refinements, results and pages, or a panel that opens from your own search box.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://search.dbrij.com/search.js" async data-key="dbrij_live_your_search_key" data-index="products" data-target="#search"></script><div id="search"></div><script src="https://search.dbrij.com/search.js" async data-key="dbrij_live_your_search_key" data-index="products" data-target="#search" data-facets="brand,category"></script>Buckets, uploads, delivery links and image transformations from Node or the browser.
SDK · TypeScript · npm · Runs on Node 18+, Browsers
npm install @dbrij/storageimport { DbrijStorage, transform } from '@dbrij/storage';const storage = new DbrijStorage({ keyId: process.env.DBRIJ_KEY_ID!, secret: process.env.DBRIJ_KEY_SECRET! });const bucket = await storage.buckets.create('my-assets');await storage.objects.upload(bucket.id, 'images/logo.png', bytes, { contentType: 'image/png' });const link = await storage.delivery.url(bucket.id, 'images/logo.png', { transform: transform({ width: 800, format: 'auto' }) });An upload window for any web page: people pick files and they land in your bucket through an upload preset, with no key in the page.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://storage.dbrij.com/storage-widget.js"></script><script src="https://storage.dbrij.com/storage-widget.js"></script><script> DbrijStorage.attach(document.querySelector('#upload'), { preset: 'dbup_…', onUploaded: (file) => console.log(file.deliveryUrl), });</script>Put a Dbrij form on any website with one script tag, as a button that opens it or inline in the page.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://app.dbrij.com/forms-embed.js" data-form="job-application" data-label="Apply now" async></script><script src="https://app.dbrij.com/forms-embed.js" data-form="job-application" data-mode="inline" data-height="720" async></script>A Report a bug button for your own web app that files each report, with the errors the page hit, into your company's bug triage.
Script for your site · JavaScript · Served by Dbrij · Runs on Browsers
<script src="https://dbrij.com/proof-capture.js" data-key="pc_..." async></script><script src="https://dbrij.com/proof-capture.js" data-key="pc_..." data-build="2.4.1" data-button="off" async></script><script> document.querySelector('#report').onclick = () => window.dbrijBugs.open();</script>The Dbrij command line: deploy to Hosting from any directory, run your app with its Dbrij Secrets, and cut Ship releases from your CI.
Command line · TypeScript · npm · Runs on Node 20+
npm i -g dbrijnpm i -g dbrijdbrij login # confirm the code in your browserdbrij link # point this directory at a servicedbrij deploy # ship itA single file JavaScript client for the Developer API: meetings, calls, chat, media uploads and realtime tokens.
SDK · JavaScript · Served by Dbrij · Runs on Node 18+, Browsers
curl -O https://dbrij.com/dbrij-sdk.jsimport { DbrijClient } from './dbrij-sdk.js';const dbrij = new DbrijClient({ apiKey: process.env.DBRIJ_API_KEY });const meeting = await dbrij.createMeeting({ title: 'Demo', host: { externalUserId: 'user_1' } });const { url, token } = await dbrij.mintToken(meeting.id, { externalUserId: 'user_2' });Dbrij is Nigeria’s company operating system: the first Nigerian built platform to put team chat, video meetings, email, HR, tax compliant payroll, customer support, marketing, analytics and cloud hosting in one product on one subscription.