diff --git a/.github/workflows/template-tauri-build-linux-x64-external.yml b/.github/workflows/template-tauri-build-linux-x64-external.yml
index a88c48267..5c39e17c7 100644
--- a/.github/workflows/template-tauri-build-linux-x64-external.yml
+++ b/.github/workflows/template-tauri-build-linux-x64-external.yml
@@ -70,10 +70,9 @@ jobs:
run: |
echo "Version: ${{ inputs.new_version }}"
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
- mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
+ mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
if [ "${{ inputs.channel }}" != "stable" ]; then
- jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
- "usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
+ jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
fi
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -83,7 +82,7 @@ jobs:
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
-
+
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
@@ -96,7 +95,7 @@ jobs:
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
-
+
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -125,7 +124,7 @@ jobs:
env:
RELEASE_CHANNEL: '${{ inputs.channel }}'
AUTO_UPDATER_DISABLED: ${{ inputs.disable_updater && 'true' || 'false' }}
-
+
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
@@ -136,4 +135,4 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: jan-linux-amd64-${{ inputs.new_version }}-AppImage
- path: ./src-tauri/target/release/bundle/appimage/*.AppImage
\ No newline at end of file
+ path: ./src-tauri/target/release/bundle/appimage/*.AppImage
diff --git a/.github/workflows/template-tauri-build-linux-x64-flatpak.yml b/.github/workflows/template-tauri-build-linux-x64-flatpak.yml
index 15d4827f7..d63fae3e7 100644
--- a/.github/workflows/template-tauri-build-linux-x64-flatpak.yml
+++ b/.github/workflows/template-tauri-build-linux-x64-flatpak.yml
@@ -91,10 +91,9 @@ jobs:
echo "Version: ${{ inputs.new_version }}"
# Update tauri.conf.json
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
- mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
+ mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
if [ "${{ inputs.channel }}" != "stable" ]; then
- jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
- "usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
+ jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
fi
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -104,7 +103,7 @@ jobs:
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
-
+
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
@@ -117,7 +116,7 @@ jobs:
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
-
+
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -128,7 +127,7 @@ jobs:
# Temporarily enable devtool on prod build
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
- cat ./src-tauri/Cargo.toml
+ cat ./src-tauri/Cargo.toml
# Change app name for beta and nightly builds
if [ "${{ inputs.channel }}" != "stable" ]; then
@@ -139,7 +138,7 @@ jobs:
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
cat ./src-tauri/tauri.conf.json
-
+
# Update Cargo.toml
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
@@ -184,4 +183,3 @@ jobs:
with:
name: jan-linux-amd64-flatpak-${{ inputs.new_version }}-AppImage
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
-
diff --git a/.github/workflows/template-tauri-build-linux-x64.yml b/.github/workflows/template-tauri-build-linux-x64.yml
index bd9b38369..487571595 100644
--- a/.github/workflows/template-tauri-build-linux-x64.yml
+++ b/.github/workflows/template-tauri-build-linux-x64.yml
@@ -108,10 +108,9 @@ jobs:
echo "Version: ${{ inputs.new_version }}"
# Update tauri.conf.json
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
- mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
+ mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
if [ "${{ inputs.channel }}" != "stable" ]; then
- jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
- "usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
+ jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
fi
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -121,7 +120,7 @@ jobs:
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
-
+
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
@@ -134,7 +133,7 @@ jobs:
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
-
+
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -156,7 +155,7 @@ jobs:
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
cat ./src-tauri/tauri.conf.json
-
+
# Update Cargo.toml
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
diff --git a/.github/workflows/template-tauri-build-windows-x64.yml b/.github/workflows/template-tauri-build-windows-x64.yml
index 4258f1059..5c1a786ca 100644
--- a/.github/workflows/template-tauri-build-windows-x64.yml
+++ b/.github/workflows/template-tauri-build-windows-x64.yml
@@ -234,8 +234,6 @@ jobs:
# Upload for tauri updater
aws s3 cp ./${{ steps.metadata.outputs.FILE_NAME }} s3://${{ secrets.DELTA_AWS_S3_BUCKET_NAME }}/temp-${{ inputs.channel }}/${{ steps.metadata.outputs.FILE_NAME }}
aws s3 cp ./${{ steps.metadata.outputs.FILE_NAME }}.sig s3://${{ secrets.DELTA_AWS_S3_BUCKET_NAME }}/temp-${{ inputs.channel }}/${{ steps.metadata.outputs.FILE_NAME }}.sig
-
- aws s3 cp ./src-tauri/target/release/bundle/msi/${{ steps.metadata.outputs.MSI_FILE_NAME }} s3://${{ secrets.DELTA_AWS_S3_BUCKET_NAME }}/temp-${{ inputs.channel }}/${{ steps.metadata.outputs.MSI_FILE_NAME }}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.DELTA_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DELTA_AWS_SECRET_ACCESS_KEY }}
diff --git a/.gitignore b/.gitignore
index 6b51867ef..e78486abd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,11 +21,13 @@ src-tauri/resources/lib
src-tauri/icons
!src-tauri/icons/icon.png
src-tauri/gen/apple
+src-tauri/gen/android
src-tauri/resources/bin
# Helper tools
.opencode
OpenCode.md
+Claude.md
archive/
.cache/
@@ -60,3 +62,4 @@ src-tauri/resources/
## test
test-data
llm-docs
+.claude/agents
diff --git a/Makefile b/Makefile
index 9a03ddaad..890f612c8 100644
--- a/Makefile
+++ b/Makefile
@@ -41,9 +41,25 @@ else
@echo "Not macOS; skipping Rust target installation."
endif
+# Install required Rust targets for Android builds
+install-android-rust-targets:
+ @echo "Checking and installing Android Rust targets..."
+ @rustup target list --installed | grep -q "aarch64-linux-android" || rustup target add aarch64-linux-android
+ @rustup target list --installed | grep -q "armv7-linux-androideabi" || rustup target add armv7-linux-androideabi
+ @rustup target list --installed | grep -q "i686-linux-android" || rustup target add i686-linux-android
+ @rustup target list --installed | grep -q "x86_64-linux-android" || rustup target add x86_64-linux-android
+ @echo "Android Rust targets ready!"
+
+# Install required Rust targets for iOS builds
+install-ios-rust-targets:
+ @echo "Checking and installing iOS Rust targets..."
+ @rustup target list --installed | grep -q "aarch64-apple-ios" || rustup target add aarch64-apple-ios
+ @rustup target list --installed | grep -q "aarch64-apple-ios-sim" || rustup target add aarch64-apple-ios-sim
+ @rustup target list --installed | grep -q "x86_64-apple-ios" || rustup target add x86_64-apple-ios
+ @echo "iOS Rust targets ready!"
+
dev: install-and-build
yarn download:bin
- yarn download:lib
yarn dev
# Web application targets
@@ -58,12 +74,41 @@ build-web-app: install-web-app
yarn build:core
yarn build:web-app
-serve-web-app:
+serve-web-app:
yarn serve:web-app
build-serve-web-app: build-web-app
yarn serve:web-app
+# Mobile
+dev-android: install-and-build install-android-rust-targets
+ @echo "Setting up Android development environment..."
+ @if [ ! -d "src-tauri/gen/android" ]; then \
+ echo "Android app not initialized. Initializing..."; \
+ yarn tauri android init; \
+ fi
+ @echo "Sourcing Android environment setup..."
+ @bash autoqa/scripts/setup-android-env.sh echo "Android environment ready"
+ @echo "Starting Android development server..."
+ yarn dev:android
+
+dev-ios: install-and-build install-ios-rust-targets
+ @echo "Setting up iOS development environment..."
+ifeq ($(shell uname -s),Darwin)
+ @if [ ! -d "src-tauri/gen/ios" ]; then \
+ echo "iOS app not initialized. Initializing..."; \
+ yarn tauri ios init; \
+ fi
+ @echo "Checking iOS development requirements..."
+ @xcrun --version > /dev/null 2>&1 || (echo "❌ Xcode command line tools not found. Install with: xcode-select --install" && exit 1)
+ @xcrun simctl list devices available | grep -q "iPhone\|iPad" || (echo "❌ No iOS simulators found. Install simulators through Xcode." && exit 1)
+ @echo "Starting iOS development server..."
+ yarn dev:ios
+else
+ @echo "❌ iOS development is only supported on macOS"
+ @exit 1
+endif
+
# Linting
lint: install-and-build
yarn lint
@@ -71,7 +116,6 @@ lint: install-and-build
# Testing
test: lint
yarn download:bin
- yarn download:lib
ifeq ($(OS),Windows_NT)
yarn download:windows-installer
endif
diff --git a/README.md b/README.md
index 656917634..b2de4407f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Jan - Local AI Assistant
+# Jan - Open-source ChatGPT replacement
-
+
@@ -12,15 +12,13 @@
- Getting Started - - Docs + Getting Started + - Community - Changelog - Bug reports - - Discord
-Jan is an AI assistant that can run 100% offline on your device. Download and run LLMs with -**full control** and **privacy**. +Jan is bringing the best of open-source AI in an easy-to-use product. Download and run LLMs with **full control** and **privacy**. ## Installation @@ -29,41 +27,36 @@ The easiest way to get started is by downloading one of the following versions f| Platform | -Stable | -Nightly | +Download |
| Windows | jan.exe | -jan.exe | |
| macOS | jan.dmg | -jan.dmg | |
| Linux (deb) | jan.deb | -jan.deb | |
| Linux (AppImage) | jan.AppImage | -jan.AppImage |
{error}
++ Last updated: {new Date(lastRefresh).toLocaleTimeString()} +
+All systems are functioning normally with no reported issues.
+Services are running but may be slower than usual.
+Some features or regions may be experiencing issues.
+Significant service disruption affecting most users.
+