git » sdk » commit cded225

s/snikket/borogove/

author Stephen Paul Weber
2025-09-29 16:09:50 UTC
committer Stephen Paul Weber
2025-09-29 16:09:50 UTC
parent 85d8cb3c6bc51fefd072470c0500120c50c6aeb9

s/snikket/borogove/

.builds/alpine.yml +5 -5
.github/workflows/build.yml +4 -4
.gitignore +6 -6
HaxeCBridge.hx +8 -8
Makefile +41 -41
README.md +4 -4
{snikket => borogove}/AttachmentSource.cpp.hx +2 -2
{snikket => borogove}/AttachmentSource.js.hx +1 -1
{snikket => borogove}/Autolink.hx +2 -2
{snikket => borogove}/Caps.hx +4 -4
{snikket => borogove}/Chat.hx +49 -49
{snikket => borogove}/ChatMessage.hx +26 -26
{snikket => borogove}/ChatMessageBuilder.hx +22 -22
{snikket => borogove}/Client.hx +49 -49
{snikket => borogove}/Color.hx +1 -1
{snikket => borogove}/Config.hx +2 -2
{snikket => borogove}/Date.hx +1 -1
{snikket => borogove}/EmojiUtil.hx +1 -1
{snikket => borogove}/EncryptedMessage.hx +1 -1
{snikket => borogove}/EncryptionInfo.hx +2 -2
{snikket => borogove}/EncryptionPolicy.hx +1 -1
{snikket => borogove}/EventEmitter.hx +3 -3
{snikket => borogove}/EventHandler.hx +1 -1
{snikket => borogove}/FSM.hx +1 -1
{snikket => borogove}/GenericStream.hx +3 -3
{snikket => borogove}/Hash.hx +8 -8
{snikket => borogove}/ID.hx +1 -1
{snikket => borogove}/Identicon.hx +2 -2
{snikket => borogove}/JID.hx +1 -1
{snikket => borogove}/JsonPrinter.hx +1 -1
{snikket => borogove}/Map.js.hx +1 -1
{snikket => borogove}/Message.hx +2 -2
{snikket => borogove}/MessageSync.hx +7 -7
{snikket => borogove}/ModerationAction.hx +1 -1
{snikket => borogove}/NS.hx +1 -1
{snikket => borogove}/Notification.hx +7 -7
{snikket => borogove}/OMEMO.hx +6 -6
{snikket => borogove}/Participant.hx +2 -2
{snikket => borogove}/PeerConnection.js.hx +0 -0
{snikket => borogove}/Persistence.hx +6 -6
{snikket => borogove}/Presence.hx +1 -1
{snikket => borogove}/PubsubEvent.hx +1 -1
{snikket => borogove}/Push.hx +6 -6
{snikket => borogove}/Reaction.hx +5 -5
{snikket => borogove}/ReactionUpdate.hx +4 -4
{snikket => borogove}/ResultSet.hx +1 -1
{snikket => borogove}/SignalProtocol.hx +1 -1
{snikket => borogove}/Stanza.hx +5 -5
borogove/Stream.cpp.hx +5 -0
borogove/Stream.js.hx +5 -0
{snikket => borogove}/StringUtil.hx +1 -1
{snikket => borogove}/Util.hx +1 -1
{snikket => borogove}/Version.hx +2 -2
{snikket => borogove}/XEP0393.hx +3 -3
{snikket/jingle => borogove/calls}/Group.hx +1 -1
{snikket/jingle => borogove/calls}/IceServer.hx +1 -1
{snikket/jingle => borogove/calls}/PeerConnection.cpp.hx +13 -13
{snikket/jingle => borogove/calls}/PeerConnection.js.hx +1 -1
{snikket/jingle => borogove/calls}/Session.hx +21 -21
{snikket/jingle => borogove/calls}/SessionDescription.hx +1 -1
{snikket/jingle => borogove/calls}/Stream.cpp.hx +0 -0
{snikket => borogove}/persistence/Custom.hx +5 -5
{snikket => borogove}/persistence/Dummy.hx +6 -6
{snikket => borogove}/persistence/IDB.js +20 -20
{snikket => borogove}/persistence/KeyValueStore.hx +1 -1
{snikket => borogove}/persistence/MediaStore.hx +2 -2
{snikket => borogove}/persistence/MediaStoreCache.js +0 -0
{snikket => borogove}/persistence/MediaStoreFS.hx +2 -2
{snikket => borogove}/persistence/Sqlite.hx +8 -8
{snikket => borogove}/persistence/SqliteDriver.hx +1 -1
{snikket => borogove}/persistence/SqliteDriver.js.hx +1 -1
{snikket => borogove}/persistence/sqlite-worker1.mjs +0 -0
{snikket => borogove}/queries/BlocklistGet.hx +6 -6
{snikket => borogove}/queries/BoB.hx +1 -1
{snikket => borogove}/queries/DiscoInfoGet.hx +7 -7
{snikket => borogove}/queries/DiscoItemsGet.hx +7 -7
{snikket => borogove}/queries/ExtDiscoGet.hx +7 -7
{snikket => borogove}/queries/GenericQuery.hx +2 -2
{snikket => borogove}/queries/HttpUploadSlot.hx +7 -7
{snikket => borogove}/queries/JabberIqGatewayGet.hx +7 -7
{snikket => borogove}/queries/MAMQuery.hx +6 -6
{snikket => borogove}/queries/PubsubGet.hx +6 -6
{snikket => borogove}/queries/PubsubPublish.hx +6 -6
{snikket => borogove}/queries/Push2Disable.hx +4 -4
{snikket => borogove}/queries/Push2Enable.hx +4 -4
{snikket => borogove}/queries/RosterGet.hx +6 -6
{snikket => borogove}/queries/VcardTempGet.hx +6 -6
{snikket => borogove}/streams/XmppJsStream.hx +4 -4
{snikket => borogove}/streams/XmppStropheStream.hx +6 -6
browserjs.hxml +5 -5
build-misc/Containerfile.image +7 -7
cpp.hxml +6 -6
nodejs.hxml +5 -5
npm/index.ts +26 -26
npm/package.json +2 -2
snikket/Stream.cpp.hx +0 -5
snikket/Stream.js.hx +0 -5
test/TestChatMessageBuilder.hx +1 -1
test/TestSessionDescription.hx +2 -2
test/TestStanza.hx +1 -1

diff --git a/.builds/alpine.yml b/.builds/alpine.yml
index fb8adf6..2b45dd6 100644
--- a/.builds/alpine.yml
+++ b/.builds/alpine.yml
@@ -7,12 +7,12 @@ packages:
 - libc++-dev
 - musl-dev
 sources:
-- https://git.sr.ht/~singpolyma/snikket-sdk
+- https://borogove.dev/src/r/sdk
 artifacts:
-- snikket-sdk/libsnikket.so
+- sdk/libborogove.so
 tasks:
 - haxelib: |
-    cd snikket-sdk
+    cd sdk
     haxelib setup .
     haxelib git jsImport https://github.com/back2dos/jsImport
     haxelib install datetime
@@ -31,5 +31,5 @@ tasks:
     cd -
     patch -p1 -i xlocale.patch
 - make: |
-    cd snikket-sdk
-    make libsnikket.so
+    cd sdk
+    make libborogove.so
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 04aeda5..8107db2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -65,13 +65,13 @@ jobs:
     - name: Build
       run: make
 
-    - name: libsnikket Artifact
+    - name: libborogove Artifact
       uses: actions/upload-artifact@v4
       with:
-        name: libsnikket
+        name: libborogove
         path: |
-          libsnikket.so
-          cpp/snikket.h
+          libborogove.so
+          cpp/borogove.h
 
     - name: NPM Tarball
       run: tar -cjf npm.tar.gz npm/
diff --git a/.gitignore b/.gitignore
index 3f28a3a..d163a82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,11 +3,11 @@ npm/*.d.ts
 npm/MediaStoreCache.js
 npm/sqlite-worker1.mjs
 npm/IDB.js
-npm/snikket.js
-npm/snikket-enums.ts
-npm/snikket-enums.js
-npm/snikket-browser.js
-npm/snikket-browser-enums.ts
-npm/snikket-browser-enums.js
+npm/borogove.js
+npm/borogove-enums.ts
+npm/borogove-enums.js
+npm/borogove-browser.js
+npm/borogove-browser-enums.ts
+npm/borogove-browser-enums.js
 npm/index.js
 node_modules
diff --git a/HaxeCBridge.hx b/HaxeCBridge.hx
index 94dbcbe..5a8b2a4 100644
--- a/HaxeCBridge.hx
+++ b/HaxeCBridge.hx
@@ -622,11 +622,11 @@ class HaxeCBridge {
 
 		return code('
 			/**
-			 * \\file snikket.h the Snikket SDK for C
+			 * \\file borogove.h the Borogove SDK for C
 			 *
 			 * Everything returned from an SDK procedure or passed to a function
 			 * pointer, both strings and opaque types, must be passed to
-			 * snikket_release when you are done with it.
+			 * borogove_release when you are done with it.
 			 */
 
 			#ifndef __${hx.strings.Strings.toUpperUnderscore(namespace)}_H
@@ -650,7 +650,7 @@ class HaxeCBridge {
 				');
 			} else '')
 
-			+ '#endif\n\ntypedef void (*snikket_panic_callback) (const char *info);\n\n'
+			+ '#endif\n\ntypedef void (*borogove_panic_callback) (const char *info);\n\n'
 			+ (if (ctx.supportTypeDeclarations.length > 0) ctx.supportTypeDeclarations.map(d -> CPrinter.printDeclaration(d, true)).join(';\n\n') + ';\n\n'; else '')
 			+ (if (ctx.typeDeclarations.length > 0) ctx.typeDeclarations.map(d -> CPrinter.printDeclaration(d, true)).join(';\n\n') + ';\n'; else '')
 
@@ -668,7 +668,7 @@ class HaxeCBridge {
 			 * @param panicCallback a callback to execute if the SDK panics. The SDK will continue processing events after a panic and you may want to stop it after receiving this callback. Use `NULL` for no callback
 			 * @returns `NULL` if the thread initializes successfully or a null-terminated C string if an error occurs during initialization
 			 */
-			$prefix const char *${namespace}_setup(snikket_panic_callback panic_callback);
+			$prefix const char *${namespace}_setup(borogove_panic_callback panic_callback);
 
 			/**
 			 * Stops the SDK, blocking until the main thread has completed. Once ended, it cannot be restarted (this is because static variable state will be retained from the last run).
@@ -774,7 +774,7 @@ class HaxeCBridge {
 				std::atomic<bool> staticsInitialized = { false };
 
 				struct HaxeThreadData {
-					snikket_panic_callback haxeExceptionCallback;
+					borogove_panic_callback haxeExceptionCallback;
 					const char* initExceptionInfo;
 				};
 
@@ -833,7 +833,7 @@ class HaxeCBridge {
 				threadData->initExceptionInfo = nullptr;
 
 				// copy out callback
-				snikket_panic_callback haxeExceptionCallback = threadData->haxeExceptionCallback;
+				borogove_panic_callback haxeExceptionCallback = threadData->haxeExceptionCallback;
 
 				bool firstRun = !HaxeCBridgeInternal::staticsInitialized;
 
@@ -868,7 +868,7 @@ class HaxeCBridge {
 			}
 			
 			HAXE_C_BRIDGE_LINKAGE
-			const char* ${namespace}_setup(snikket_panic_callback unhandledExceptionCallback) {
+			const char* ${namespace}_setup(borogove_panic_callback unhandledExceptionCallback) {
 				HaxeCBridgeInternal::HaxeThreadData threadData;
 				threadData.haxeExceptionCallback = unhandledExceptionCallback == nullptr ? HaxeCBridgeInternal::defaultExceptionHandler : unhandledExceptionCallback;
 				threadData.initExceptionInfo = nullptr;
@@ -1865,7 +1865,7 @@ class CConverterContext {
 		"auto", "double", "int", "struct", "break", "else", "long", "switch", "case", "enum", "register", "typedef", "char", "extern", "return", "union", "const", "float", "short", "unsigned", "continue", "for", "signed", "void", "default", "goto", "sizeof", "volatile", "do", "if", "static", "while",
 		"size_t", "int64_t", "uint64_t",
 		// HaxeCBridge types
-		"HaxeObject", "snikket_panic_callback",
+		"HaxeObject", "borogove_panic_callback",
 		// hxcpp
 		"Int", "String", "Float", "Dynamic", "Bool",
 	];
diff --git a/Makefile b/Makefile
index 3b10147..1e30ec1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 HAXE_PATH=$$HOME/Software/haxe-4.3.1/hxnodejs/12,1,0/src
 
-.PHONY: all test hx-build-dep cpp/output.dso npm/snikket-browser.js npm/snikket.js
+.PHONY: all test hx-build-dep cpp/output.dso npm/borogove-browser.js npm/borogove.js
 
-all: npm libsnikket.so
+all: npm libborogove.so
 
 test:
 	haxe test.hxml
@@ -22,53 +22,53 @@ hx-build-dep:
 	haxelib --quiet git hxcpp https://github.com/HaxeFoundation/hxcpp
 
 
-npm/snikket-browser.js:
+npm/borogove-browser.js:
 	haxe browserjs.hxml
-	sed -i 's/import { snikket }/import { snikket as enums }/' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.UiState/enums.UiState/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.MessageStatus/enums.MessageStatus/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.MessageDirection/enums.MessageDirection/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.MessageType/enums.MessageType/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.UserState/enums.UserState/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.ChatMessageEvent/enums.ChatMessageEvent/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.ReactionUpdateKind/enums.ReactionUpdateKind/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.jingle\.CallStatus/enums.jingle.CallStatus/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.EncryptionMode/enums.EncryptionMode/g' npm/snikket-browser.d.ts
-	sed -i 's/snikket\.EncryptionStatus/enums.EncryptionStatus/g' npm/snikket-browser.d.ts
-	sed -i '1ivar exports = {};' npm/snikket-browser.js
-	echo "export const snikket = exports.snikket;" >> npm/snikket-browser.js
+	sed -i 's/import { borogove }/import { borogove as enums }/' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.UiState/enums.UiState/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.MessageStatus/enums.MessageStatus/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.MessageDirection/enums.MessageDirection/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.MessageType/enums.MessageType/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.UserState/enums.UserState/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.ChatMessageEvent/enums.ChatMessageEvent/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.ReactionUpdateKind/enums.ReactionUpdateKind/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.calls\.CallStatus/enums.calls.CallStatus/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.EncryptionMode/enums.EncryptionMode/g' npm/borogove-browser.d.ts
+	sed -i 's/borogove\.EncryptionStatus/enums.EncryptionStatus/g' npm/borogove-browser.d.ts
+	sed -i '1ivar exports = {};' npm/borogove-browser.js
+	echo "export const borogove = exports.borogove;" >> npm/borogove-browser.js
 
-npm/snikket.js:
+npm/borogove.js:
 	haxe nodejs.hxml
-	sed -i 's/import { snikket }/import { snikket as enums }/' npm/snikket.d.ts
-	sed -i 's/snikket\.UiState/enums.UiState/g' npm/snikket.d.ts
-	sed -i 's/snikket\.MessageStatus/enums.MessageStatus/g' npm/snikket.d.ts
-	sed -i 's/snikket\.MessageDirection/enums.MessageDirection/g' npm/snikket.d.ts
-	sed -i 's/snikket\.MessageType/enums.MessageType/g' npm/snikket.d.ts
-	sed -i 's/snikket\.UserState/enums.UserState/g' npm/snikket.d.ts
-	sed -i 's/snikket\.ChatMessageEvent/enums.ChatMessageEvent/g' npm/snikket.d.ts
-	sed -i 's/snikket\.ReactionUpdateKind/enums.ReactionUpdateKind/g' npm/snikket.d.ts
-	sed -i 's/snikket\.jingle\.CallStatus/enums.jingle.CallStatus/g' npm/snikket.d.ts
-	sed -i 's/snikket\.EncryptionMode/enums.EncryptionMode/g' npm/snikket.d.ts
-	sed -i 's/snikket\.EncryptionStatus/enums.EncryptionStatus/g' npm/snikket.d.ts
-	sed -i '1iimport { createRequire } from "module";' npm/snikket.js
-	sed -i '1iglobal.require = createRequire(import.meta.url);' npm/snikket.js
-	sed -i '1ivar exports = {};' npm/snikket.js
-	echo "export const snikket = exports.snikket;" >> npm/snikket.js
+	sed -i 's/import { borogove }/import { borogove as enums }/' npm/borogove.d.ts
+	sed -i 's/borogove\.UiState/enums.UiState/g' npm/borogove.d.ts
+	sed -i 's/borogove\.MessageStatus/enums.MessageStatus/g' npm/borogove.d.ts
+	sed -i 's/borogove\.MessageDirection/enums.MessageDirection/g' npm/borogove.d.ts
+	sed -i 's/borogove\.MessageType/enums.MessageType/g' npm/borogove.d.ts
+	sed -i 's/borogove\.UserState/enums.UserState/g' npm/borogove.d.ts
+	sed -i 's/borogove\.ChatMessageEvent/enums.ChatMessageEvent/g' npm/borogove.d.ts
+	sed -i 's/borogove\.ReactionUpdateKind/enums.ReactionUpdateKind/g' npm/borogove.d.ts
+	sed -i 's/borogove\.calls\.CallStatus/enums.calls.CallStatus/g' npm/borogove.d.ts
+	sed -i 's/borogove\.EncryptionMode/enums.EncryptionMode/g' npm/borogove.d.ts
+	sed -i 's/borogove\.EncryptionStatus/enums.EncryptionStatus/g' npm/borogove.d.ts
+	sed -i '1iimport { createRequire } from "module";' npm/borogove.js
+	sed -i '1iglobal.require = createRequire(import.meta.url);' npm/borogove.js
+	sed -i '1ivar exports = {};' npm/borogove.js
+	echo "export const borogove = exports.borogove;" >> npm/borogove.js
 
-npm: npm/snikket-browser.js npm/snikket.js snikket/persistence/IDB.js snikket/persistence/MediaStoreCache.js snikket/persistence/sqlite-worker1.mjs
-	cp snikket/persistence/IDB.js npm
-	cp snikket/persistence/MediaStoreCache.js npm
-	cp snikket/persistence/sqlite-worker1.mjs npm
+npm: npm/borogove-browser.js npm/borogove.js borogove/persistence/IDB.js borogove/persistence/MediaStoreCache.js borogove/persistence/sqlite-worker1.mjs
+	cp borogove/persistence/IDB.js npm
+	cp borogove/persistence/MediaStoreCache.js npm
+	cp borogove/persistence/sqlite-worker1.mjs npm
 	cd npm && npx tsc --esModuleInterop --lib esnext,dom --target esnext --preserveConstEnums -d index.ts
-	sed -i '1iimport { snikket as enums } from "./snikket-enums.js";' npm/index.js
+	sed -i '1iimport { borogove as enums } from "./borogove-enums.js";' npm/index.js
 
 cpp/output.dso:
 	haxe cpp.hxml
 
-libsnikket.so: cpp/output.dso
-	cp cpp/output.dso libsnikket.so
+libborogove.so: cpp/output.dso
+	cp cpp/output.dso libborogove.so
 
 clean:
-	rm -f npm/browser.js npm/index.js npm/snikket.js npm/snikket-enums.js
-	rm -f npm/index.d.ts npm/snikket.d.ts npm/snikket-enums.d.ts npm/snikket-enums.ts
+	rm -f npm/browser.js npm/index.js npm/borogove.js npm/borogove-enums.js
+	rm -f npm/index.d.ts npm/borogove.d.ts npm/borogove-enums.d.ts npm/borogove-enums.ts
diff --git a/README.md b/README.md
index a8bcc5b..6c981c7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Snikket SDK
+# Borogove
 
-https://github.com/snikket-im/snikket-sdk
+https://borogove.dev
 
 Working towards simplicity in developing Snikket-compatible apps.
 
@@ -30,7 +30,7 @@ Also some typings are generated which include documenation comments.
 
 # C
 
-libsnikket.so and cpp/snikket.h, the latter has documentation comments
+libborogove.so and cpp/borogove.h, the latter has documentation comments
 
 ## Alpine Linux
 
@@ -38,4 +38,4 @@ See snikket-sdk build recipe: https://pkgs.alpinelinux.org/package/edge/testing/
 
 # Swift
 
-libsnikket.so and cpp/snikket.h are wrapped by cpp/Snikket.swift
+libborogove.so and cpp/borogove.h are wrapped by cpp/Borogove.swift
diff --git a/snikket/AttachmentSource.cpp.hx b/borogove/AttachmentSource.cpp.hx
similarity index 94%
rename from snikket/AttachmentSource.cpp.hx
rename to borogove/AttachmentSource.cpp.hx
index 168a484..4f4e5c3 100644
--- a/snikket/AttachmentSource.cpp.hx
+++ b/borogove/AttachmentSource.cpp.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 #if cpp
 import HaxeCBridge;
@@ -22,7 +22,7 @@ class AttachmentSource {
 		this.type = mime;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private inline function tinkSource() {
 		return tink.io.Source.ofInput(this.name, sys.io.File.read(path));
 	}
diff --git a/snikket/AttachmentSource.js.hx b/borogove/AttachmentSource.js.hx
similarity index 89%
rename from snikket/AttachmentSource.js.hx
rename to borogove/AttachmentSource.js.hx
index 3842799..cd7754d 100644
--- a/snikket/AttachmentSource.js.hx
+++ b/borogove/AttachmentSource.js.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 @:forward
 abstract AttachmentSource(js.html.File) {
diff --git a/snikket/Autolink.hx b/borogove/Autolink.hx
similarity index 99%
rename from snikket/Autolink.hx
rename to borogove/Autolink.hx
index a277dcf..2f7b985 100644
--- a/snikket/Autolink.hx
+++ b/borogove/Autolink.hx
@@ -20,9 +20,9 @@
  *
  *
  */
-package snikket;
+package borogove;
 
-import snikket.Stanza;
+import borogove.Stanza;
 using Lambda;
 
 class Autolink {
diff --git a/snikket/Caps.hx b/borogove/Caps.hx
similarity index 97%
rename from snikket/Caps.hx
rename to borogove/Caps.hx
index 234cb1f..ad79b12 100644
--- a/snikket/Caps.hx
+++ b/borogove/Caps.hx
@@ -1,11 +1,11 @@
-package snikket;
+package borogove;
 
 import haxe.crypto.Base64;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 using Lambda;
 
-import snikket.Hash;
+import borogove.Hash;
 
 @:expose
 class Caps {
@@ -15,7 +15,7 @@ class Caps {
 	private var _ver : Null<Hash> = null;
 	// TODO: data forms
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function withIdentity(caps:KeyValueIterator<String, Null<Caps>>, category:Null<String>, type:Null<String>):Array<String> {
 		final result = [];
 		for (cap in caps) {
@@ -30,7 +30,7 @@ class Caps {
 		return result;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function withFeature(caps:KeyValueIterator<String, Null<Caps>>, feature:String):Array<String> {
 		final result = [];
 		for (cap in caps) {
diff --git a/snikket/Chat.hx b/borogove/Chat.hx
similarity index 98%
rename from snikket/Chat.hx
rename to borogove/Chat.hx
index 0048613..8828e79 100644
--- a/snikket/Chat.hx
+++ b/borogove/Chat.hx
@@ -1,23 +1,23 @@
-package snikket;
+package borogove;
 
 import haxe.DynamicAccess;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 import thenshim.Promise;
-import snikket.Chat;
-import snikket.ChatMessage;
-import snikket.Color;
-import snikket.GenericStream;
-import snikket.ID;
-import snikket.Message;
-import snikket.MessageSync;
-import snikket.Reaction;
+import borogove.Chat;
+import borogove.ChatMessage;
+import borogove.Color;
+import borogove.GenericStream;
+import borogove.ID;
+import borogove.Message;
+import borogove.MessageSync;
+import borogove.Reaction;
 #if !NO_JINGLE
-import snikket.jingle.PeerConnection;
-import snikket.jingle.Session;
+import borogove.calls.PeerConnection;
+import borogove.calls.Session;
 #end
-import snikket.queries.DiscoInfoGet;
-import snikket.queries.MAMQuery;
+import borogove.queries.DiscoInfoGet;
+import borogove.queries.MAMQuery;
 using Lambda;
 using StringTools;
 
@@ -57,9 +57,9 @@ abstract class Chat {
 	private var client:Client;
 	private var stream:GenericStream;
 	private var persistence:Persistence;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var avatarSha1:Null<BytesData> = null;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var presence:Map<String, Presence> = [];
 	private var trusted:Bool = false;
 	/**
@@ -67,23 +67,23 @@ abstract class Chat {
 	**/
 	public var chatId(default, null):String;
 #if !NO_JINGLE
-	@:allow(snikket)
-	private var jingleSessions: Map<String, snikket.jingle.Session> = [];
+	@:allow(borogove)
+	private var jingleSessions: Map<String, Session> = [];
 #end
-	@:allow(snikket)
+	@:allow(borogove)
 	private var displayName:String;
 	/**
 		Current state of this chat
 	**/
-	@:allow(snikket)
+	@:allow(borogove)
 	public var uiState(default, null): UiState = Open;
 	public var isBlocked(default, null): Bool = false;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var extensions: Stanza;
 	private var _unreadCount = 0;
 	private var lastMessage: Null<ChatMessage>;
 	private var readUpToId: Null<String>;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var readUpToBy: Null<String>;
 	private var isTyping = false;
 	private var typingThread: Null<String> = null;
@@ -94,10 +94,10 @@ abstract class Chat {
 
 	private var _encryptionMode: EncryptionMode = Unencrypted;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var omemoContactDeviceIDs: Null<Array<Int>> = null;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(client:Client, stream:GenericStream, persistence:Persistence, chatId:String, uiState = Open, isBlocked = false, extensions: Null<Stanza> = null, readUpToId: Null<String> = null, readUpToBy: Null<String> = null, omemoContactDeviceIDs: Array<Int> = null) {
 		this.client = client;
 		this.stream = stream;
@@ -112,7 +112,7 @@ abstract class Chat {
 		this.omemoContactDeviceIDs = omemoContactDeviceIDs;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	abstract private function prepareIncomingMessage(message:ChatMessageBuilder, stanza:Stanza):ChatMessageBuilder;
 
 	/**
@@ -363,7 +363,7 @@ abstract class Chat {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setNotificationsInternal(filtered: Bool, mention: Bool, reply: Bool) {
 		if (filtered) {
 			notificationSettings = { mention: mention, reply: reply };
@@ -415,7 +415,7 @@ abstract class Chat {
 		return lastMessage?.timestamp;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function updateFromBookmark(item: Stanza) {
 		final conf = item.getChild("conference", "urn:xmpp:bookmarks:1");
 		final fn = conf.attr.get("name");
@@ -424,7 +424,7 @@ abstract class Chat {
 		extensions = conf.getChild("extensions") ?? new Stanza("extensions", { xmlns: "urn:xmpp:bookmarks:1" });
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function updateFromRoster(item: { fn: Null<String>, subscription: String }) {
 		setTrusted(item.subscription == "both" || item.subscription == "from");
 		if (item.fn != null && item.fn != "") displayName = item.fn;
@@ -459,7 +459,7 @@ abstract class Chat {
 		return _unreadCount;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setUnreadCount(count:Int) {
 		_unreadCount = count;
 	}
@@ -478,7 +478,7 @@ abstract class Chat {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setLastMessage(message:Null<ChatMessage>) {
 		lastMessage = message;
 	}
@@ -507,12 +507,12 @@ abstract class Chat {
 		return this.displayName;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setPresence(resource:String, presence:Presence) {
 		this.presence.set(resource, presence);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setCaps(resource:String, caps:Caps) {
 		final presence = presence.get(resource);
 		if (presence != null) {
@@ -523,12 +523,12 @@ abstract class Chat {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function removePresence(resource:String) {
 		presence.remove(resource);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function getCaps():KeyValueIterator<String, Caps> {
 		final iter = presence.keyValueIterator();
 		return {
@@ -540,12 +540,12 @@ abstract class Chat {
 		};
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function getResourceCaps(resource:String):Caps {
 		return presence[resource]?.caps ?? new Caps("", [], []);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setAvatarSha1(sha1: BytesData) {
 		this.avatarSha1 = sha1;
 	}
@@ -561,7 +561,7 @@ abstract class Chat {
 		return this.trusted;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function livePresence() {
 		return true;
 	}
@@ -674,7 +674,7 @@ abstract class Chat {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function markReadUpToId(upTo: String, upToBy: String, ?callback: ()->Void) {
 		if (upTo == null) return;
 		if (readUpTo() == upTo) return;
@@ -760,7 +760,7 @@ abstract class Chat {
 @:build(HaxeSwiftBridge.expose())
 #end
 class DirectChat extends Chat {
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(client:Client, stream:GenericStream, persistence:Persistence, chatId:String, uiState = Open, isBlocked = false, extensions: Null<Stanza> = null, readUpToId: Null<String> = null, readUpToBy: Null<String> = null, omemoContactDeviceIDs: Array<Int> = null) {
 		super(client, stream, persistence, chatId, uiState, isBlocked, extensions, readUpToId, readUpToBy, omemoContactDeviceIDs);
 	}
@@ -830,7 +830,7 @@ class DirectChat extends Chat {
 		return persistence.getMessagesAround(client.accountId(), chatId, aroundId, aroundTime);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function prepareIncomingMessage(message:ChatMessageBuilder, stanza:Stanza) {
 		message.syncPoint = !syncing();
 		return message;
@@ -1026,14 +1026,14 @@ class DirectChat extends Chat {
 @:build(HaxeSwiftBridge.expose())
 #end
 class Channel extends Chat {
-	@:allow(snikket)
+	@:allow(borogove)
 	private var disco: Caps = new Caps("", [], ["http://jabber.org/protocol/muc"]);
 	private var inSync = true;
 	private var sync = null;
 	private var forceLive = false;
 	private var _nickInUse = null;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(client:Client, stream:GenericStream, persistence:Persistence, chatId:String, uiState = Open, isBlocked = false, extensions = null, readUpToId = null, readUpToBy = null, ?disco: Caps) {
 		super(client, stream, persistence, chatId, uiState, isBlocked, extensions, readUpToId, readUpToBy);
 		if (disco != null) {
@@ -1045,7 +1045,7 @@ class Channel extends Chat {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function selfPing(refresh: Bool) {
 		if (uiState == Closed){
 			client.sendPresence(
@@ -1083,7 +1083,7 @@ class Channel extends Chat {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function join() {
 		presence = []; // About to ask for a fresh set
 		_nickInUse = null;
@@ -1114,7 +1114,7 @@ class Channel extends Chat {
 		persistence.lastId(client.accountId(), chatId).then(doSync);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	override private function getCaps():KeyValueIterator<String, Caps> {
 		return {
 			hasNext: () -> false,
@@ -1251,7 +1251,7 @@ class Channel extends Chat {
 		return disco.features.contains("muc_membersonly");
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function refreshDisco(?callback: ()->Void) {
 		final discoGet = new DiscoInfoGet(chatId);
 		discoGet.onFinished(() -> {
@@ -1273,7 +1273,7 @@ class Channel extends Chat {
 		return getParticipantDetails(lastMessage.senderId).displayName + ": " + super.preview();
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	override private function livePresence() {
 		if (forceLive) return true;
 
@@ -1365,7 +1365,7 @@ class Channel extends Chat {
 		return persistence.getMessagesAround(client.accountId(), chatId, aroundId, aroundTime);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function prepareIncomingMessage(message:ChatMessageBuilder, stanza:Stanza) {
 		message.syncPoint = !syncing();
 		if (message.type == MessageChat) message.type = MessageChannelPrivate;
@@ -1586,7 +1586,7 @@ class AvailableChat {
 		A human-readable note associated with this search result
 	**/
 	public final note: String;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final caps: Caps;
 
 	/**
@@ -1596,7 +1596,7 @@ class AvailableChat {
 		return caps.isChannel(chatId);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(chatId: String, displayName: Null<String>, note: String, caps: Caps) {
 		this.chatId = chatId;
 		this.displayName = displayName;
diff --git a/snikket/ChatMessage.hx b/borogove/ChatMessage.hx
similarity index 96%
rename from snikket/ChatMessage.hx
rename to borogove/ChatMessage.hx
index c638bc9..5a14895 100644
--- a/snikket/ChatMessage.hx
+++ b/borogove/ChatMessage.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import datetime.DateTime;
 import haxe.Exception;
@@ -13,15 +13,15 @@ using StringTools;
 import HaxeCBridge;
 #end
 
-import snikket.Hash;
-import snikket.JID;
-import snikket.Identicon;
-import snikket.StringUtil;
-import snikket.XEP0393;
-import snikket.EmojiUtil;
-import snikket.Message;
-import snikket.Stanza;
-import snikket.Util;
+import borogove.Hash;
+import borogove.JID;
+import borogove.Identicon;
+import borogove.StringUtil;
+import borogove.XEP0393;
+import borogove.EmojiUtil;
+import borogove.Message;
+import borogove.Stanza;
+import borogove.Util;
 
 @:expose
 @:nullSafety(StrictThreaded)
@@ -37,7 +37,7 @@ class ChatAttachment {
 	public final hashes: ReadOnlyArray<Hash>;
 
 	#if cpp
-	@:allow(snikket)
+	@:allow(borogove)
 	private
 	#else
 	public
@@ -84,10 +84,10 @@ class ChatMessage {
 	**/
 	public final type: MessageType;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private final syncPoint : Bool;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private final replyId : Null<String>;
 
 	/**
@@ -95,13 +95,13 @@ class ChatMessage {
 	**/
 	public final timestamp: String;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private final to: JID;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final from: JID;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final recipients: ReadOnlyArray<JID>;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final replyTo: ReadOnlyArray<JID>;
 
 	/**
@@ -172,10 +172,10 @@ class ChatMessage {
 	/**
 		Array of past versions of this message, if it has been edited
 	**/
-	@:allow(snikket)
+	@:allow(borogove)
 	public final versions: ReadOnlyArray<ChatMessage>;
 
-	@:allow(snikket, test)
+	@:allow(borogove, test)
 	private final payloads: ReadOnlyArray<Stanza>;
 
 	/**
@@ -184,10 +184,10 @@ class ChatMessage {
 	**/
 	public var encryption: Null<EncryptionInfo>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private final stanza: Null<Stanza>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(params: {
 		?localId: Null<String>,
 		?serverId: Null<String>,
@@ -240,7 +240,7 @@ class ChatMessage {
 		this.stanza = params.stanza;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function fromStanza(stanza:Stanza, localJid:JID, ?addContext: (ChatMessageBuilder, Stanza)->ChatMessageBuilder):Null<ChatMessage> {
 		switch Message.fromStanza(stanza, localJid, addContext).parsed {
 			case ChatMessageStanza(message):
@@ -266,7 +266,7 @@ class ChatMessage {
 		return type == MessageChannel || type == MessageChannelPrivate ? serverId : localId;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function set_replyToMessage(m: ChatMessage) {
 		final rtm = replyToMessage;
 		if (rtm == null) throw "Cannot hydrate null replyToMessage";
@@ -275,13 +275,13 @@ class ChatMessage {
 		return replyToMessage = m;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function set_reactions(r: Map<String, Array<Reaction>>) {
 		if (reactions != null && !{ iterator: () -> reactions.keys() }.empty()) throw "Reactions already hydrated";
 		return reactions = r;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function inlineHashReferences(): Array<Hash> {
 		final result = [];
 		final htmlBody = payloads.find((p) -> p.attr.get("xmlns") == "http://jabber.org/protocol/xhtml-im" && p.name == "html")?.getChild("body", "http://www.w3.org/1999/xhtml");
@@ -416,7 +416,7 @@ class ChatMessage {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function asStanza():Stanza {
 		if (stanza != null) return stanza;
 
diff --git a/snikket/ChatMessageBuilder.hx b/borogove/ChatMessageBuilder.hx
similarity index 95%
rename from snikket/ChatMessageBuilder.hx
rename to borogove/ChatMessageBuilder.hx
index 5034c24..73b5a5c 100644
--- a/snikket/ChatMessageBuilder.hx
+++ b/borogove/ChatMessageBuilder.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import datetime.DateTime;
 import haxe.crypto.Base64;
@@ -12,16 +12,16 @@ using StringTools;
 import HaxeCBridge;
 #end
 
-import snikket.Hash;
-import snikket.JID;
-import snikket.Identicon;
-import snikket.StringUtil;
-import snikket.XEP0393;
-import snikket.EmojiUtil;
-import snikket.Message;
-import snikket.Stanza;
-import snikket.Util;
-import snikket.ChatMessage;
+import borogove.Hash;
+import borogove.JID;
+import borogove.Identicon;
+import borogove.StringUtil;
+import borogove.XEP0393;
+import borogove.EmojiUtil;
+import borogove.Message;
+import borogove.Stanza;
+import borogove.Util;
+import borogove.ChatMessage;
 
 @:expose
 @:nullSafety(StrictThreaded)
@@ -50,10 +50,10 @@ class ChatMessageBuilder {
 	**/
 	public var type: MessageType = MessageChat;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var syncPoint: Bool = false;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var replyId: Null<String> = null;
 
 	/**
@@ -61,15 +61,15 @@ class ChatMessageBuilder {
 	**/
 	public var timestamp: Null<String> = null;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var to: Null<JID> = null;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var from: Null<JID> = null;
-	@:allow(snikket)
+	@:allow(borogove)
 	private var sender: Null<JID> = null; // DEPRECATED
-	@:allow(snikket)
+	@:allow(borogove)
 	private var recipients: Array<JID> = [];
-	@:allow(snikket)
+	@:allow(borogove)
 	private var replyTo: Array<JID> = [];
 
 	public var senderId (get, default): Null<String> = null;
@@ -120,7 +120,7 @@ class ChatMessageBuilder {
 	**/
 	public var versions: Array<ChatMessage> = [];
 
-	@:allow(snikket, test)
+	@:allow(borogove, test)
 	private var payloads: Array<Stanza> = [];
 
 	/**
@@ -132,7 +132,7 @@ class ChatMessageBuilder {
 	/**
 		WARNING: if you set this, you promise all the attributes of this builder match it
 	**/
-	@:allow(snikket)
+	@:allow(borogove)
 	private var stanza: Null<Stanza> = null;
 
 	/**
@@ -187,7 +187,7 @@ class ChatMessageBuilder {
 	}
 	#end
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function makeModerated(m: ChatMessage, timestamp: String, moderatorId: Null<String>, reason: Null<String>) {
 		final builder = new ChatMessageBuilder();
 		builder.localId = m.localId;
@@ -218,7 +218,7 @@ class ChatMessageBuilder {
 		return builder.build();
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function attachSims(sims: Stanza) {
 		var mime = sims.findText("{urn:xmpp:jingle:apps:file-transfer:5}/media-type#");
 		if (mime == null) mime = sims.findText("{urn:xmpp:jingle:apps:file-transfer:3}/media-type#");
diff --git a/snikket/Client.hx b/borogove/Client.hx
similarity index 97%
rename from snikket/Client.hx
rename to borogove/Client.hx
index 53c5fba..ae3b363 100644
--- a/snikket/Client.hx
+++ b/borogove/Client.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import sha.SHA256;
 
@@ -6,36 +6,36 @@ import haxe.crypto.Base64;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 import thenshim.Promise;
-import snikket.Caps;
-import snikket.Chat;
-import snikket.ChatMessage;
-import snikket.Message;
-import snikket.EventEmitter;
-import snikket.EventHandler;
-import snikket.EncryptionPolicy;
+import borogove.Caps;
+import borogove.Chat;
+import borogove.ChatMessage;
+import borogove.Message;
+import borogove.EventEmitter;
+import borogove.EventHandler;
+import borogove.EncryptionPolicy;
 #if !NO_OMEMO
-import snikket.OMEMO;
+import borogove.OMEMO;
 #end
-import snikket.PubsubEvent;
-import snikket.Stream;
+import borogove.PubsubEvent;
+import borogove.Stream;
 #if !NO_JINGLE
-import snikket.jingle.IceServer;
-import snikket.jingle.PeerConnection;
-import snikket.jingle.Session;
+import borogove.calls.IceServer;
+import borogove.calls.PeerConnection;
+import borogove.calls.Session;
 #end
-import snikket.queries.BlocklistGet;
-import snikket.queries.BoB;
-import snikket.queries.DiscoInfoGet;
-import snikket.queries.DiscoItemsGet;
-import snikket.queries.ExtDiscoGet;
-import snikket.queries.GenericQuery;
-import snikket.queries.HttpUploadSlot;
-import snikket.queries.JabberIqGatewayGet;
-import snikket.queries.PubsubGet;
-import snikket.queries.Push2Disable;
-import snikket.queries.Push2Enable;
-import snikket.queries.RosterGet;
-import snikket.queries.VcardTempGet;
+import borogove.queries.BlocklistGet;
+import borogove.queries.BoB;
+import borogove.queries.DiscoInfoGet;
+import borogove.queries.DiscoItemsGet;
+import borogove.queries.ExtDiscoGet;
+import borogove.queries.GenericQuery;
+import borogove.queries.HttpUploadSlot;
+import borogove.queries.JabberIqGatewayGet;
+import borogove.queries.PubsubGet;
+import borogove.queries.Push2Disable;
+import borogove.queries.Push2Enable;
+import borogove.queries.RosterGet;
+import borogove.queries.VcardTempGet;
 using Lambda;
 using StringTools;
 
@@ -64,12 +64,12 @@ class Client extends EventEmitter {
 	private var chatMessageHandlers: Array<(ChatMessage, ChatMessageEvent)->Void> = [];
 	private var syncMessageHandlers: Array<(ChatMessage)->Void> = [];
 	private var chatStateHandlers: Array<(String,String,Null<String>,UserState)->Void> = [];
-	@:allow(snikket)
+	@:allow(borogove)
 	private var jid(default,null):JID;
 	private var chats: Array<Chat> = [];
 	private var persistence: Persistence;
 	private final caps = new Caps(
-		"https://sdk.snikket.org",
+		"https://borogove.dev",
 		[],
 		[
 			"http://jabber.org/protocol/disco#info",
@@ -97,7 +97,7 @@ class Client extends EventEmitter {
 	private var token: Null<String> = null;
 	private var fastCount: Null<Int> = null;
 	private final pendingCaps: Map<String, Array<(Null<Caps>)->Chat>> = [];
-	@:allow(snikket)
+	@:allow(borogove)
 	private final encryptionPolicy:EncryptionPolicy = {
 		allowUnencryptedOutgoing: true,
 		allowUnencryptedIncoming: true,
@@ -105,11 +105,11 @@ class Client extends EventEmitter {
 	};
 
 #if !NO_OMEMO
-	@:allow(snikket)
+	@:allow(borogove)
 	private final omemo: OMEMO;
 #end
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var inSync(default, null) = false;
 
 	/**
@@ -211,7 +211,7 @@ class Client extends EventEmitter {
 						chat.jingleSessions.remove(session.sid);
 					}
 				} else {
-					final newSession = snikket.jingle.InitiatedSession.fromSessionInitiate(this, stanza);
+					final newSession = borogove.calls.InitiatedSession.fromSessionInitiate(this, stanza);
 					chat.jingleSessions.set(newSession.sid, newSession);
 					chatActivity(chat);
 					newSession.ring();
@@ -407,7 +407,7 @@ class Client extends EventEmitter {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function processLiveMessage(stanza:Stanza, fwd:Null<Stanza>, ?encryptionInfo:EncryptionInfo):Void {
 		final from = stanza.attr.get("from") == null ? null : JID.parse(stanza.attr.get("from"));
 
@@ -992,7 +992,7 @@ class Client extends EventEmitter {
 		return Util.findFast(chats, (chat) -> chat.chatId == chatId);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function moderateMessage(action: ModerationAction): Promise<Null<ChatMessage>> {
 		return new thenshim.Promise((resolve, reject) ->
 			persistence.getMessage(accountId(), action.chatId, action.moderateServerId, null).then((moderateMessage) -> {
@@ -1009,7 +1009,7 @@ class Client extends EventEmitter {
 		);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function getDirectChat(chatId:String, triggerIfNew:Bool = true):DirectChat {
 		for (chat in chats) {
 			if (Std.isOfType(chat, DirectChat) && chat.chatId == chatId) {
@@ -1094,7 +1094,7 @@ class Client extends EventEmitter {
 		));
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function updatePushIfEnabled() {
 		if (enabledPushData == null) return;
 		enablePush(enabledPushData.push_service, enabledPushData.endpoint, enabledPushData.p256dh, enabledPushData.auth, enabledPushData.grace, enabledPushData.vapid_private_pkcs8, enabledPushData.claims);
@@ -1300,7 +1300,7 @@ class Client extends EventEmitter {
 		stream.sendStanza(new Stanza("inactive", { xmlns: "urn:xmpp:csi:0" }));
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function fetchMediaByHash(hashes: Array<Hash>, counterparts: Array<JID>) {
 		// TODO: only for counterparts who can infer our presence
 		// So MUCs, roster entires, anyone we've sent a message to in the past (from this client?)
@@ -1329,7 +1329,7 @@ class Client extends EventEmitter {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function chatActivity(chat: Chat, trigger = true) {
 		if (chat.isBlocked) return; // Don't notify blocked chats
 		if (chat.uiState == Closed) {
@@ -1345,7 +1345,7 @@ class Client extends EventEmitter {
 		if (trigger) this.trigger("chats/update", [chat]);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function sortChats() {
 		chats.sort((a, b) -> {
 			if (a.uiState == Pinned && b.uiState != Pinned) return -1;
@@ -1354,23 +1354,23 @@ class Client extends EventEmitter {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function storeMessages(messages: Array<ChatMessage>): Promise<Null<Array<ChatMessage>>> {
 		return persistence.storeMessages(accountId(), messages);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function sendQuery(query:GenericQuery) {
 		this.stream.sendIq(query.getQueryStanza(), query.handleResponse);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function sendStanza(stanza:Stanza) {
 		if (stanza.attr.get("id") == null) stanza.attr.set("id", ID.long());
 		stream.sendStanza(stanza);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function sendPresence(?to: String, ?augment: (Stanza)->Stanza) {
 		sendStanza(
 			(augment ?? (s)->s)(
@@ -1381,7 +1381,7 @@ class Client extends EventEmitter {
 	}
 
 #if !NO_JINGLE
-	@:allow(snikket)
+	@:allow(borogove)
 	private function getIceServers(callback: (Array<IceServer>)->Void) {
 		final extDiscoGet = new ExtDiscoGet(jid.domain);
 		extDiscoGet.onFinished(() -> {
@@ -1410,7 +1410,7 @@ class Client extends EventEmitter {
 	}
 #end
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function discoverServices(target: JID, ?node: String, callback: ({ jid: JID, name: Null<String>, node: Null<String> }, Caps)->Void) {
 		final itemsGet = new DiscoItemsGet(target.asString(), node);
 		itemsGet.onFinished(()-> {
@@ -1425,7 +1425,7 @@ class Client extends EventEmitter {
 		sendQuery(itemsGet);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function notifyMessageHandlers(message: ChatMessage, event: ChatMessageEvent) {
 		final chat = getChat(message.chatId());
 		if (chat != null && chat.isBlocked) return; // Don't notify blocked chats
@@ -1434,7 +1434,7 @@ class Client extends EventEmitter {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function notifySyncMessageHandlers(message: ChatMessage) {
 		if (message == null || message.versions.length > 1) return;
 		final chat = getChat(message.chatId());
@@ -1559,7 +1559,7 @@ class Client extends EventEmitter {
 	}
 
 	private function sync(?callback: (Bool)->Void) {
-		if (Std.isOfType(persistence, snikket.persistence.Dummy)) {
+		if (Std.isOfType(persistence, borogove.persistence.Dummy)) {
 			callback(true); // No reason to sync if we're not storing anyway
 		} else {
 			persistence.lastId(accountId(), null).then((lastId) -> doSync(callback, lastId));
diff --git a/snikket/Color.hx b/borogove/Color.hx
similarity index 98%
rename from snikket/Color.hx
rename to borogove/Color.hx
index 1d498b4..3993bbc 100644
--- a/snikket/Color.hx
+++ b/borogove/Color.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import hsluv.Hsluv;
 import haxe.io.Bytes;
diff --git a/snikket/Config.hx b/borogove/Config.hx
similarity index 94%
rename from snikket/Config.hx
rename to borogove/Config.hx
index c3a4e17..5156803 100644
--- a/snikket/Config.hx
+++ b/borogove/Config.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 #if cpp
 import HaxeCBridge;
@@ -19,7 +19,7 @@ class Config {
 	**/
 	public static var relativeHashUri = false;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static var constrainedMemoryMode = false;
 
 	#if cpp
diff --git a/snikket/Date.hx b/borogove/Date.hx
similarity index 97%
rename from snikket/Date.hx
rename to borogove/Date.hx
index 5a31a21..cef5161 100644
--- a/snikket/Date.hx
+++ b/borogove/Date.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 class Date {
 	public static function format(d: std.Date):String {
diff --git a/snikket/EmojiUtil.hx b/borogove/EmojiUtil.hx
similarity index 99%
rename from snikket/EmojiUtil.hx
rename to borogove/EmojiUtil.hx
index c7a3a86..451f376 100644
--- a/snikket/EmojiUtil.hx
+++ b/borogove/EmojiUtil.hx
@@ -27,7 +27,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package snikket;
+package borogove;
 
 class EmojiUtil {
 
diff --git a/snikket/EncryptedMessage.hx b/borogove/EncryptedMessage.hx
similarity index 88%
rename from snikket/EncryptedMessage.hx
rename to borogove/EncryptedMessage.hx
index 978e900..450d702 100644
--- a/snikket/EncryptedMessage.hx
+++ b/borogove/EncryptedMessage.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import thenshim.Promise;
 
diff --git a/snikket/EncryptionInfo.hx b/borogove/EncryptionInfo.hx
similarity index 97%
rename from snikket/EncryptionInfo.hx
rename to borogove/EncryptionInfo.hx
index d80ba97..1e235bc 100644
--- a/snikket/EncryptionInfo.hx
+++ b/borogove/EncryptionInfo.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 enum abstract EncryptionStatus(Int) {
 	var DecryptionSuccess; // Message was encrypted, and we decrypted it
@@ -33,7 +33,7 @@ class EncryptionInfo {
 
     public function toXml():Stanza {
         final el = new Stanza("decryption-status", {
-            xmlns: "https://snikket.org/protocol/sdk",
+            xmlns: "https://borogove.dev/protocol/sdk",
             encryption: this.method,
             result: status == DecryptionSuccess?"success":"failure",
         });
diff --git a/snikket/EncryptionPolicy.hx b/borogove/EncryptionPolicy.hx
similarity index 96%
rename from snikket/EncryptionPolicy.hx
rename to borogove/EncryptionPolicy.hx
index 8f5b030..9f0a9b0 100644
--- a/snikket/EncryptionPolicy.hx
+++ b/borogove/EncryptionPolicy.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 @:structInit
 class EncryptionPolicy {
diff --git a/snikket/EventEmitter.hx b/borogove/EventEmitter.hx
similarity index 94%
rename from snikket/EventEmitter.hx
rename to borogove/EventEmitter.hx
index 653ec25..8cfce0d 100644
--- a/snikket/EventEmitter.hx
+++ b/borogove/EventEmitter.hx
@@ -1,13 +1,13 @@
-package snikket;
+package borogove;
 
-import snikket.EventHandler;
+import borogove.EventHandler;
 
 class EventEmitter {
 	private var eventHandlers:Map<String,Array<EventHandler>> = [];
 
 	private function new() { }
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function on(eventName:String, callback:EventCallback):EventHandler {
 		var handlers = eventHandlers.get(eventName);
 		if(handlers == null) {
diff --git a/snikket/EventHandler.hx b/borogove/EventHandler.hx
similarity index 97%
rename from snikket/EventHandler.hx
rename to borogove/EventHandler.hx
index 16f69d9..352c806 100644
--- a/snikket/EventHandler.hx
+++ b/borogove/EventHandler.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 enum EventResult {
 	EventHandled;
diff --git a/snikket/FSM.hx b/borogove/FSM.hx
similarity index 99%
rename from snikket/FSM.hx
rename to borogove/FSM.hx
index 2bb3cf7..8ac4574 100644
--- a/snikket/FSM.hx
+++ b/borogove/FSM.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import haxe.Exception;
 
diff --git a/snikket/GenericStream.hx b/borogove/GenericStream.hx
similarity index 95%
rename from snikket/GenericStream.hx
rename to borogove/GenericStream.hx
index cb11984..95f9793 100644
--- a/snikket/GenericStream.hx
+++ b/borogove/GenericStream.hx
@@ -1,8 +1,8 @@
-package snikket;
+package borogove;
 
 import haxe.io.BytesData;
-import snikket.Stanza;
-import snikket.EventEmitter;
+import borogove.Stanza;
+import borogove.EventEmitter;
 
 enum IqResult {
 	IqResultElement(element:Stanza);
diff --git a/snikket/Hash.hx b/borogove/Hash.hx
similarity index 93%
rename from snikket/Hash.hx
rename to borogove/Hash.hx
index 60f2b4c..27c6c37 100644
--- a/snikket/Hash.hx
+++ b/borogove/Hash.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import haxe.crypto.Sha1;
 import haxe.crypto.Sha256;
@@ -7,7 +7,7 @@ import haxe.io.Bytes;
 import haxe.io.BytesData;
 using StringTools;
 
-import snikket.Config;
+import borogove.Config;
 
 #if cpp
 import HaxeCBridge;
@@ -21,10 +21,10 @@ import HaxeCBridge;
 #end
 class Hash {
 	public final algorithm: String;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final hash: BytesData;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(algorithm: String, hash: BytesData) {
 		this.algorithm = algorithm;
 		this.hash = hash;
@@ -54,12 +54,12 @@ class Hash {
 		return null;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function sha1(bytes: Bytes) {
 		return new Hash("sha-1", Sha1.make(bytes).getData());
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function sha256(bytes: Bytes) {
 		return new Hash("sha-256", Sha256.make(bytes).getData());
 	}
@@ -72,12 +72,12 @@ class Hash {
 		}
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function bobUri() {
 		return "cid:" + (algorithm == "sha-1" ? "sha1" : algorithm.urlEncode()) + "+" + toHex() + "@bob.xmpp.org";
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function serializeUri() {
 		return "ni:///" + algorithm.urlEncode() + ";" + toBase64Url();
 	}
diff --git a/snikket/ID.hx b/borogove/ID.hx
similarity index 95%
rename from snikket/ID.hx
rename to borogove/ID.hx
index 42d29c5..5f14454 100644
--- a/snikket/ID.hx
+++ b/borogove/ID.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import hx.strings.RandomStrings;
 
diff --git a/snikket/Identicon.hx b/borogove/Identicon.hx
similarity index 96%
rename from snikket/Identicon.hx
rename to borogove/Identicon.hx
index 95e466b..b65a332 100644
--- a/snikket/Identicon.hx
+++ b/borogove/Identicon.hx
@@ -1,6 +1,6 @@
-package snikket;
+package borogove;
 
-import snikket.Color;
+import borogove.Color;
 import haxe.crypto.Sha1;
 import haxe.io.Bytes;
 import haxe.io.BytesInput;
diff --git a/snikket/JID.hx b/borogove/JID.hx
similarity index 99%
rename from snikket/JID.hx
rename to borogove/JID.hx
index f8850e0..54f32c3 100644
--- a/snikket/JID.hx
+++ b/borogove/JID.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 @:expose
 class JID {
diff --git a/snikket/JsonPrinter.hx b/borogove/JsonPrinter.hx
similarity index 99%
rename from snikket/JsonPrinter.hx
rename to borogove/JsonPrinter.hx
index 8fef1c1..83a4452 100644
--- a/snikket/JsonPrinter.hx
+++ b/borogove/JsonPrinter.hx
@@ -20,7 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
-package snikket;
+package borogove;
 
 /**
 	An implementation of JSON printer in Haxe.
diff --git a/snikket/Map.js.hx b/borogove/Map.js.hx
similarity index 99%
rename from snikket/Map.js.hx
rename to borogove/Map.js.hx
index 6f03b83..2d36b3e 100644
--- a/snikket/Map.js.hx
+++ b/borogove/Map.js.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import haxe.Constraints.IMap;
 import js.lib.HaxeIterator;
diff --git a/snikket/Message.hx b/borogove/Message.hx
similarity index 99%
rename from snikket/Message.hx
rename to borogove/Message.hx
index 361ed38..423a071 100644
--- a/snikket/Message.hx
+++ b/borogove/Message.hx
@@ -1,6 +1,6 @@
-package snikket;
+package borogove;
 
-import snikket.Reaction;
+import borogove.Reaction;
 using Lambda;
 using StringTools;
 
diff --git a/snikket/MessageSync.hx b/borogove/MessageSync.hx
similarity index 96%
rename from snikket/MessageSync.hx
rename to borogove/MessageSync.hx
index 52360b5..c0951e9 100644
--- a/snikket/MessageSync.hx
+++ b/borogove/MessageSync.hx
@@ -1,17 +1,17 @@
-package snikket;
+package borogove;
 
 import haxe.Exception;
-import snikket.Client;
-import snikket.Message;
-import snikket.GenericStream;
-import snikket.ResultSet;
-import snikket.queries.MAMQuery;
+import borogove.Client;
+import borogove.Message;
+import borogove.GenericStream;
+import borogove.ResultSet;
+import borogove.queries.MAMQuery;
 
 import thenshim.Promise;
 import thenshim.PromiseTools;
 
 #if !NO_OMEMO
-import snikket.OMEMO;
+import borogove.OMEMO;
 #end
 
 typedef MessageList = {
diff --git a/snikket/ModerationAction.hx b/borogove/ModerationAction.hx
similarity index 96%
rename from snikket/ModerationAction.hx
rename to borogove/ModerationAction.hx
index 5c5e89f..18b438f 100644
--- a/snikket/ModerationAction.hx
+++ b/borogove/ModerationAction.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 class ModerationAction {
 	public final chatId: String;
diff --git a/snikket/NS.hx b/borogove/NS.hx
similarity index 81%
rename from snikket/NS.hx
rename to borogove/NS.hx
index 1dbb977..147185b 100644
--- a/snikket/NS.hx
+++ b/borogove/NS.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 class NS {
     static public final OMEMO = "eu.siacs.conversations.axolotl";
diff --git a/snikket/Notification.hx b/borogove/Notification.hx
similarity index 93%
rename from snikket/Notification.hx
rename to borogove/Notification.hx
index 6c030bb..d0dc567 100644
--- a/snikket/Notification.hx
+++ b/borogove/Notification.hx
@@ -1,8 +1,8 @@
-package snikket;
+package borogove;
 
-import snikket.ChatMessage;
-import snikket.JID;
-import snikket.Message;
+import borogove.ChatMessage;
+import borogove.JID;
+import borogove.Message;
 
 #if cpp
 import HaxeCBridge;
@@ -27,7 +27,7 @@ class Notification {
 	public final lang: Null<String>;
 	public final timestamp: Null<String>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(title: String, body: String, accountId: String, chatId: String, senderId: String, messageId: String, type: MessageType, callStatus: Null<String>, callSid: Null<String>, imageUri: Null<String>, lang: Null<String>, timestamp: Null<String>) {
 		this.title = title;
 		this.body = body;
@@ -43,7 +43,7 @@ class Notification {
 		this.timestamp = timestamp;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function fromChatMessage(m: ChatMessage) {
 		var imageUri = null;
 		final attachment = m.attachments[0];
@@ -68,7 +68,7 @@ class Notification {
 
 	// Sometimes a stanza has not much in it, so make something generic
 	// Assume it is an incoming message of some kind
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function fromThinStanza(stanza: Stanza) {
 		return new Notification(
 			"New Message",
diff --git a/snikket/OMEMO.hx b/borogove/OMEMO.hx
similarity index 99%
rename from snikket/OMEMO.hx
rename to borogove/OMEMO.hx
index e4a7d55..588b653 100644
--- a/snikket/OMEMO.hx
+++ b/borogove/OMEMO.hx
@@ -1,11 +1,11 @@
-package snikket;
+package borogove;
 
 import haxe.io.BytesBuffer;
-import snikket.EncryptedMessage;
-import snikket.Message;
+import borogove.EncryptedMessage;
+import borogove.Message;
 
-import snikket.queries.PubsubGet;
-import snikket.queries.PubsubPublish;
+import borogove.queries.PubsubGet;
+import borogove.queries.PubsubPublish;
 
 import haxe.crypto.Base64;
 import haxe.io.Bytes;
@@ -14,7 +14,7 @@ import haxe.io.BytesData;
 import thenshim.Promise;
 import thenshim.PromiseTools;
 
-using snikket.SignalProtocol;
+using borogove.SignalProtocol;
 
 #if js
 import js.Browser;
diff --git a/snikket/Participant.hx b/borogove/Participant.hx
similarity index 93%
rename from snikket/Participant.hx
rename to borogove/Participant.hx
index 3e7cb86..a68ff86 100644
--- a/snikket/Participant.hx
+++ b/borogove/Participant.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 #if cpp
 import HaxeCBridge;
@@ -16,7 +16,7 @@ class Participant {
 	public final placeholderUri: String;
 	public final isSelf: Bool;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(displayName: String, photoUri: Null<String>, placeholderUri: String, isSelf: Bool) {
 		this.displayName = displayName;
 		this.photoUri = photoUri;
diff --git a/snikket/PeerConnection.js.hx b/borogove/PeerConnection.js.hx
similarity index 100%
rename from snikket/PeerConnection.js.hx
rename to borogove/PeerConnection.js.hx
diff --git a/snikket/Persistence.hx b/borogove/Persistence.hx
similarity index 96%
rename from snikket/Persistence.hx
rename to borogove/Persistence.hx
index 6def8fa..205da7c 100644
--- a/snikket/Persistence.hx
+++ b/borogove/Persistence.hx
@@ -1,14 +1,14 @@
-package snikket;
+package borogove;
 
 import haxe.io.BytesData;
-import snikket.Chat;
-import snikket.ChatMessage;
-import snikket.Message;
+import borogove.Chat;
+import borogove.ChatMessage;
+import borogove.Message;
 import thenshim.Promise;
 
 #if !NO_OMEMO
-import snikket.OMEMO;
-using snikket.SignalProtocol;
+import borogove.OMEMO;
+using borogove.SignalProtocol;
 #end
 
 #if cpp
diff --git a/snikket/Presence.hx b/borogove/Presence.hx
similarity index 92%
rename from snikket/Presence.hx
rename to borogove/Presence.hx
index d516124..cb45e4a 100644
--- a/snikket/Presence.hx
+++ b/borogove/Presence.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 @:expose
 class Presence {
diff --git a/snikket/PubsubEvent.hx b/borogove/PubsubEvent.hx
similarity index 98%
rename from snikket/PubsubEvent.hx
rename to borogove/PubsubEvent.hx
index b5de0d3..0bb09be 100644
--- a/snikket/PubsubEvent.hx
+++ b/borogove/PubsubEvent.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 class PubsubEvent {
 	private var from:Null<String>;
diff --git a/snikket/Push.hx b/borogove/Push.hx
similarity index 87%
rename from snikket/Push.hx
rename to borogove/Push.hx
index f416100..fcacbe6 100644
--- a/snikket/Push.hx
+++ b/borogove/Push.hx
@@ -1,10 +1,10 @@
-package snikket;
+package borogove;
 
-import snikket.ChatMessage;
-import snikket.JID;
-import snikket.Notification;
-import snikket.Persistence;
-import snikket.Stanza;
+import borogove.ChatMessage;
+import borogove.JID;
+import borogove.Notification;
+import borogove.Persistence;
+import borogove.Stanza;
 
 #if cpp
 import HaxeCBridge;
diff --git a/snikket/Reaction.hx b/borogove/Reaction.hx
similarity index 94%
rename from snikket/Reaction.hx
rename to borogove/Reaction.hx
index 08bc70b..d8bc0e9 100644
--- a/snikket/Reaction.hx
+++ b/borogove/Reaction.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 using StringTools;
 
@@ -19,7 +19,7 @@ class Reaction {
 	public final key: String;
 	public final envelopeId: Null<String>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	public function new(senderId: String, timestamp: String, text: String, envelopeId: Null<String> = null, key: Null<String> = null) {
 		this.senderId = senderId;
 		this.timestamp = timestamp;
@@ -37,7 +37,7 @@ class Reaction {
 		return new Reaction("", "", unicode);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function render<T>(forText: (String) -> T, forImage: (String, String) -> T) {
 		return forText(text + "\u{fe0f}");
 	}
@@ -51,7 +51,7 @@ class Reaction {
 class CustomEmojiReaction extends Reaction {
 	public final uri: String;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(senderId: String, timestamp: String, text: String, uri: String, envelopeId: Null<String> = null) {
 		super(senderId, timestamp, text, envelopeId, uri);
 		this.uri = uri;
@@ -67,7 +67,7 @@ class CustomEmojiReaction extends Reaction {
 		return new CustomEmojiReaction("", "", text, uri);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	override public function render<T>(forText: (String) -> T, forImage: (String, String) -> T) {
 		final hash = Hash.fromUri(uri);
 		return forImage(text, hash?.toUri() ?? uri);
diff --git a/snikket/ReactionUpdate.hx b/borogove/ReactionUpdate.hx
similarity index 97%
rename from snikket/ReactionUpdate.hx
rename to borogove/ReactionUpdate.hx
index becf330..292b57b 100644
--- a/snikket/ReactionUpdate.hx
+++ b/borogove/ReactionUpdate.hx
@@ -1,6 +1,6 @@
-package snikket;
+package borogove;
 
-import snikket.Reaction;
+import borogove.Reaction;
 using Lambda;
 
 enum abstract ReactionUpdateKind(Int) {
@@ -63,7 +63,7 @@ class ReactionUpdate {
 		throw "Unknown kind of reaction update";
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function inlineHashReferences() {
 		final hashes = [];
 		for (r in reactions) {
@@ -78,7 +78,7 @@ class ReactionUpdate {
 
 	// Note that using this version means you don't get any fallbacks!
 	// It also won't update any custom emoji reactions at all
-	@:allow(snikket)
+	@:allow(borogove)
 	private function asStanza():Stanza {
 		if (kind != EmojiReactions) throw "Cannot make a reaction XEP stanza for this kind";
 
diff --git a/snikket/ResultSet.hx b/borogove/ResultSet.hx
similarity index 97%
rename from snikket/ResultSet.hx
rename to borogove/ResultSet.hx
index 5a95481..8f9d0c2 100644
--- a/snikket/ResultSet.hx
+++ b/borogove/ResultSet.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 typedef ResultSetPageRequest = {
 	var ?before : String; // Set to request the page before a given id (or empty string to request the very last page)
diff --git a/snikket/SignalProtocol.hx b/borogove/SignalProtocol.hx
similarity index 99%
rename from snikket/SignalProtocol.hx
rename to borogove/SignalProtocol.hx
index 3ecea69..fe91b23 100644
--- a/snikket/SignalProtocol.hx
+++ b/borogove/SignalProtocol.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import haxe.io.BytesData;
 
diff --git a/snikket/Stanza.hx b/borogove/Stanza.hx
similarity index 98%
rename from snikket/Stanza.hx
rename to borogove/Stanza.hx
index d480965..91e68be 100644
--- a/snikket/Stanza.hx
+++ b/borogove/Stanza.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
@@ -126,13 +126,13 @@ class Stanza implements NodeInterface {
 
 	public static function parse(s:String):Stanza {
 		#if cpp
-		return snikket.streams.XmppStropheStream.parseStanza(s);
+		return borogove.streams.XmppStropheStream.parseStanza(s);
 		#else
 		return fromXml(Xml.parse(s));
 		#end
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	@:allow(test)
 	private static function fromXml(el:Xml):Stanza {
 		if(el.nodeType == XmlType.Document) {
@@ -186,7 +186,7 @@ class Stanza implements NodeInterface {
 		return this;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function addChildren(children:Iterable<Stanza>) {
 		for (child in children) {
 			addChild(child);
@@ -194,7 +194,7 @@ class Stanza implements NodeInterface {
 		return this;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function addChildNodes(children:Iterable<Node>) {
 		for (child in children) {
 			addDirectChild(child);
diff --git a/borogove/Stream.cpp.hx b/borogove/Stream.cpp.hx
new file mode 100644
index 0000000..6b1c32d
--- /dev/null
+++ b/borogove/Stream.cpp.hx
@@ -0,0 +1,5 @@
+package borogove;
+
+import borogove.streams.XmppStropheStream;
+
+typedef Stream = borogove.streams.XmppStropheStream;
diff --git a/borogove/Stream.js.hx b/borogove/Stream.js.hx
new file mode 100644
index 0000000..24dbdba
--- /dev/null
+++ b/borogove/Stream.js.hx
@@ -0,0 +1,5 @@
+package borogove;
+
+import borogove.streams.XmppJsStream;
+
+typedef Stream = borogove.streams.XmppJsStream;
diff --git a/snikket/StringUtil.hx b/borogove/StringUtil.hx
similarity index 98%
rename from snikket/StringUtil.hx
rename to borogove/StringUtil.hx
index 030c751..7de8d30 100644
--- a/snikket/StringUtil.hx
+++ b/borogove/StringUtil.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 class StringUtil {
 	@:access(StringTools)
diff --git a/snikket/Util.hx b/borogove/Util.hx
similarity index 99%
rename from snikket/Util.hx
rename to borogove/Util.hx
index 7227e9c..6d87e08 100644
--- a/snikket/Util.hx
+++ b/borogove/Util.hx
@@ -1,4 +1,4 @@
-package snikket;
+package borogove;
 
 function setupTrace() {
 #if js
diff --git a/snikket/Version.hx b/borogove/Version.hx
similarity index 72%
rename from snikket/Version.hx
rename to borogove/Version.hx
index c01a954..a1b58b6 100644
--- a/snikket/Version.hx
+++ b/borogove/Version.hx
@@ -1,6 +1,6 @@
-package snikket;
+package borogove;
 
-import snikket.Util;
+import borogove.Util;
 
 @:expose
 class Version {
diff --git a/snikket/XEP0393.hx b/borogove/XEP0393.hx
similarity index 98%
rename from snikket/XEP0393.hx
rename to borogove/XEP0393.hx
index 9972a06..e8fc076 100644
--- a/snikket/XEP0393.hx
+++ b/borogove/XEP0393.hx
@@ -1,7 +1,7 @@
-package snikket;
+package borogove;
 
-import snikket.Autolink;
-import snikket.Stanza;
+import borogove.Autolink;
+import borogove.Stanza;
 
 class XEP0393 {
 	public static function parse(styled: UnicodeString) {
diff --git a/snikket/jingle/Group.hx b/borogove/calls/Group.hx
similarity index 97%
rename from snikket/jingle/Group.hx
rename to borogove/calls/Group.hx
index 2f940fa..54920e0 100644
--- a/snikket/jingle/Group.hx
+++ b/borogove/calls/Group.hx
@@ -1,4 +1,4 @@
-package snikket.jingle;
+package borogove.calls;
 
 class Group {
 	 public var semantics (default, null): String;
diff --git a/snikket/jingle/IceServer.hx b/borogove/calls/IceServer.hx
similarity index 89%
rename from snikket/jingle/IceServer.hx
rename to borogove/calls/IceServer.hx
index dc789e4..028f646 100644
--- a/snikket/jingle/IceServer.hx
+++ b/borogove/calls/IceServer.hx
@@ -1,4 +1,4 @@
-package snikket.jingle;
+package borogove.calls;
 // from js.html.rtc but cross platform
 
 typedef IceServer = {
diff --git a/snikket/jingle/PeerConnection.cpp.hx b/borogove/calls/PeerConnection.cpp.hx
similarity index 99%
rename from snikket/jingle/PeerConnection.cpp.hx
rename to borogove/calls/PeerConnection.cpp.hx
index 14d8866..a5168b7 100644
--- a/snikket/jingle/PeerConnection.cpp.hx
+++ b/borogove/calls/PeerConnection.cpp.hx
@@ -1,7 +1,7 @@
-package snikket.jingle;
+package borogove.calls;
 
 import thenshim.Promise;
-import snikket.ID;
+import borogove.ID;
 import HaxeCBridge;
 using Lambda;
 
@@ -240,7 +240,7 @@ class DTMFSender {
 	private var timer: haxe.Timer;
 	private final tones: Array<cpp.UInt8> = [];
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(track: MediaStreamTrack) {
 		this.track = track;
 		track.onAudioLoop(() -> {
@@ -319,9 +319,9 @@ class DTMFSender {
 @:build(HaxeCBridge.expose())
 @:build(HaxeSwiftBridge.expose())
 class AudioFormat {
-	@:allow(snikket)
+	@:allow(borogove)
 	private final format: String;
-	@:allow(snikket)
+	@:allow(borogove)
 	private final payloadType: cpp.UInt8;
 	public final clockRate: Int;
 	public final channels: Int;
@@ -353,20 +353,20 @@ class MediaStreamTrack {
 	private var bufferSizeInSeconds = 0.0;
 	private var mutex = new sys.thread.Mutex();
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var media(get, default): StdOptional<DescriptionMedia>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private var track(default, set): SharedPtr<Track>;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function fromTrack(t: SharedPtr<Track>): MediaStreamTrack {
 		final media = new MediaStreamTrack();
 		media.track = t;
 		return media;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new() {
 		eventLoop = sys.thread.Thread.createWithEventLoop(() -> {
 			while(alive) { sys.thread.Thread.processEvents(); sys.thread.Thread.current().events.wait(); }
@@ -606,12 +606,12 @@ class MediaStreamTrack {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function onAudioLoop(callback: ()->Void) {
 		eventLoop.run(callback);
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function write(payload: Array<cpp.UInt8>, payloadType: cpp.UInt8, clockRate: Int) {
 		if (untyped __cpp__("!track") || !track.ref.isOpen()) return;
 
@@ -622,7 +622,7 @@ class MediaStreamTrack {
 		// some payloads all occur at the same timestamp, so this is up to the caller
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function advanceTimestamp(samples: Int) {
 		rtpPacketizationConfig.ref.timestamp = rtpPacketizationConfig.ref.timestamp + samples;
 	}
@@ -802,7 +802,7 @@ class PeerConnection {
 	var pendingTracks: Array<MediaStreamTrack> = [];
 
 	public function new(?configuration : Configuration, ?constraints : Dynamic) {
-		if (Sys.getEnv("SNIKKET_WEBRTC_DEBUG") != null) {
+		if (Sys.getEnv("BOROGOVE_WEBRTC_DEBUG") != null) {
 			untyped __cpp__("rtc::InitLogger(rtc::LogLevel::Verbose);");
 		}
 		mainLoop = sys.thread.Thread.current().events;
diff --git a/snikket/jingle/PeerConnection.js.hx b/borogove/calls/PeerConnection.js.hx
similarity index 93%
rename from snikket/jingle/PeerConnection.js.hx
rename to borogove/calls/PeerConnection.js.hx
index dd5f3d1..77757c1 100644
--- a/snikket/jingle/PeerConnection.js.hx
+++ b/borogove/calls/PeerConnection.js.hx
@@ -1,4 +1,4 @@
-package snikket.jingle;
+package borogove.calls;
 
 import js.html.rtc.PeerConnection;
 
diff --git a/snikket/jingle/Session.hx b/borogove/calls/Session.hx
similarity index 97%
rename from snikket/jingle/Session.hx
rename to borogove/calls/Session.hx
index 2371c59..ed0ffd0 100644
--- a/snikket/jingle/Session.hx
+++ b/borogove/calls/Session.hx
@@ -1,11 +1,11 @@
-package snikket.jingle;
+package borogove.calls;
 
 import thenshim.Promise;
-import snikket.ChatMessage;
-import snikket.Message;
-import snikket.ID;
-import snikket.jingle.PeerConnection;
-import snikket.jingle.SessionDescription;
+import borogove.ChatMessage;
+import borogove.Message;
+import borogove.ID;
+import borogove.calls.PeerConnection;
+import borogove.calls.SessionDescription;
 using Lambda;
 using thenshim.PromiseTools;
 
@@ -28,19 +28,19 @@ enum abstract CallStatus(Int) {
 interface Session {
 	public var sid (get, null): String;
 	public var chatId (get, null): String;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function initiate(stanza: Stanza): InitiatedSession;
 	public function accept(): Void;
 	public function hangup(): Void;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function retract(): Void;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function terminate(): Void;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function contentAdd(stanza: Stanza): Void;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function contentAccept(stanza: Stanza): Void;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function transportInfo(stanza: Stanza): Promise<Any>;
 	public function addMedia(streams: Array<MediaStream>): Void;
 	public function callStatus():CallStatus;
@@ -315,7 +315,7 @@ class InitiatedSession implements Session {
 	private final initiator: Bool;
 	private var candidatesDone: Null<()->Void> = null;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(client: Client, counterpart: JID, sid: String, remoteDescription: Null<SessionDescription>) {
 		this.client = client;
 		this.counterpart = counterpart;
@@ -324,7 +324,7 @@ class InitiatedSession implements Session {
 		this.initiator = remoteDescription == null;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private static function fromSessionInitiate(client: Client, stanza: Stanza): InitiatedSession {
 		final jingle = stanza.getChild("jingle", "urn:xmpp:jingle:1");
 		final session = new InitiatedSession(
@@ -345,12 +345,12 @@ class InitiatedSession implements Session {
 		return counterpart.asBare().asString();
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function ring() {
 		client.trigger("call/ring", { session: this });
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function retract() {
 		trace("Tried to retract session in wrong state: " + sid, this);
 	}
@@ -373,13 +373,13 @@ class InitiatedSession implements Session {
 		terminate();
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function initiate(stanza: Stanza) {
 		trace("Trying to initiate already initiated session: " + sid);
 		return throw "already initiated";
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function terminate() {
 		if (pc == null) return;
 		pc.close();
@@ -403,7 +403,7 @@ class InitiatedSession implements Session {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function contentAdd(stanza: Stanza) {
 		if (remoteDescription == null) throw "Got content-add before session-accept";
 
@@ -442,7 +442,7 @@ class InitiatedSession implements Session {
 		});
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function contentAccept(stanza: Stanza) {
 		if (remoteDescription == null) throw "Got content-accept before session-accept";
 		// TODO: check if matches a content-add we sent?
@@ -455,7 +455,7 @@ class InitiatedSession implements Session {
 		pc.setRemoteDescription({ type: SdpType.ANSWER, sdp: remoteDescription.toSdp() });
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function transportInfo(stanza: Stanza) {
 		if (pc == null || remoteDescription == null) {
 			queuedInboundTransportInfo.push(stanza);
diff --git a/snikket/jingle/SessionDescription.hx b/borogove/calls/SessionDescription.hx
similarity index 99%
rename from snikket/jingle/SessionDescription.hx
rename to borogove/calls/SessionDescription.hx
index 58cdc83..5da2555 100644
--- a/snikket/jingle/SessionDescription.hx
+++ b/borogove/calls/SessionDescription.hx
@@ -1,4 +1,4 @@
-package snikket.jingle;
+package borogove.calls;
 
 import haxe.DynamicAccess;
 using Lambda;
diff --git a/snikket/jingle/Stream.cpp.hx b/borogove/calls/Stream.cpp.hx
similarity index 100%
rename from snikket/jingle/Stream.cpp.hx
rename to borogove/calls/Stream.cpp.hx
diff --git a/snikket/persistence/Custom.hx b/borogove/persistence/Custom.hx
similarity index 98%
rename from snikket/persistence/Custom.hx
rename to borogove/persistence/Custom.hx
index ed1f1c6..c19c5dc 100644
--- a/snikket/persistence/Custom.hx
+++ b/borogove/persistence/Custom.hx
@@ -1,12 +1,12 @@
-package snikket.persistence;
+package borogove.persistence;
 
 #if cpp
 import HaxeCBridge;
 #end
 import haxe.io.BytesData;
-import snikket.Caps;
-import snikket.Chat;
-import snikket.Message;
+import borogove.Caps;
+import borogove.Chat;
+import borogove.Message;
 
 @:expose
 #if cpp
@@ -190,7 +190,7 @@ class Custom implements Persistence {
 class Callback<T> {
 	private final f: T->Void;
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function new(f: T->Void) {
 		this.f = f;
 	}
diff --git a/snikket/persistence/Dummy.hx b/borogove/persistence/Dummy.hx
similarity index 97%
rename from snikket/persistence/Dummy.hx
rename to borogove/persistence/Dummy.hx
index 3a36acb..48d6f8f 100644
--- a/snikket/persistence/Dummy.hx
+++ b/borogove/persistence/Dummy.hx
@@ -1,16 +1,16 @@
-package snikket.persistence;
+package borogove.persistence;
 
 #if cpp
 import HaxeCBridge;
 #end
 import haxe.io.BytesData;
-import snikket.Caps;
-import snikket.Chat;
-import snikket.Message;
+import borogove.Caps;
+import borogove.Chat;
+import borogove.Message;
 import thenshim.Promise;
 #if !NO_OMEMO
-import snikket.OMEMO;
-using snikket.SignalProtocol;
+import borogove.OMEMO;
+using borogove.SignalProtocol;
 #end
 
 
diff --git a/snikket/persistence/IDB.js b/borogove/persistence/IDB.js
similarity index 95%
rename from snikket/persistence/IDB.js
rename to borogove/persistence/IDB.js
index 8e95739..e1a4556 100644
--- a/snikket/persistence/IDB.js
+++ b/borogove/persistence/IDB.js
@@ -1,8 +1,8 @@
 // This example persistence driver is written in JavaScript
 // so that SDK users can easily see how to write their own
 
-import { snikket as enums } from "./snikket-enums.js";
-import { snikket } from "./snikket.js";
+import { borogove as enums } from "./borogove-enums.js";
+import { borogove } from "./borogove.js";
 
 export default (dbname, media, tokenize, stemmer) => {
 	if (!tokenize) tokenize = function(s) { return s.split(" "); }
@@ -96,17 +96,17 @@ export default (dbname, media, tokenize, stemmer) => {
 
 	function hydrateStringReaction(r, senderId, timestamp) {
 		if (r.startsWith("ni://")){
-			return new snikket.CustomEmojiReaction(senderId, timestamp, "", r);
+			return new borogove.CustomEmojiReaction(senderId, timestamp, "", r);
 		} else {
-			return new snikket.Reaction(senderId, timestamp, r);
+			return new borogove.Reaction(senderId, timestamp, r);
 		}
 	}
 
 	function hydrateObjectReaction(r) {
 		if (r.uri) {
-			return new snikket.CustomEmojiReaction(r.senderId, r.timestamp, r.text, r.uri, r.envelopeId);
+			return new borogove.CustomEmojiReaction(r.senderId, r.timestamp, r.text, r.uri, r.envelopeId);
 		} else {
-			return new snikket.Reaction(r.senderId, r.timestamp, r.text, r.envelopeId, r.key);
+			return new borogove.Reaction(r.senderId, r.timestamp, r.text, r.envelopeId, r.key);
 		}
 	}
 
@@ -130,7 +130,7 @@ export default (dbname, media, tokenize, stemmer) => {
 		const tx = db.transaction(["messages"], "readonly");
 		const store = tx.objectStore("messages");
 
-		const message = new snikket.ChatMessageBuilder();
+		const message = new borogove.ChatMessageBuilder();
 		message.localId = value.localId ? value.localId : null;
 		message.serverId = value.serverId ? value.serverId : null;
 		message.serverIdBy = value.serverIdBy ? value.serverIdBy : null;
@@ -139,20 +139,20 @@ export default (dbname, media, tokenize, stemmer) => {
 		message.direction = value.direction;
 		message.status = value.status;
 		message.timestamp = value.timestamp && value.timestamp.toISOString();
-		message.from = value.from && snikket.JID.parse(value.from);
-		message.sender = value.sender && snikket.JID.parse(value.sender);
+		message.from = value.from && borogove.JID.parse(value.from);
+		message.sender = value.sender && borogove.JID.parse(value.sender);
 		message.senderId = value.senderId;
-		message.recipients = value.recipients.map((r) => snikket.JID.parse(r));
-		message.to = value.to ? snikket.JID.parse(value.to) : message.recipients[0];
-		message.replyTo = value.replyTo.map((r) => snikket.JID.parse(r));
+		message.recipients = value.recipients.map((r) => borogove.JID.parse(r));
+		message.to = value.to ? borogove.JID.parse(value.to) : message.recipients[0];
+		message.replyTo = value.replyTo.map((r) => borogove.JID.parse(r));
 		message.threadId = value.threadId;
 		message.attachments = value.attachments;
 		message.reactions = hydrateReactions(value.reactions, message.timestamp);
 		message.text = value.text;
 		message.lang = value.lang;
 		message.type = value.type || (value.isGroupchat || value.groupchat ? enums.MessageType.Channel : enums.MessageType.Chat);
-		message.payloads = (value.payloads || []).map(snikket.Stanza.parse);
-		message.stanza = value.stanza && snikket.Stanza.parse(value.stanza);
+		message.payloads = (value.payloads || []).map(borogove.Stanza.parse);
+		message.stanza = value.stanza && borogove.Stanza.parse(value.stanza);
 		if (!message.localId && !message.serverId) message.localId = "NO_ID"; // bad data
 		return message.build();
 	}
@@ -281,7 +281,7 @@ export default (dbname, media, tokenize, stemmer) => {
 					notificationSettings: chat.notificationsFiltered() ? { mention: chat.notifyMention(), reply: chat.notifyReply() } : null,
 					disco: chat.disco,
 					omemoDevices: chat.omemoContactDeviceIDs,
-				class: chat instanceof snikket.DirectChat ? "DirectChat" : (chat instanceof snikket.Channel ? "Channel" : "Chat")
+				class: chat instanceof borogove.DirectChat ? "DirectChat" : (chat instanceof borogove.Channel ? "Channel" : "Chat")
 				});
 			}
 		},
@@ -291,12 +291,12 @@ export default (dbname, media, tokenize, stemmer) => {
 			const store = tx.objectStore("chats");
 			const range = IDBKeyRange.bound([account], [account, []]);
 			const result = await promisifyRequest(store.getAll(range));
-			return await Promise.all(result.map(async (r) => new snikket.SerializedChat(
+			return await Promise.all(result.map(async (r) => new borogove.SerializedChat(
 				r.chatId,
 				r.trusted,
 				r.avatarSha1,
 				new Map(await Promise.all((r.presence instanceof Map ? [...r.presence.entries()] : Object.entries(r.presence)).map(
-					async ([k, p]) => [k, new snikket.Presence(p.caps && await this.getCaps(p.caps), p.mucUser && snikket.Stanza.parse(p.mucUser))]
+					async ([k, p]) => [k, new borogove.Presence(p.caps && await this.getCaps(p.caps), p.mucUser && borogove.Stanza.parse(p.mucUser))]
 				))),
 				r.displayName,
 				r.uiState,
@@ -307,7 +307,7 @@ export default (dbname, media, tokenize, stemmer) => {
 				r.notificationSettings === undefined ? null : r.notificationSettings != null,
 				r.notificationSettings?.mention,
 				r.notificationSettings?.reply,
-				r.disco ? new snikket.Caps(r.disco.node, r.disco.identities, r.disco.features) : null,
+				r.disco ? new borogove.Caps(r.disco.node, r.disco.identities, r.disco.features) : null,
             r.omemoDevices || [],
 				r.class
 			)));
@@ -426,7 +426,7 @@ export default (dbname, media, tokenize, stemmer) => {
 									if (react.senderId === message.senderId && !previouslyAppended.includes(k)) reactions.push(react);
 								}
 							}
-							this.storeReaction(account, new snikket.ReactionUpdate(message.localId, reactionResult.value.serverId, reactionResult.value.serverIdBy, reactionResult.value.localId, message.chatId(), message.senderId, message.timestamp, reactions, enums.ReactionUpdateKind.CompleteReactions), callback);
+							this.storeReaction(account, new borogove.ReactionUpdate(message.localId, reactionResult.value.serverId, reactionResult.value.serverIdBy, reactionResult.value.localId, message.chatId(), message.senderId, message.timestamp, reactions, enums.ReactionUpdateKind.CompleteReactions), callback);
 						});
 						return true;
 					} else if (result?.value && !message.isIncoming() && result?.value.direction === enums.MessageDirection.MessageSent && message.versions.length < 1) {
@@ -611,7 +611,7 @@ export default (dbname, media, tokenize, stemmer) => {
 			const store = tx.objectStore("keyvaluepairs");
 			const raw = await promisifyRequest(store.get("caps:" + ver));
 			if (raw) {
-				return new snikket.Caps(raw.node, raw.identities.map((identity) => new snikket.Identity(identity.category, identity.type, identity.name)), raw.features);
+				return new borogove.Caps(raw.node, raw.identities.map((identity) => new borogove.Identity(identity.category, identity.type, identity.name)), raw.features);
 			}
 
 			return null;
diff --git a/snikket/persistence/KeyValueStore.hx b/borogove/persistence/KeyValueStore.hx
similarity index 88%
rename from snikket/persistence/KeyValueStore.hx
rename to borogove/persistence/KeyValueStore.hx
index e134e1f..84bd59c 100644
--- a/snikket/persistence/KeyValueStore.hx
+++ b/borogove/persistence/KeyValueStore.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 import thenshim.Promise;
 
diff --git a/snikket/persistence/MediaStore.hx b/borogove/persistence/MediaStore.hx
similarity index 89%
rename from snikket/persistence/MediaStore.hx
rename to borogove/persistence/MediaStore.hx
index 9f1bec8..368020d 100644
--- a/snikket/persistence/MediaStore.hx
+++ b/borogove/persistence/MediaStore.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 import thenshim.Promise;
 import haxe.io.BytesData;
@@ -10,6 +10,6 @@ interface MediaStore {
 	public function hasMedia(hashAlgorithm:String, hash:BytesData): Promise<Bool>;
 	public function removeMedia(hashAlgorithm:String, hash:BytesData):Void;
 	public function storeMedia(mime:String, bytes:BytesData): Promise<Bool>;
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setKV(kv: KeyValueStore):Void;
 }
diff --git a/snikket/persistence/MediaStoreCache.js b/borogove/persistence/MediaStoreCache.js
similarity index 100%
rename from snikket/persistence/MediaStoreCache.js
rename to borogove/persistence/MediaStoreCache.js
diff --git a/snikket/persistence/MediaStoreFS.hx b/borogove/persistence/MediaStoreFS.hx
similarity index 97%
rename from snikket/persistence/MediaStoreFS.hx
rename to borogove/persistence/MediaStoreFS.hx
index 2f3c8da..ef2300e 100644
--- a/snikket/persistence/MediaStoreFS.hx
+++ b/borogove/persistence/MediaStoreFS.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 #if cpp
 import HaxeCBridge;
@@ -21,7 +21,7 @@ class MediaStoreFS implements MediaStore {
 		blobpath = path;
 	}
 
-	@:allow(snikket)
+	@:allow(borogove)
 	private function setKV(kv: KeyValueStore) {
 		this.kv = kv;
 	}
diff --git a/snikket/persistence/Sqlite.hx b/borogove/persistence/Sqlite.hx
similarity index 99%
rename from snikket/persistence/Sqlite.hx
rename to borogove/persistence/Sqlite.hx
index a92a9c3..8d38c27 100644
--- a/snikket/persistence/Sqlite.hx
+++ b/borogove/persistence/Sqlite.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 #if cpp
 import HaxeCBridge;
@@ -9,14 +9,14 @@ import haxe.crypto.Base64;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 import thenshim.Promise;
-import snikket.Caps;
-import snikket.Chat;
-import snikket.Message;
-import snikket.Reaction;
-import snikket.ReactionUpdate;
+import borogove.Caps;
+import borogove.Chat;
+import borogove.Message;
+import borogove.Reaction;
+import borogove.ReactionUpdate;
 #if !NO_OMEMO
-import snikket.OMEMO;
-using snikket.SignalProtocol;
+import borogove.OMEMO;
+using borogove.SignalProtocol;
 #end
 
 using Lambda;
diff --git a/snikket/persistence/SqliteDriver.hx b/borogove/persistence/SqliteDriver.hx
similarity index 98%
rename from snikket/persistence/SqliteDriver.hx
rename to borogove/persistence/SqliteDriver.hx
index b63c912..3d8bc8e 100644
--- a/snikket/persistence/SqliteDriver.hx
+++ b/borogove/persistence/SqliteDriver.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 import haxe.io.Bytes;
 import thenshim.Promise;
diff --git a/snikket/persistence/SqliteDriver.js.hx b/borogove/persistence/SqliteDriver.js.hx
similarity index 98%
rename from snikket/persistence/SqliteDriver.js.hx
rename to borogove/persistence/SqliteDriver.js.hx
index 5346302..55e9421 100644
--- a/snikket/persistence/SqliteDriver.js.hx
+++ b/borogove/persistence/SqliteDriver.js.hx
@@ -1,4 +1,4 @@
-package snikket.persistence;
+package borogove.persistence;
 
 import haxe.io.Bytes;
 import thenshim.Promise;
diff --git a/snikket/persistence/sqlite-worker1.mjs b/borogove/persistence/sqlite-worker1.mjs
similarity index 100%
rename from snikket/persistence/sqlite-worker1.mjs
rename to borogove/persistence/sqlite-worker1.mjs
diff --git a/snikket/queries/BlocklistGet.hx b/borogove/queries/BlocklistGet.hx
similarity index 85%
rename from snikket/queries/BlocklistGet.hx
rename to borogove/queries/BlocklistGet.hx
index a4a54f0..156de6e 100644
--- a/snikket/queries/BlocklistGet.hx
+++ b/borogove/queries/BlocklistGet.hx
@@ -1,13 +1,13 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class BlocklistGet extends GenericQuery {
 	public var xmlns(default, null) = "urn:xmpp:blocking";
diff --git a/snikket/queries/BoB.hx b/borogove/queries/BoB.hx
similarity index 98%
rename from snikket/queries/BoB.hx
rename to borogove/queries/BoB.hx
index 96ce1c2..a5515f4 100644
--- a/snikket/queries/BoB.hx
+++ b/borogove/queries/BoB.hx
@@ -1,4 +1,4 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.crypto.Base64;
 import haxe.io.Bytes;
diff --git a/snikket/queries/DiscoInfoGet.hx b/borogove/queries/DiscoInfoGet.hx
similarity index 87%
rename from snikket/queries/DiscoInfoGet.hx
rename to borogove/queries/DiscoInfoGet.hx
index b1521bc..4eeff2d 100644
--- a/snikket/queries/DiscoInfoGet.hx
+++ b/borogove/queries/DiscoInfoGet.hx
@@ -1,14 +1,14 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
-import snikket.Caps;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
+import borogove.Caps;
 
 class DiscoInfoGet extends GenericQuery {
 	public var xmlns(default, null) = "http://jabber.org/protocol/disco#info";
diff --git a/snikket/queries/DiscoItemsGet.hx b/borogove/queries/DiscoItemsGet.hx
similarity index 86%
rename from snikket/queries/DiscoItemsGet.hx
rename to borogove/queries/DiscoItemsGet.hx
index 0c28d8f..0f6394c 100644
--- a/snikket/queries/DiscoItemsGet.hx
+++ b/borogove/queries/DiscoItemsGet.hx
@@ -1,14 +1,14 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.JID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.JID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class DiscoItemsGet extends GenericQuery {
 	public var xmlns(default, null) = "http://jabber.org/protocol/disco#items";
diff --git a/snikket/queries/ExtDiscoGet.hx b/borogove/queries/ExtDiscoGet.hx
similarity index 82%
rename from snikket/queries/ExtDiscoGet.hx
rename to borogove/queries/ExtDiscoGet.hx
index 6a06228..3288511 100644
--- a/snikket/queries/ExtDiscoGet.hx
+++ b/borogove/queries/ExtDiscoGet.hx
@@ -1,14 +1,14 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
-import snikket.Caps;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
+import borogove.Caps;
 
 class ExtDiscoGet extends GenericQuery {
 	public var xmlns(default, null) = "urn:xmpp:extdisco:2";
diff --git a/snikket/queries/GenericQuery.hx b/borogove/queries/GenericQuery.hx
similarity index 92%
rename from snikket/queries/GenericQuery.hx
rename to borogove/queries/GenericQuery.hx
index f32c5b1..a22ce55 100644
--- a/snikket/queries/GenericQuery.hx
+++ b/borogove/queries/GenericQuery.hx
@@ -1,8 +1,8 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.Exception;
 
-import snikket.Stanza;
+import borogove.Stanza;
 
 abstract class GenericQuery {
 	private var queryStanza:Stanza;
diff --git a/snikket/queries/HttpUploadSlot.hx b/borogove/queries/HttpUploadSlot.hx
similarity index 90%
rename from snikket/queries/HttpUploadSlot.hx
rename to borogove/queries/HttpUploadSlot.hx
index 4cc8e7e..b1d4ead 100644
--- a/snikket/queries/HttpUploadSlot.hx
+++ b/borogove/queries/HttpUploadSlot.hx
@@ -1,4 +1,4 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
@@ -6,12 +6,12 @@ import haxe.crypto.Base64;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 
-import snikket.ID;
-import snikket.JID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.JID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class HttpUploadSlot extends GenericQuery {
 	public var xmlns(default, null) = "urn:xmpp:http:upload:0";
diff --git a/snikket/queries/JabberIqGatewayGet.hx b/borogove/queries/JabberIqGatewayGet.hx
similarity index 89%
rename from snikket/queries/JabberIqGatewayGet.hx
rename to borogove/queries/JabberIqGatewayGet.hx
index b598633..d6edc8e 100644
--- a/snikket/queries/JabberIqGatewayGet.hx
+++ b/borogove/queries/JabberIqGatewayGet.hx
@@ -1,15 +1,15 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 import haxe.ds.Either;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
-import snikket.Caps;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
+import borogove.Caps;
 
 class JabberIqGatewayGet extends GenericQuery {
 	public var xmlns(default, null) = "jabber:iq:gateway";
diff --git a/snikket/queries/MAMQuery.hx b/borogove/queries/MAMQuery.hx
similarity index 95%
rename from snikket/queries/MAMQuery.hx
rename to borogove/queries/MAMQuery.hx
index 6a37ec4..c31d390 100644
--- a/snikket/queries/MAMQuery.hx
+++ b/borogove/queries/MAMQuery.hx
@@ -1,12 +1,12 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 typedef MAMQueryParams = {
 	var ?startTime : String;
diff --git a/snikket/queries/PubsubGet.hx b/borogove/queries/PubsubGet.hx
similarity index 89%
rename from snikket/queries/PubsubGet.hx
rename to borogove/queries/PubsubGet.hx
index 83a2cb8..c59600b 100644
--- a/snikket/queries/PubsubGet.hx
+++ b/borogove/queries/PubsubGet.hx
@@ -1,13 +1,13 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class PubsubGet extends GenericQuery {
 	public var xmlns(default, null) = "http://jabber.org/protocol/pubsub";
diff --git a/snikket/queries/PubsubPublish.hx b/borogove/queries/PubsubPublish.hx
similarity index 94%
rename from snikket/queries/PubsubPublish.hx
rename to borogove/queries/PubsubPublish.hx
index 6f9fc2f..9f089d3 100644
--- a/snikket/queries/PubsubPublish.hx
+++ b/borogove/queries/PubsubPublish.hx
@@ -1,13 +1,13 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 @:structInit
 class PubsubConfig {
diff --git a/snikket/queries/Push2Disable.hx b/borogove/queries/Push2Disable.hx
similarity index 86%
rename from snikket/queries/Push2Disable.hx
rename to borogove/queries/Push2Disable.hx
index cff4808..9f5311c 100644
--- a/snikket/queries/Push2Disable.hx
+++ b/borogove/queries/Push2Disable.hx
@@ -1,11 +1,11 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.io.Bytes;
 import haxe.crypto.Base64;
 
-import snikket.ID;
-import snikket.Stanza;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.Stanza;
+import borogove.queries.GenericQuery;
 
 class Push2Disable extends GenericQuery {
 	public var xmlns(default, null) = "urn:xmpp:push2:0";
diff --git a/snikket/queries/Push2Enable.hx b/borogove/queries/Push2Enable.hx
similarity index 94%
rename from snikket/queries/Push2Enable.hx
rename to borogove/queries/Push2Enable.hx
index 351d9d1..cce915b 100644
--- a/snikket/queries/Push2Enable.hx
+++ b/borogove/queries/Push2Enable.hx
@@ -1,11 +1,11 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.io.Bytes;
 import haxe.crypto.Base64;
 
-import snikket.ID;
-import snikket.Stanza;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.Stanza;
+import borogove.queries.GenericQuery;
 
 class Push2Enable extends GenericQuery {
 	public var xmlns(default, null) = "urn:xmpp:push2:0";
diff --git a/snikket/queries/RosterGet.hx b/borogove/queries/RosterGet.hx
similarity index 88%
rename from snikket/queries/RosterGet.hx
rename to borogove/queries/RosterGet.hx
index 7bcabdd..9932a9f 100644
--- a/snikket/queries/RosterGet.hx
+++ b/borogove/queries/RosterGet.hx
@@ -1,13 +1,13 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class RosterGet extends GenericQuery {
 	public var xmlns(default, null) = "jabber:iq:roster";
diff --git a/snikket/queries/VcardTempGet.hx b/borogove/queries/VcardTempGet.hx
similarity index 88%
rename from snikket/queries/VcardTempGet.hx
rename to borogove/queries/VcardTempGet.hx
index 736ab35..2e31d9a 100644
--- a/snikket/queries/VcardTempGet.hx
+++ b/borogove/queries/VcardTempGet.hx
@@ -1,15 +1,15 @@
-package snikket.queries;
+package borogove.queries;
 
 import haxe.DynamicAccess;
 import haxe.Exception;
 import haxe.crypto.Base64;
 import haxe.io.Bytes;
 
-import snikket.ID;
-import snikket.ResultSet;
-import snikket.Stanza;
-import snikket.Stream;
-import snikket.queries.GenericQuery;
+import borogove.ID;
+import borogove.ResultSet;
+import borogove.Stanza;
+import borogove.Stream;
+import borogove.queries.GenericQuery;
 
 class VcardTempGet extends GenericQuery {
 	public var xmlns(default, null) = "vcard-temp";
diff --git a/snikket/streams/XmppJsStream.hx b/borogove/streams/XmppJsStream.hx
similarity index 99%
rename from snikket/streams/XmppJsStream.hx
rename to borogove/streams/XmppJsStream.hx
index 7f2149f..2df63a0 100644
--- a/snikket/streams/XmppJsStream.hx
+++ b/borogove/streams/XmppJsStream.hx
@@ -1,4 +1,4 @@
-package snikket.streams;
+package borogove.streams;
 
 import haxe.Http;
 import haxe.Json;
@@ -7,9 +7,9 @@ import haxe.io.BytesData;
 import js.lib.Promise;
 using Lambda;
 
-import snikket.FSM;
-import snikket.GenericStream;
-import snikket.Stanza;
+import borogove.FSM;
+import borogove.GenericStream;
+import borogove.Stanza;
 
 @:js.import(@default "@xmpp/sasl-scram-sha-1")
 extern class XmppJsScramSha1 {
diff --git a/snikket/streams/XmppStropheStream.hx b/borogove/streams/XmppStropheStream.hx
similarity index 97%
rename from snikket/streams/XmppStropheStream.hx
rename to borogove/streams/XmppStropheStream.hx
index 52ad562..0fc4fef 100644
--- a/snikket/streams/XmppStropheStream.hx
+++ b/borogove/streams/XmppStropheStream.hx
@@ -1,4 +1,4 @@
-package snikket.streams;
+package borogove.streams;
 
 import haxe.DynamicAccess;
 import haxe.io.Bytes;
@@ -13,9 +13,9 @@ import cpp.NativeString;
 import cpp.RawConstPointer;
 import cpp.RawPointer;
 
-import snikket.GenericStream;
-import snikket.ID;
-import snikket.Stanza;
+import borogove.GenericStream;
+import borogove.ID;
+import borogove.Stanza;
 
 @:include("strophe.h")
 @:native("xmpp_mem_t*")
@@ -178,8 +178,8 @@ extern class StropheStanza {
 	private: xmpp_conn_t *conn;
 ")
 @:cppFileCode("
-xmpp_log_t *logger = getenv(\"SNIKKET_XMPP_DEBUG\") ? xmpp_get_default_logger(XMPP_LEVEL_DEBUG) : 0;
-xmpp_ctx_t* snikket::streams::XmppStropheStream_obj::ctx = xmpp_ctx_new(0,logger);
+xmpp_log_t *logger = getenv(\"BOROGOVE_XMPP_DEBUG\") ? xmpp_get_default_logger(XMPP_LEVEL_DEBUG) : 0;
+xmpp_ctx_t* borogove::streams::XmppStropheStream_obj::ctx = xmpp_ctx_new(0,logger);
 ")
 class XmppStropheStream extends GenericStream {
 	extern private static var ctx:StropheCtx;
diff --git a/browserjs.hxml b/browserjs.hxml
index 08dad6f..aa664ab 100644
--- a/browserjs.hxml
+++ b/browserjs.hxml
@@ -8,13 +8,13 @@
 --library thenshim
 --library tink_http
 
-snikket.Client
-snikket.Push
-snikket.Version
-snikket.persistence.Sqlite
+borogove.Client
+borogove.Push
+borogove.Version
+borogove.persistence.Sqlite
 
 -D js-es=6
 -D hxtsdgen_enums_ts
 -D hxtsdgen_namespaced
 -D NO_OMEMO
---js npm/snikket-browser.js
+--js npm/borogove-browser.js
diff --git a/build-misc/Containerfile.image b/build-misc/Containerfile.image
index 27fc7a2..b6a875e 100644
--- a/build-misc/Containerfile.image
+++ b/build-misc/Containerfile.image
@@ -1,6 +1,6 @@
 FROM docker.io/debian:testing-slim AS build
 
-WORKDIR /usr/src/snikket-sdk
+WORKDIR /usr/src/sdk
 
 ARG HAXE_VERSION=4.3.4
 
@@ -62,9 +62,9 @@ RUN haxelib setup /opt/haxe
 
 ENV HAXE_STD_PATH=/opt/haxe/std
 
-COPY Makefile *.hxml /usr/src/snikket-sdk/
+COPY Makefile *.hxml /usr/src/sdk/
 
-COPY . /usr/src/snikket-sdk/
+COPY . /usr/src/sdk/
 
 RUN make hx-build-dep
 
@@ -76,9 +76,9 @@ RUN haxe test.hxml
 
 FROM docker.io/debian:bookworm-slim
 
-WORKDIR /opt/snikket-sdk
+WORKDIR /opt/sdk
 
-COPY --from=build /usr/src/snikket-sdk/cpp ./cpp
-COPY --from=build /usr/src/snikket-sdk/npm ./npm
+COPY --from=build /usr/src/sdk/cpp ./cpp
+COPY --from=build /usr/src/sdk/npm ./npm
 
-CMD ["cp", "-R", "/opt/snikket-sdk", "/output"]
+CMD ["cp", "-R", "/opt/sdk", "/output"]
diff --git a/cpp.hxml b/cpp.hxml
index 025c9ae..e88bc4d 100644
--- a/cpp.hxml
+++ b/cpp.hxml
@@ -9,15 +9,15 @@
 --library HtmlParser
 
 HaxeCBridge
-snikket.Client
-snikket.Push
-snikket.persistence.Dummy
-snikket.persistence.Sqlite
-snikket.persistence.MediaStoreFS
+borogove.Client
+borogove.Push
+borogove.persistence.Dummy
+borogove.persistence.Sqlite
+borogove.persistence.MediaStoreFS
 
 --cpp cpp
 -D NO_OMEMO
 -D HXCPP_ALIGN_ALLOC
 -D HXCPP_CPP17
--D HaxeCBridge.name=snikket
+-D HaxeCBridge.name=borogove
 -D dll_link
diff --git a/nodejs.hxml b/nodejs.hxml
index e355d5d..86f5891 100644
--- a/nodejs.hxml
+++ b/nodejs.hxml
@@ -9,13 +9,13 @@
 --library thenshim
 --library tink_http
 
-snikket.Client
-snikket.Push
-snikket.Version
-snikket.persistence.Sqlite
+borogove.Client
+borogove.Push
+borogove.Version
+borogove.persistence.Sqlite
 
 -D js-es=6
 -D hxtsdgen_enums_ts
 -D hxtsdgen_namespaced
 -D NO_OMEMO
---js npm/snikket.js
+--js npm/borogove.js
diff --git a/npm/index.ts b/npm/index.ts
index c66e491..c7b097e 100644
--- a/npm/index.ts
+++ b/npm/index.ts
@@ -1,32 +1,32 @@
 import IDBjs from "./IDB.js";
 import MediaStoreCachejs from "./MediaStoreCache.js";
-import { snikket as enums } from "./snikket-enums.js";
-import { snikket } from "./snikket.js";
+import { borogove as enums } from "./borogove-enums.js";
+import { borogove } from "./borogove.js";
 
 // TODO: should we autogenerate this?
-export import AvailableChat = snikket.AvailableChat;
-export import Caps = snikket.Caps;
-export import Channel = snikket.Channel;
-export import Chat = snikket.Chat;
-export import ChatAttachment = snikket.ChatAttachment;
-export import ChatMessage = snikket.ChatMessage;
-export import ChatMessageBuilder = snikket.ChatMessageBuilder;
-export import Client = snikket.Client;
-export import Config = snikket.Config;
-export import CustomEmojiReaction = snikket.CustomEmojiReaction;
-export import DirectChat = snikket.DirectChat;
-export import Hash = snikket.Hash;
-export import Identicon = snikket.Identicon;
-export import Identity = snikket.Identity;
-export import Notification = snikket.Notification;
-export import Participant = snikket.Participant;
-export import Push = snikket.Push;
-export import Reaction = snikket.Reaction;
-export import SerializedChat = snikket.SerializedChat;
-export const VERSION = snikket.Version.HUMAN;
-export import jingle = snikket.jingle;
+export import AvailableChat = borogove.AvailableChat;
+export import Caps = borogove.Caps;
+export import Channel = borogove.Channel;
+export import Chat = borogove.Chat;
+export import ChatAttachment = borogove.ChatAttachment;
+export import ChatMessage = borogove.ChatMessage;
+export import ChatMessageBuilder = borogove.ChatMessageBuilder;
+export import Client = borogove.Client;
+export import Config = borogove.Config;
+export import CustomEmojiReaction = borogove.CustomEmojiReaction;
+export import DirectChat = borogove.DirectChat;
+export import Hash = borogove.Hash;
+export import Identicon = borogove.Identicon;
+export import Identity = borogove.Identity;
+export import Notification = borogove.Notification;
+export import Participant = borogove.Participant;
+export import Push = borogove.Push;
+export import Reaction = borogove.Reaction;
+export import SerializedChat = borogove.SerializedChat;
+export const VERSION = borogove.Version.HUMAN;
+export import calls = borogove.calls;
 
-export import CallStatus = enums.jingle.CallStatus;
+export import CallStatus = enums.calls.CallStatus;
 export import ChatMessageEvent = enums.ChatMessageEvent;
 export import MessageDirection = enums.MessageDirection;
 export import MessageStatus = enums.MessageStatus;
@@ -38,6 +38,6 @@ export import UserState = enums.UserState;
 export namespace persistence {
 	export import IDB = IDBjs;
 	export import MediaStoreCache = MediaStoreCachejs;
-	export import Dummy = snikket.persistence.Dummy;
-	export import Sqlite = snikket.persistence.Sqlite;
+	export import Dummy = borogove.persistence.Dummy;
+	export import Sqlite = borogove.persistence.Sqlite;
 }
diff --git a/npm/package.json b/npm/package.json
index 7baf45f..b4789bf 100644
--- a/npm/package.json
+++ b/npm/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "snikket-sdk",
+  "name": "borogove",
   "version": "0.0.0",
   "description": "Chat SDK",
   "main": "index.js",
@@ -10,7 +10,7 @@
     "*.ts"
   ],
   "browser": {
-    "./snikket.js": "./snikket-browser.js"
+    "./borogove.js": "./borogove-browser.js"
   },
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
diff --git a/snikket/Stream.cpp.hx b/snikket/Stream.cpp.hx
deleted file mode 100644
index f8b19ca..0000000
--- a/snikket/Stream.cpp.hx
+++ /dev/null
@@ -1,5 +0,0 @@
-package snikket;
-
-import snikket.streams.XmppStropheStream;
-
-typedef Stream = snikket.streams.XmppStropheStream;
diff --git a/snikket/Stream.js.hx b/snikket/Stream.js.hx
deleted file mode 100644
index f48d74d..0000000
--- a/snikket/Stream.js.hx
+++ /dev/null
@@ -1,5 +0,0 @@
-package snikket;
-
-import snikket.streams.XmppJsStream;
-
-typedef Stream = snikket.streams.XmppJsStream;
diff --git a/test/TestChatMessageBuilder.hx b/test/TestChatMessageBuilder.hx
index c8e3603..c605b67 100644
--- a/test/TestChatMessageBuilder.hx
+++ b/test/TestChatMessageBuilder.hx
@@ -2,7 +2,7 @@ package test;
 
 import utest.Assert;
 import utest.Async;
-import snikket.ChatMessageBuilder;
+import borogove.ChatMessageBuilder;
 
 class TestChatMessageBuilder extends utest.Test {
 	public function testConvertHtmlToXHTML() {
diff --git a/test/TestSessionDescription.hx b/test/TestSessionDescription.hx
index df36fad..62ea256 100644
--- a/test/TestSessionDescription.hx
+++ b/test/TestSessionDescription.hx
@@ -2,8 +2,8 @@ package test;
 
 import utest.Assert;
 import utest.Async;
-import snikket.Stanza;
-import snikket.jingle.SessionDescription;
+import borogove.Stanza;
+import borogove.calls.SessionDescription;
 
 class TestSessionDescription extends utest.Test {
 	final stanzaSource = '<iq type="set"><jingle sid="kxcebFwaWUQTQQO5sUoJJA" action="session-initiate" xmlns="urn:xmpp:jingle:1"><group semantics="BUNDLE" xmlns="urn:xmpp:jingle:apps:grouping:0"><content name="0"/></group><content name="0" creator="initiator" xmlns="urn:xmpp:jingle:1"><description media="audio" xmlns="urn:xmpp:jingle:apps:rtp:1"><payload-type channels="2" name="opus" clockrate="48000" id="111" xmlns="urn:xmpp:jingle:apps:rtp:1"><parameter name="minptime" value="10" xmlns="urn:xmpp:jingle:apps:rtp:1"/><parameter name="useinbandfec" value="1" xmlns="urn:xmpp:jingle:apps:rtp:1"/><rtcp-fb type="transport-cc" xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"/></payload-type><payload-type channels="2" name="red" clockrate="48000" id="63" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="ISAC" clockrate="16000" id="103" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="ISAC" clockrate="32000" id="104" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="G722" clockrate="8000" id="9" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="ILBC" clockrate="8000" id="102" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="PCMU" clockrate="8000" id="0" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="PCMA" clockrate="8000" id="8" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="CN" clockrate="32000" id="106" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="CN" clockrate="16000" id="105" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="CN" clockrate="8000" id="13" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="telephone-event" clockrate="48000" id="110" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="telephone-event" clockrate="32000" id="112" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="telephone-event" clockrate="16000" id="113" xmlns="urn:xmpp:jingle:apps:rtp:1"/><payload-type name="telephone-event" clockrate="8000" id="126" xmlns="urn:xmpp:jingle:apps:rtp:1"/><rtp-hdrext uri="urn:ietf:params:rtp-hdrext:ssrc-audio-level" id="1" xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/><rtp-hdrext uri="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time" id="2" xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/><rtp-hdrext uri="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" id="3" xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/><rtp-hdrext uri="urn:ietf:params:rtp-hdrext:sdes:mid" id="4" xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/><extmap-allow-mixed xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/><source ssrc="3713170236" xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"><parameter name="cname" value="KP3+b0QvXtga40Uo"/><parameter name="msid" value="- audio-track-76673976-daf1-4afa-bed8-1277ddc1c7f7"/></source><rtcp-mux/></description><transport pwd="88yXZajgGS00ziBDQ0yLtr9t" ufrag="r8tL" xmlns="urn:xmpp:jingle:transports:ice-udp:1"><fingerprint setup="actpass" hash="sha-256" xmlns="urn:xmpp:jingle:apps:dtls:0">26:58:C5:C5:68:7A:BA:C9:11:2D:6D:A3:C5:57:16:4C:E0:A0:46:06:FA:49:62:1B:54:E4:A5:F1:CB:89:18:43</fingerprint></transport></content></jingle></iq>';
diff --git a/test/TestStanza.hx b/test/TestStanza.hx
index a9970dd..7ca0289 100644
--- a/test/TestStanza.hx
+++ b/test/TestStanza.hx
@@ -3,7 +3,7 @@ package test;
 
 import utest.Assert;
 import utest.Async;
-import snikket.Stanza;
+import borogove.Stanza;
 
 class TestStanza extends utest.Test {
 	public function testRemoveChildren() {