Skip to content

Commit 9a8aa07

Browse files
Merge branch 'dev-web' into stag-web
2 parents b238fbc + efccec0 commit 9a8aa07

File tree

375 files changed

+7240
-3875
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

375 files changed

+7240
-3875
lines changed

.github/workflows/template-tauri-build-linux-x64-external.yml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,9 @@ jobs:
7070
run: |
7171
echo "Version: ${{ inputs.new_version }}"
7272
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = false' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
73-
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
73+
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
7474
if [ "${{ inputs.channel }}" != "stable" ]; then
75-
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
76-
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
75+
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
7776
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
7877
fi
7978
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -83,7 +82,7 @@ jobs:
8382
8483
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
8584
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
86-
85+
8786
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
8887
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
8988
@@ -96,7 +95,7 @@ jobs:
9695
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
9796
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
9897
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
99-
98+
10099
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
101100
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
102101
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -125,7 +124,7 @@ jobs:
125124
env:
126125
RELEASE_CHANNEL: '${{ inputs.channel }}'
127126
AUTO_UPDATER_DISABLED: ${{ inputs.disable_updater && 'true' || 'false' }}
128-
127+
129128
- name: Upload Artifact
130129
uses: actions/upload-artifact@v4
131130
with:
@@ -136,4 +135,4 @@ jobs:
136135
uses: actions/upload-artifact@v4
137136
with:
138137
name: jan-linux-amd64-${{ inputs.new_version }}-AppImage
139-
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
138+
path: ./src-tauri/target/release/bundle/appimage/*.AppImage

.github/workflows/template-tauri-build-linux-x64-flatpak.yml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,9 @@ jobs:
9191
echo "Version: ${{ inputs.new_version }}"
9292
# Update tauri.conf.json
9393
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
94-
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
94+
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
9595
if [ "${{ inputs.channel }}" != "stable" ]; then
96-
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
97-
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
96+
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
9897
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
9998
fi
10099
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -104,7 +103,7 @@ jobs:
104103
105104
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
106105
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
107-
106+
108107
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
109108
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
110109
@@ -117,7 +116,7 @@ jobs:
117116
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
118117
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
119118
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
120-
119+
121120
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
122121
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
123122
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -128,7 +127,7 @@ jobs:
128127
129128
# Temporarily enable devtool on prod build
130129
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
131-
cat ./src-tauri/Cargo.toml
130+
cat ./src-tauri/Cargo.toml
132131
133132
# Change app name for beta and nightly builds
134133
if [ "${{ inputs.channel }}" != "stable" ]; then
@@ -139,7 +138,7 @@ jobs:
139138
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
140139
141140
cat ./src-tauri/tauri.conf.json
142-
141+
143142
# Update Cargo.toml
144143
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
145144
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"
@@ -184,4 +183,3 @@ jobs:
184183
with:
185184
name: jan-linux-amd64-flatpak-${{ inputs.new_version }}-AppImage
186185
path: ./src-tauri/target/release/bundle/appimage/*.AppImage
187-

.github/workflows/template-tauri-build-linux-x64.yml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,9 @@ jobs:
108108
echo "Version: ${{ inputs.new_version }}"
109109
# Update tauri.conf.json
110110
jq --arg version "${{ inputs.new_version }}" '.version = $version | .bundle.createUpdaterArtifacts = true' ./src-tauri/tauri.conf.json > /tmp/tauri.conf.json
111-
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
111+
mv /tmp/tauri.conf.json ./src-tauri/tauri.conf.json
112112
if [ "${{ inputs.channel }}" != "stable" ]; then
113-
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun",
114-
"usr/lib/Jan-${{ inputs.channel }}/resources/lib/libvulkan.so": "resources/lib/libvulkan.so"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
113+
jq '.bundle.linux.deb.files = {"usr/bin/bun": "resources/bin/bun"}' ./src-tauri/tauri.linux.conf.json > /tmp/tauri.linux.conf.json
115114
mv /tmp/tauri.linux.conf.json ./src-tauri/tauri.linux.conf.json
116115
fi
117116
jq --arg version "${{ inputs.new_version }}" '.version = $version' web-app/package.json > /tmp/package.json
@@ -121,7 +120,7 @@ jobs:
121120
122121
jq --arg version "${{ inputs.new_version }}" '.version = $version' ./src-tauri/plugins/tauri-plugin-hardware/package.json > /tmp/package.json
123122
mv /tmp/package.json ./src-tauri/plugins/tauri-plugin-hardware/package.json
124-
123+
125124
echo "---------./src-tauri/plugins/tauri-plugin-hardware/package.json---------"
126125
cat ./src-tauri/plugins/tauri-plugin-hardware/package.json
127126
@@ -134,7 +133,7 @@ jobs:
134133
ctoml ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml package.version "${{ inputs.new_version }}"
135134
echo "---------./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml---------"
136135
cat ./src-tauri/plugins/tauri-plugin-hardware/Cargo.toml
137-
136+
138137
ctoml ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml package.version "${{ inputs.new_version }}"
139138
echo "---------./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml---------"
140139
cat ./src-tauri/plugins/tauri-plugin-llamacpp/Cargo.toml
@@ -156,7 +155,7 @@ jobs:
156155
.github/scripts/rename-tauri-app.sh ./src-tauri/tauri.conf.json ${{ inputs.channel }}
157156
158157
cat ./src-tauri/tauri.conf.json
159-
158+
160159
# Update Cargo.toml
161160
ctoml ./src-tauri/Cargo.toml package.name "Jan-${{ inputs.channel }}"
162161
ctoml ./src-tauri/Cargo.toml dependencies.tauri.features[] "devtools"

.github/workflows/template-tauri-build-windows-x64.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ on:
5454
value: ${{ jobs.build-windows-x64.outputs.WIN_SIG }}
5555
FILE_NAME:
5656
value: ${{ jobs.build-windows-x64.outputs.FILE_NAME }}
57+
MSI_FILE_NAME:
58+
value: ${{ jobs.build-windows-x64.outputs.MSI_FILE_NAME }}
5759

5860
jobs:
5961
build-windows-x64:
6062
runs-on: windows-latest
6163
outputs:
6264
WIN_SIG: ${{ steps.metadata.outputs.WIN_SIG }}
6365
FILE_NAME: ${{ steps.metadata.outputs.FILE_NAME }}
66+
MSI_FILE_NAME: ${{ steps.metadata.outputs.MSI_FILE_NAME }}
6467
permissions:
6568
contents: write
6669
steps:
@@ -189,9 +192,15 @@ jobs:
189192
- name: Upload Artifact
190193
uses: actions/upload-artifact@v4
191194
with:
192-
name: jan-windows-${{ inputs.new_version }}
195+
name: jan-windows-exe-${{ inputs.new_version }}
193196
path: |
194197
./src-tauri/target/release/bundle/nsis/*.exe
198+
- name: Upload Artifact
199+
uses: actions/upload-artifact@v4
200+
with:
201+
name: jan-windows-msi-${{ inputs.new_version }}
202+
path: |
203+
./src-tauri/target/release/bundle/msi/*.msi
195204
196205
## Set output filename for windows
197206
- name: Set output filename for windows
@@ -201,13 +210,18 @@ jobs:
201210
if [ "${{ inputs.channel }}" != "stable" ]; then
202211
FILE_NAME=Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe
203212
WIN_SIG=$(cat Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64-setup.exe.sig)
213+
214+
MSI_FILE="Jan-${{ inputs.channel }}_${{ inputs.new_version }}_x64_en-US.msi"
204215
else
205216
FILE_NAME=Jan_${{ inputs.new_version }}_x64-setup.exe
206217
WIN_SIG=$(cat Jan_${{ inputs.new_version }}_x64-setup.exe.sig)
218+
219+
MSI_FILE="Jan_${{ inputs.new_version }}_x64_en-US.msi"
207220
fi
208221
209222
echo "::set-output name=WIN_SIG::$WIN_SIG"
210223
echo "::set-output name=FILE_NAME::$FILE_NAME"
224+
echo "::set-output name=MSI_FILE_NAME::$MSI_FILE"
211225
id: metadata
212226

213227
## Upload to s3 for nightly and beta
@@ -220,6 +234,8 @@ jobs:
220234
# Upload for tauri updater
221235
aws s3 cp ./${{ steps.metadata.outputs.FILE_NAME }} s3://${{ secrets.DELTA_AWS_S3_BUCKET_NAME }}/temp-${{ inputs.channel }}/${{ steps.metadata.outputs.FILE_NAME }}
222236
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
237+
238+
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 }}
223239
env:
224240
AWS_ACCESS_KEY_ID: ${{ secrets.DELTA_AWS_ACCESS_KEY_ID }}
225241
AWS_SECRET_ACCESS_KEY: ${{ secrets.DELTA_AWS_SECRET_ACCESS_KEY }}
@@ -236,3 +252,13 @@ jobs:
236252
asset_path: ./src-tauri/target/release/bundle/nsis/${{ steps.metadata.outputs.FILE_NAME }}
237253
asset_name: ${{ steps.metadata.outputs.FILE_NAME }}
238254
asset_content_type: application/octet-stream
255+
- name: Upload release assert if public provider is github
256+
if: inputs.public_provider == 'github'
257+
env:
258+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
259+
uses: actions/[email protected]
260+
with:
261+
upload_url: ${{ inputs.upload_url }}
262+
asset_path: ./src-tauri/target/release/bundle/msi/${{ steps.metadata.outputs.MSI_FILE_NAME }}
263+
asset_name: ${{ steps.metadata.outputs.MSI_FILE_NAME }}
264+
asset_content_type: application/octet-stream

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ src-tauri/resources/lib
2121
src-tauri/icons
2222
!src-tauri/icons/icon.png
2323
src-tauri/gen/apple
24+
src-tauri/gen/android
2425
src-tauri/resources/bin
2526

2627
# Helper tools
2728
.opencode
2829
OpenCode.md
30+
Claude.md
2931
archive/
3032
.cache/
3133

@@ -60,3 +62,4 @@ src-tauri/resources/
6062
## test
6163
test-data
6264
llm-docs
65+
.claude/agents

Makefile

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,25 @@ else
4141
@echo "Not macOS; skipping Rust target installation."
4242
endif
4343

44+
# Install required Rust targets for Android builds
45+
install-android-rust-targets:
46+
@echo "Checking and installing Android Rust targets..."
47+
@rustup target list --installed | grep -q "aarch64-linux-android" || rustup target add aarch64-linux-android
48+
@rustup target list --installed | grep -q "armv7-linux-androideabi" || rustup target add armv7-linux-androideabi
49+
@rustup target list --installed | grep -q "i686-linux-android" || rustup target add i686-linux-android
50+
@rustup target list --installed | grep -q "x86_64-linux-android" || rustup target add x86_64-linux-android
51+
@echo "Android Rust targets ready!"
52+
53+
# Install required Rust targets for iOS builds
54+
install-ios-rust-targets:
55+
@echo "Checking and installing iOS Rust targets..."
56+
@rustup target list --installed | grep -q "aarch64-apple-ios" || rustup target add aarch64-apple-ios
57+
@rustup target list --installed | grep -q "aarch64-apple-ios-sim" || rustup target add aarch64-apple-ios-sim
58+
@rustup target list --installed | grep -q "x86_64-apple-ios" || rustup target add x86_64-apple-ios
59+
@echo "iOS Rust targets ready!"
60+
4461
dev: install-and-build
4562
yarn download:bin
46-
yarn download:lib
4763
yarn dev
4864

4965
# Web application targets
@@ -58,20 +74,48 @@ build-web-app: install-web-app
5874
yarn build:core
5975
yarn build:web-app
6076

61-
serve-web-app:
77+
serve-web-app:
6278
yarn serve:web-app
6379

6480
build-serve-web-app: build-web-app
6581
yarn serve:web-app
6682

83+
# Mobile
84+
dev-android: install-and-build install-android-rust-targets
85+
@echo "Setting up Android development environment..."
86+
@if [ ! -d "src-tauri/gen/android" ]; then \
87+
echo "Android app not initialized. Initializing..."; \
88+
yarn tauri android init; \
89+
fi
90+
@echo "Sourcing Android environment setup..."
91+
@bash autoqa/scripts/setup-android-env.sh echo "Android environment ready"
92+
@echo "Starting Android development server..."
93+
yarn dev:android
94+
95+
dev-ios: install-and-build install-ios-rust-targets
96+
@echo "Setting up iOS development environment..."
97+
ifeq ($(shell uname -s),Darwin)
98+
@if [ ! -d "src-tauri/gen/ios" ]; then \
99+
echo "iOS app not initialized. Initializing..."; \
100+
yarn tauri ios init; \
101+
fi
102+
@echo "Checking iOS development requirements..."
103+
@xcrun --version > /dev/null 2>&1 || (echo "❌ Xcode command line tools not found. Install with: xcode-select --install" && exit 1)
104+
@xcrun simctl list devices available | grep -q "iPhone\|iPad" || (echo "❌ No iOS simulators found. Install simulators through Xcode." && exit 1)
105+
@echo "Starting iOS development server..."
106+
yarn dev:ios
107+
else
108+
@echo "❌ iOS development is only supported on macOS"
109+
@exit 1
110+
endif
111+
67112
# Linting
68113
lint: install-and-build
69114
yarn lint
70115

71116
# Testing
72117
test: lint
73118
yarn download:bin
74-
yarn download:lib
75119
ifeq ($(OS),Windows_NT)
76120
yarn download:windows-installer
77121
endif

README.md

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Jan - Local AI Assistant
1+
# Jan - Open-source ChatGPT replacement
22

3-
![Jan AI](docs/src/pages/docs/_assets/jan-app.png)
3+
<img width="2048" height="280" alt="github jan banner" src="https://github.com/user-attachments/assets/f3f87889-c133-433b-b250-236218150d3f" />
44

55
<p align="center">
66
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
@@ -12,15 +12,13 @@
1212
</p>
1313

1414
<p align="center">
15-
<a href="https://jan.ai/docs/quickstart">Getting Started</a>
16-
- <a href="https://jan.ai/docs">Docs</a>
15+
<a href="https://www.jan.ai/docs/desktop">Getting Started</a>
16+
- <a href="https://discord.gg/Exe46xPMbK">Community</a>
1717
- <a href="https://jan.ai/changelog">Changelog</a>
1818
- <a href="https://github.com/menloresearch/jan/issues">Bug reports</a>
19-
- <a href="https://discord.gg/AsJ8krTT3N">Discord</a>
2019
</p>
2120

22-
Jan is an AI assistant that can run 100% offline on your device. Download and run LLMs with
23-
**full control** and **privacy**.
21+
Jan is bringing the best of open-source AI in an easy-to-use product. Download and run LLMs with **full control** and **privacy**.
2422

2523
## Installation
2624

@@ -29,41 +27,36 @@ The easiest way to get started is by downloading one of the following versions f
2927
<table>
3028
<tr>
3129
<td><b>Platform</b></td>
32-
<td><b>Stable</b></td>
33-
<td><b>Nightly</b></td>
30+
<td><b>Download</b></td>
3431
</tr>
3532
<tr>
3633
<td><b>Windows</b></td>
3734
<td><a href='https://app.jan.ai/download/latest/win-x64'>jan.exe</a></td>
38-
<td><a href='https://app.jan.ai/download/nightly/win-x64'>jan.exe</a></td>
3935
</tr>
4036
<tr>
4137
<td><b>macOS</b></td>
4238
<td><a href='https://app.jan.ai/download/latest/mac-universal'>jan.dmg</a></td>
43-
<td><a href='https://app.jan.ai/download/nightly/mac-universal'>jan.dmg</a></td>
4439
</tr>
4540
<tr>
4641
<td><b>Linux (deb)</b></td>
4742
<td><a href='https://app.jan.ai/download/latest/linux-amd64-deb'>jan.deb</a></td>
48-
<td><a href='https://app.jan.ai/download/nightly/linux-amd64-deb'>jan.deb</a></td>
4943
</tr>
5044
<tr>
5145
<td><b>Linux (AppImage)</b></td>
5246
<td><a href='https://app.jan.ai/download/latest/linux-amd64-appimage'>jan.AppImage</a></td>
53-
<td><a href='https://app.jan.ai/download/nightly/linux-amd64-appimage'>jan.AppImage</a></td>
5447
</tr>
5548
</table>
5649

57-
Download from [jan.ai](https://jan.ai/) or [GitHub Releases](https://github.com/menloresearch/jan/releases).
5850

51+
Download from [jan.ai](https://jan.ai/) or [GitHub Releases](https://github.com/menloresearch/jan/releases).
5952

6053
## Features
6154

62-
- **Local AI Models**: Download and run LLMs (Llama, Gemma, Qwen, etc.) from HuggingFace
63-
- **Cloud Integration**: Connect to OpenAI, Anthropic, Mistral, Groq, and others
55+
- **Local AI Models**: Download and run LLMs (Llama, Gemma, Qwen, GPT-oss etc.) from HuggingFace
56+
- **Cloud Integration**: Connect to GPT models via OpenAI, Claude models via Anthropic, Mistral, Groq, and others
6457
- **Custom Assistants**: Create specialized AI assistants for your tasks
6558
- **OpenAI-Compatible API**: Local server at `localhost:1337` for other applications
66-
- **Model Context Protocol**: MCP integration for enhanced capabilities
59+
- **Model Context Protocol**: MCP integration for agentic capabilities
6760
- **Privacy First**: Everything runs locally when you want it to
6861

6962
## Build from Source

0 commit comments

Comments
 (0)