Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d7883e8
chore(tauri): add initial setup
hazre Mar 5, 2026
06d3c79
feat(tauri): disable web push notifications
hazre Mar 5, 2026
e01c01c
feat(tauri): use deep link for sso authentication
hazre Mar 5, 2026
6932dcb
feat(tauri): custom windows titlebar
hazre Mar 5, 2026
2e10f73
feat(tauri): add desktop system tray and option to close to tray
hazre Mar 5, 2026
9e4a814
fix(tauri): ignore formatting on generated tauri bindings
hazre Mar 6, 2026
5823d23
fix(tauri): deep linking breaking due to specta export
hazre Mar 6, 2026
80dce7a
feat(tauri): add sso callback page
hazre Mar 6, 2026
84e71cf
feat(tauri): keep track of window state and position
hazre Mar 6, 2026
535ded2
chore: add tauri.conf.json to knope.toml
hazre Mar 6, 2026
55da9f1
style: fix formatting of Router.tsx
hazre Mar 7, 2026
b709f38
feat(tauri): add android support and splash screen tauri plugin (WIP)
hazre Mar 7, 2026
782626a
chore: add crates to knip ignore list
hazre Mar 7, 2026
46e5650
fix: broken Router and linting issues
hazre Mar 7, 2026
880efc4
chore: ignore false positive for tauri-plugin-splashscreen-api in knip
hazre Mar 8, 2026
fd3f341
fix: merge conflicts in package-lock.json
hazre Mar 8, 2026
cb0413c
chore: remove accidentally committed build files and adjusted .gitignore
TastelessVoid Mar 9, 2026
f0a9f4f
fix: bypass service worker for media authentication on Android
TastelessVoid Mar 9, 2026
751c2fc
fix(build): allow PWA build with large wasm assets and split vendor c…
hazre Mar 8, 2026
46092a8
feat: Add UnifiedPush for Fairphones or phones that have been "de-goo…
TastelessVoid Mar 9, 2026
f5d90c0
feat: Add build.gradle.kts to specify a higher kotlin version and upd…
TastelessVoid Mar 9, 2026
0aa9cf8
fix: Commit the gen folder as the nested .gitignore should keep the r…
TastelessVoid Mar 9, 2026
f9f37a1
fix: Adjusted .gitignore and tracked files
TastelessVoid Mar 9, 2026
daeec60
feat(tauri): Implement media caching and notification enhancements
TastelessVoid Mar 10, 2026
ade84fa
feat(tauri): Addressed review, updated package
TastelessVoid Mar 10, 2026
c064680
feat(tauri): Fixed dynamical import warning, removed local crate due …
TastelessVoid Mar 10, 2026
2d8609b
fix(tauri): Fixed avatars in the notification not showing
TastelessVoid Mar 11, 2026
9c84d92
Merge branch 'dev' into feat/tauri-integration
TastelessVoid Mar 11, 2026
93bca4b
chore(tauri): Merge dev into feat/tauri-integration and resolved conf…
TastelessVoid Mar 11, 2026
0b97f55
Merge pull request #139 from TastelessVoid/feat/tauri-integration
hazre Mar 12, 2026
65e83ed
fix: make android actually build
hazre Mar 12, 2026
8667938
chore: merge dev into feat/tauri-integration
hazre Mar 12, 2026
abfaab5
chore: make quality checks happy
hazre Mar 12, 2026
fd6a135
chore: remove binary files
hazre Mar 12, 2026
bf36d2b
fix: sso login on mobile
hazre Mar 12, 2026
01d5cdc
chore: add nix devshell flake (android not tested)
hazre Mar 14, 2026
e867034
feat: add cef support and switch to tauri-typegen for bindings (wip)
hazre Mar 14, 2026
4795fb3
fix: move window creation into rust side for easier control
hazre Mar 14, 2026
932d5f3
chore: merge dev into feat/tauri-integration
hazre Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,30 @@ crash.log

# the following line was added with the "git ignore" tool by itsrye.dev, version 0.1.0
.lh

# the following line was added with the "git ignore" tool by itsrye.dev, version 0.1.0
.lh

# Tauri
/build
/target/
/gen/schemas
dist-js

# Gradle / Android build artifacts
**/android/build/
**/android/.tauri/
**/android/.gradle/
**/.gradle/

# Rust build artifacts
src-tauri/target/
# Tauri Android build outputs
src-tauri/gen/android/app/build/


# Rust build artifacts in subcrates
crates/**/target/

# Worktrees
.worktrees
5 changes: 4 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ pnpm-lock.yaml
LICENSE
README.md
CHANGELOG.md
./changeset
./changeset
src/app/generated
crates/
src-tauri/
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,8 @@
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
}
}
3 changes: 2 additions & 1 deletion config.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"pushNotificationDetails": {
"pushNotifyUrl": "https://cinny.cc/_matrix/push/v1/notify",
"vapidPublicKey": "BHLwykXs79AbKNiblEtZZRAgnt7o5_ieImhVJD8QZ01MVwAHnXwZzNgQEJJEU3E5CVsihoKtb7yaNe5x3vmkWkI",
"webPushAppID": "cc.cinny.web"
"webPushAppID": "cc.cinny.web",
"unifiedPushAppID": "moe.sable.up"
},

"slidingSync": {
Expand Down
16 changes: 16 additions & 0 deletions crates/tauri-plugin-splashscreen/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/.vs
.DS_Store
.Thumbs.db
*.sublime*
.idea/
debug.log
package-lock.json
.vscode/settings.json
yarn.lock

/.tauri
/.gradle
/target
Cargo.lock
node_modules/

18 changes: 18 additions & 0 deletions crates/tauri-plugin-splashscreen/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[package]
name = "tauri-plugin-splashscreen"
version = "0.1.0"
authors = [ "You" ]
description = ""
edition = "2021"
rust-version = "1.77.2"
exclude = ["/examples", "/dist-js", "/guest-js", "/node_modules"]
links = "tauri-plugin-splashscreen"

[dependencies]
tauri = { version = "2", default-features = false }

serde = "1.0"
thiserror = "2"

[build-dependencies]
tauri-plugin = { version = "2.5.4", features = ["build"] }
1 change: 1 addition & 0 deletions crates/tauri-plugin-splashscreen/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Tauri Plugin splashscreen
3 changes: 3 additions & 0 deletions crates/tauri-plugin-splashscreen/android/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/build
/.tauri
/.gradle
45 changes: 45 additions & 0 deletions crates/tauri-plugin-splashscreen/android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}

android {
namespace = "moe.sable.app.plugin.splashscreen"
compileSdk = 36

defaultConfig {
minSdk = 21

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}

dependencies {

implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.core:core-splashscreen:1.2.0")
implementation("androidx.appcompat:appcompat:1.6.0")
implementation("com.google.android.material:material:1.7.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
implementation(project(":tauri-android"))
}
21 changes: 21 additions & 0 deletions crates/tauri-plugin-splashscreen/android/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
31 changes: 31 additions & 0 deletions crates/tauri-plugin-splashscreen/android/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
google()
}
resolutionStrategy {
eachPlugin {
switch (requested.id.id) {
case "com.android.library":
useVersion("8.0.2")
break
case "org.jetbrains.kotlin.android":
useVersion("1.8.20")
break
}
}
}
}

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
google()

}
}

include ':tauri-android'
project(':tauri-android').projectDir = new File('./.tauri/tauri-api')
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package moe.sable.app.plugin.splashscreen

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("moe.sable.app.plugin.splashscreen", appContext.packageName)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package moe.sable.app.plugin.splashscreen

import android.app.Activity
import android.os.Handler
import android.os.Looper
import android.webkit.WebView
import androidx.core.splashscreen.SplashScreen
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.Plugin

@TauriPlugin
class SplashScreenPlugin(private val activity: Activity) : Plugin(activity) {

companion object {
private const val TIMEOUT_MS = 10000L
}

@Volatile
private var isAppReady = false
private var splashScreen: SplashScreen? = null

override fun load(webView: WebView) {
splashScreen = activity.installSplashScreen()

splashScreen?.setKeepOnScreenCondition {
!isAppReady
}

splashScreen?.setOnExitAnimationListener { splashScreenViewProvider ->
splashScreenViewProvider.remove()
}

Handler(Looper.getMainLooper()).postDelayed({
isAppReady = true
}, TIMEOUT_MS)
}

@Command
fun close(invoke: Invoke) {
isAppReady = true
invoke.resolve()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#4A90D9"
android:pathData="M54,54m-40,0a40,40 0,1 1,80 0a40,40 0,1 1,-80 0"/>
<path
android:fillColor="#FFFFFF"
android:pathData="M54,30L54,54L70,62"
android:strokeWidth="4"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"/>
</vector>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="splashscreen_background">#000000</color>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.App" parent="Theme.sable" />

<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/splashscreen_background</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/loading_icon</item>
<item name="windowSplashScreenAnimationDuration">2000</item>
<item name="postSplashScreenTheme">@style/Theme.App</item>
</style>
</resources>
8 changes: 8 additions & 0 deletions crates/tauri-plugin-splashscreen/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const COMMANDS: &[&str] = &["ping", "close"];

fn main() {
tauri_plugin::Builder::new(COMMANDS)
.android_path("android")
.ios_path("ios")
.build();
}
18 changes: 18 additions & 0 deletions crates/tauri-plugin-splashscreen/dist-js/index.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

var core = require('@tauri-apps/api/core');

const splashscreen = {
async ping(value) {
return await core.invoke('plugin:splashscreen|ping', {
payload: {
value,
},
}).then((r) => (r.value ? r.value : null));
},
async close() {
await core.invoke('plugin:splashscreen|close');
},
};

module.exports = splashscreen;
6 changes: 6 additions & 0 deletions crates/tauri-plugin-splashscreen/dist-js/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
interface Splashscreen {
ping(value: string): Promise<string | null>;
close(): Promise<void>;
}
declare const splashscreen: Splashscreen;
export default splashscreen;
16 changes: 16 additions & 0 deletions crates/tauri-plugin-splashscreen/dist-js/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { invoke } from '@tauri-apps/api/core';

const splashscreen = {
async ping(value) {
return await invoke('plugin:splashscreen|ping', {
payload: {
value,
},
}).then((r) => (r.value ? r.value : null));
},
async close() {
await invoke('plugin:splashscreen|close');
},
};

export { splashscreen as default };
22 changes: 22 additions & 0 deletions crates/tauri-plugin-splashscreen/guest-js/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { invoke } from '@tauri-apps/api/core';

interface Splashscreen {
ping(value: string): Promise<string | null>;
close(): Promise<void>;
}

const splashscreen: Splashscreen = {
async ping(value: string): Promise<string | null> {
return invoke<{ value?: string }>('plugin:splashscreen|ping', {
payload: {
value,
},
}).then((r) => (r.value ? r.value : null));
},

async close(): Promise<void> {
await invoke('plugin:splashscreen|close');
},
};

export default splashscreen;
Loading
Loading