Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
206 commits
Select commit Hold shift + click to select a range
a3b2813
feat!: implement a basic extensions system
notwindstone Sep 30, 2025
7476fe0
feat: save code
notwindstone Oct 22, 2025
df45e31
feat: improve comment structure
notwindstone Oct 24, 2025
71b7317
feat: improve eslint styles & update docs
notwindstone Oct 24, 2025
ee378ce
chore(deps): remove old typebox & @kitbag/router packages
notwindstone Oct 24, 2025
96fed58
refactor: rewrite routing & other parts
notwindstone Oct 24, 2025
631b719
feat!: implement global states manipulation without any overheads
notwindstone Oct 24, 2025
9b4cf8d
fix: fix not working navigation
notwindstone Oct 24, 2025
e296d34
feat: allow non-promises in plugin hooks
notwindstone Oct 24, 2025
7b5734f
feat: improve hook logic
notwindstone Oct 24, 2025
83b76dc
feat: save code state
notwindstone Oct 24, 2025
cd43af2
feat: improve ui
notwindstone Oct 25, 2025
9e7014d
chore(deps): add material you ripple effect package
notwindstone Oct 25, 2025
25432c8
feat: apply ripple effect to sidebar buttons
notwindstone Oct 25, 2025
6886bbc
refactor: move error templates into another components
notwindstone Oct 25, 2025
3985818
feat: implement modifiable sidebar items
notwindstone Oct 25, 2025
f0281cb
fix: fix hooks for globalStates
notwindstone Oct 25, 2025
a00dc86
feat: write an inline plugin that changes UI (temporarily)
notwindstone Oct 25, 2025
8212a29
refactor: remove inline plugin for now
notwindstone Oct 26, 2025
6731d51
feat: implement a context menu
notwindstone Oct 26, 2025
5a13edd
perf: remove unnecessary next tick wait
notwindstone Oct 26, 2025
5212c8c
style: mark most of the eslint rules as warning only
notwindstone Oct 26, 2025
7e71128
chore(deps): add some tauri plugins
notwindstone Oct 26, 2025
a9e532d
feat: handle tauri plugins in typescript
notwindstone Oct 26, 2025
01606b6
feat: fill up tauri capabilities
notwindstone Oct 26, 2025
6ede1a1
feat: add transitions to sidebar
notwindstone Oct 26, 2025
090ef9a
feat: improve logging strategy
notwindstone Oct 26, 2025
db98d70
feat: simplify logging logic
notwindstone Oct 26, 2025
249f1ba
chore: add a bit more comments
notwindstone Oct 26, 2025
9ad110d
feat: implement logging window
notwindstone Oct 27, 2025
9222f42
feat: use a virtualized list to display logs
notwindstone Oct 27, 2025
05d94b4
feat: implement log reading in log viewer
notwindstone Oct 27, 2025
e2725e8
perf: implement a faster logs viewer
notwindstone Oct 27, 2025
6e988a6
feat: add colors to log viewer
notwindstone Oct 27, 2025
8e9a6f0
feat: add an option to remove log linebreaks
notwindstone Oct 27, 2025
424a5c0
fix: fix problems with horizontal scroll in virtualized list
notwindstone Oct 27, 2025
a6d3395
feat: improve log viewer & context menu ui
notwindstone Oct 27, 2025
e3f14c4
feat: implement some basic stats for log viewer
notwindstone Oct 27, 2025
a8db30c
feat: improve log searching function
notwindstone Oct 27, 2025
de0e89b
feat: implement polished search in log viewer
notwindstone Oct 27, 2025
cee5a4c
feat: implement a fast text occurrence finder
notwindstone Oct 27, 2025
87552df
refactor: clean up unnecessary comment
notwindstone Oct 27, 2025
7546898
feat: save code
notwindstone Oct 27, 2025
c2229b0
feat: add more options in log viewer
notwindstone Oct 27, 2025
e70a4ee
perf: load log viewer only when user wants to open it
notwindstone Oct 28, 2025
79352ad
ci: make eslint and vitest run on every commit
notwindstone Oct 28, 2025
5f13138
refactor: clean up a bit
notwindstone Oct 28, 2025
7ae6f31
feat: configure shell plugin to be able to execute only java commands…
notwindstone Oct 28, 2025
09b17a5
feat!: holy fuck i'm so close to making permission based plugins
notwindstone Oct 28, 2025
eae0452
feat: save code
notwindstone Oct 28, 2025
7ecea8f
feat: implement a POC for permission-based plugins
notwindstone Oct 29, 2025
2145156
feat: temporarily add opacity & blur to sidebar and change docs
notwindstone Oct 29, 2025
acfb218
docs: fix video demo
notwindstone Oct 29, 2025
ed934fd
docs: fix video embed
notwindstone Oct 29, 2025
f43a950
feat: rethink the whole plugin system
notwindstone Oct 29, 2025
eec956d
feat: return back interactive live2d
notwindstone Oct 29, 2025
c45ae36
refactor: remove global-shortcut & clipboard-manager plugins
notwindstone Nov 4, 2025
baba21b
chore(deps): remove unnecessary dependencies
notwindstone Nov 4, 2025
5d51b3f
docs: temporary write some info about security, plugins, updates
notwindstone Nov 4, 2025
04828e0
feat: save code
notwindstone Nov 4, 2025
8db8108
feat: improve log viewer ui on small screens
notwindstone Nov 4, 2025
04504b1
feat: add some temporary code to test bun server sidecar
notwindstone Nov 4, 2025
2b69fc2
docs: save code
notwindstone Nov 5, 2025
9a227a9
refactor: remove tauri sidecar
notwindstone Nov 5, 2025
7a42005
fix: fix invalid json format for tauri capabilities
notwindstone Nov 5, 2025
3936205
feat!: merge nightly into extensions
notwindstone Nov 5, 2025
4001524
chore(deps): add unzipper package
notwindstone Nov 5, 2025
5086c69
chore(deps): add tanstack query
notwindstone Nov 5, 2025
b477530
fix: fix invalid json for tauri.conf.json
notwindstone Nov 5, 2025
8c26b47
feat: add small ui/ux improvements
notwindstone Nov 5, 2025
fa15146
feat: improve global errors handling
notwindstone Nov 5, 2025
2c2c530
refactor: start cleaning up the whole code
notwindstone Nov 5, 2025
a84c1bc
feat: move LogViewer component to the global error boundary
notwindstone Nov 5, 2025
e03f128
docs: greatly improve contributing READMEs structure
notwindstone Nov 5, 2025
9daf064
docs: add more details about extensions in CONTRIBUTING.md
notwindstone Nov 5, 2025
7423f8e
docs: improve structure a bit
notwindstone Nov 5, 2025
366194d
feat: add import sorting rule in eslint
notwindstone Nov 5, 2025
e5ef14d
refactor: replace eslint default import sort with a plugin (it is aut…
notwindstone Nov 6, 2025
d8ee60f
feat: add the page change animation
notwindstone Nov 6, 2025
4aad984
feat: add custom scrollbar
notwindstone Nov 6, 2025
e68063c
docs: add some declaration explanations for application hooks
notwindstone Nov 6, 2025
d5c4deb
docs: fill in some README sections
notwindstone Nov 6, 2025
91d980f
ci: merge eslint & vitest checks into the build workflow
notwindstone Nov 6, 2025
a2def7e
ci: change the default application version
notwindstone Nov 6, 2025
d1fa923
refactor: move testing code into another place
notwindstone Nov 6, 2025
4b27abd
feat: make the eslint rules almost perfect at this point
notwindstone Nov 6, 2025
d4f15b4
fix: fix not working custom scrollbar in the log viewer
notwindstone Nov 6, 2025
60b97da
fix!: fix every eslint, typescript and vitest error
notwindstone Nov 6, 2025
f1483c1
feat: implement non virtualized log viewer option & improve log viewe…
notwindstone Nov 6, 2025
fff2abd
feat: improve custom scrollbar corner style
notwindstone Nov 6, 2025
89d162a
style: fix eslint rule
notwindstone Nov 6, 2025
249d080
refactor: start refactoring backend part
notwindstone Nov 6, 2025
84ec578
feat: implement a better-styled sidebar
notwindstone Nov 6, 2025
5139332
feat: various application improvements
notwindstone Nov 6, 2025
8a1159e
feat: implement resources folder
notwindstone Nov 6, 2025
8615b24
refactor!: rewrite a big part of global states handling
notwindstone Nov 7, 2025
f29fd20
refactor: implement config reading for global states
notwindstone Nov 7, 2025
77d0bec
feat: save code
notwindstone Nov 7, 2025
0c49273
perf: use css hiding for context menu
notwindstone Nov 7, 2025
fda5c0a
feat: write into log file in debug mode too
notwindstone Nov 7, 2025
2c90101
feat: improve log viewer UX
notwindstone Nov 7, 2025
07c6247
feat: migrate to global states in log viewer
notwindstone Nov 7, 2025
50f897d
feat: improve button tooltips UI
notwindstone Nov 7, 2025
c81f63d
refactor: improve code structure
notwindstone Nov 7, 2025
c745004
refactor!: rewrite a huge part of the backend
notwindstone Nov 7, 2025
cad4ac9
refactor!: improve code structure of the backend part
notwindstone Nov 7, 2025
59f836a
refactor!: separate mojang endpoints validation
notwindstone Nov 7, 2025
6b21a95
ci: add typescript checks to the build workflow
notwindstone Nov 7, 2025
3085e15
refactor: migrate to half-refactored code
notwindstone Nov 7, 2025
f797ea1
fix: fix not working initialization after a massive refactor
notwindstone Nov 7, 2025
9821128
feat: make sidebar tooltip clickable through
notwindstone Nov 7, 2025
92ff209
feat: implement fast filtering for Log Viewer
notwindstone Nov 8, 2025
597e7b0
perf: improve log viewer performance a bit
notwindstone Nov 8, 2025
7893b7f
refactor!: refactor log components
notwindstone Nov 8, 2025
205cc7a
feat: finalize launcher logs
notwindstone Nov 8, 2025
4ac4e9b
feat: implement text selection for virtualized log viewer
notwindstone Nov 8, 2025
d3c0a49
feat: improve text selection for virtualized log viewer
notwindstone Nov 8, 2025
7e1486a
feat: handle ctrl+c on virtualized text selection copy
notwindstone Nov 8, 2025
41740a3
refactor: move type definition to a separate file
notwindstone Nov 8, 2025
6f950ce
refactor: save code
notwindstone Nov 9, 2025
f272e3e
refactor: clean up code
notwindstone Nov 9, 2025
82a51e0
refactor: change folder structure
notwindstone Nov 9, 2025
f8433a1
feat: improve error handling
notwindstone Nov 9, 2025
beddb22
test: adapt tests to the new file structure
notwindstone Nov 9, 2025
b683e6e
feat: improve error handling
notwindstone Nov 10, 2025
6a81ab5
test: improve global object mocks
notwindstone Nov 10, 2025
dd009c4
style: improve code style
notwindstone Nov 10, 2025
a30abb2
feat: add testing code for portable versions
notwindstone Nov 10, 2025
c75cab0
ci: separate matrix build name and identifiers
notwindstone Nov 10, 2025
0502aa8
ci: add initial code to make a portable version
notwindstone Nov 10, 2025
17846c2
ci: fix not working version bump
notwindstone Nov 10, 2025
d26c3c4
test: fix not working date tests due to missing UTC
notwindstone Nov 10, 2025
8d72426
ci: try using multiline strings
notwindstone Nov 10, 2025
cb3d5d8
ci: remove invalid comma in json
notwindstone Nov 10, 2025
f82278b
ci: prettify file system restrictions modifiying action
notwindstone Nov 10, 2025
47331ef
ci: implement portable versions of launcher
notwindstone Nov 10, 2025
79319e3
feat: prepare code for transitioning to modifiable launcher resource …
notwindstone Nov 10, 2025
d622237
feat!: implement a portable version support code-wise
notwindstone Nov 10, 2025
8210d5f
test: adapt tests to the changed file system management
notwindstone Nov 10, 2025
80665b8
feat: adapt rust code to the portable version of launcher
notwindstone Nov 10, 2025
6182e76
ci: improve portable version building
notwindstone Nov 10, 2025
b74483d
docs: add some information about portability
notwindstone Nov 10, 2025
7aa13ce
ci: disable installer artifacts for portable window version
notwindstone Nov 10, 2025
f450c62
ci: mark all nightly builds as dev to avoid duplicated nightly word
notwindstone Nov 10, 2025
d34f32b
feat: save code
notwindstone Nov 10, 2025
c3089ba
feat: improve code initialization
notwindstone Nov 11, 2025
e33b73f
feat: improve code structure
notwindstone Nov 11, 2025
2e47dfd
feat: improve UI
notwindstone Nov 11, 2025
918fad1
feat: implement a customizable global background element
notwindstone Nov 11, 2025
8dabfdf
style: fix eslint warning
notwindstone Nov 11, 2025
724f3a9
feat: implement initial home page UI
notwindstone Nov 11, 2025
83e4865
refactor: improve code structure
notwindstone Nov 11, 2025
49b93a8
feat: improve sidebar UI
notwindstone Nov 11, 2025
60b307d
fix: fix tests and lint issues
notwindstone Nov 12, 2025
845414b
feat: improve sidebar styles
notwindstone Nov 12, 2025
9ce96d0
feat: improve global background handling
notwindstone Nov 12, 2025
9ecd867
feat: implement customizable af sidebar & globak background
notwindstone Nov 12, 2025
f2d8943
feat: make log entry index not selectable
notwindstone Nov 12, 2025
752deaa
feat: implement image assets reading directly from the file system
notwindstone Nov 13, 2025
6d5eb4a
feat: change application icons
notwindstone Nov 13, 2025
5615318
feat: change all application icons to my own logo (with arisu's halo)
notwindstone Nov 13, 2025
634ef46
docs: update links in the readme.md
notwindstone Nov 13, 2025
31baba4
refactor!: re-implement initialization code
notwindstone Nov 13, 2025
385e3e0
feat: save code
notwindstone Nov 13, 2025
2be9383
feat: implement better development mode utils
notwindstone Nov 13, 2025
ea5d043
test: adapt tests to the new config structure
notwindstone Nov 13, 2025
22bf5e8
feat: implement a custom logging format
notwindstone Nov 13, 2025
023b343
feat: improve customization
notwindstone Nov 13, 2025
eb00946
feat: add minecraft global states
notwindstone Nov 13, 2025
d080e4c
feat: implement tauri commands for getting system memory
notwindstone Nov 13, 2025
155619a
refactor: improve code structure
notwindstone Nov 14, 2025
856695c
perf: avoid re-fetching some expensive variables by implementing a co…
notwindstone Nov 14, 2025
3f2ef9d
feat!: sync global states and config types
notwindstone Nov 14, 2025
7f98cc0
test: adapt tests to the new config structure
notwindstone Nov 14, 2025
b1e6fff
feat: adapt to big screens
notwindstone Nov 14, 2025
2e52fcc
feat: improve error handling
notwindstone Nov 14, 2025
5442002
refactor!: make global states and config values JSON-friendly
notwindstone Nov 14, 2025
6ca6ad9
feat: improve custom layout rendering state
notwindstone Nov 14, 2025
d0fd9e5
feat: implement config syncing
notwindstone Nov 14, 2025
f18ad06
feat: improve overall UX
notwindstone Nov 14, 2025
6a9a199
docs: prettify readme.md
notwindstone Nov 14, 2025
9d0d5f1
feat: implement a page teleporter
notwindstone Nov 14, 2025
dfb6347
feat: improve custom layout paddings
notwindstone Nov 14, 2025
b13377f
docs: add more explanations
notwindstone Nov 14, 2025
ef383a7
refactor: remove locale field from the global states and config
notwindstone Nov 15, 2025
b2d87aa
docs: fully fill declarations.ts with comments
notwindstone Nov 15, 2025
8241dae
docs: improve overall documentation
notwindstone Nov 15, 2025
dfa85ff
refactor: change file system access permissions
notwindstone Nov 15, 2025
4d7796d
feat: implement a better at a glance widget
notwindstone Nov 15, 2025
91061aa
feat: save code (final commit before a break)
notwindstone Nov 15, 2025
0898043
feat: improve invalid config handling
notwindstone Nov 16, 2025
64c55e7
feat: apply tauri permissions to all webview window identifiers
notwindstone Nov 16, 2025
63f404e
feat: implement route reading from search params
notwindstone Nov 16, 2025
4dd110c
test: adapt tests to the new config reading code
notwindstone Nov 16, 2025
128a482
feat: add initial code to handle minecraft instance states
notwindstone Nov 18, 2025
fd11602
fix: fix not working error catch in get-safe-config-file
notwindstone Nov 18, 2025
1e63b82
feat: implement handling minecraft instances
notwindstone Nov 18, 2025
7cf0188
feat: add new utilities to the window namespace
notwindstone Nov 18, 2025
ca21b24
feat: configure tauri oauth2 plugin
notwindstone Nov 18, 2025
b2bba06
feat: implement a launch options initial component
notwindstone Nov 18, 2025
5cf1abd
refactor: implement better home page file structure
notwindstone Nov 18, 2025
1a94feb
feat: implement a permission system for extensions
notwindstone Nov 19, 2025
955bf9a
feat: implement fine-grained permissions apply
notwindstone Nov 19, 2025
bd1f4d4
feat: implement blur option in the global background
notwindstone Nov 19, 2025
42d4466
ci: add windows builds with offline installer
notwindstone Nov 20, 2025
c9eb8e6
ci: remove the offline setup build
notwindstone Nov 20, 2025
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
114 changes: 84 additions & 30 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ on:
- beta
- rc
- release
- extensions
tags:
- "*"
workflow_dispatch:

env:
# default value, will be overwritten later if tag exists
APP_VERSION: "0.1.0"
# A default value, will be overwritten later if tag exists
APP_VERSION: "0.0.1"

jobs:
tauri:
Expand All @@ -27,18 +28,46 @@ jobs:
fail-fast: false
matrix:
include:
- name: "macOS-ARM"
platform: "macos-latest" # for Arm based macs (M1 and above).
- name: "macOS ARM"
identifier: "macos-arm"
platform: "macos-latest" # For Arm based macs (M1 and above).
args: "--target aarch64-apple-darwin"
- name: "macOS-x86_64"
platform: "macos-latest" # for Intel based macs.
type: "non-portable"
- name: "macOS x86_64"
identifier: "macos-x86"
platform: "macos-latest" # For Intel based macs.
args: "--target x86_64-apple-darwin"
type: "non-portable"
- name: "Linux"
identifier: "linux"
platform: "ubuntu-22.04"
args: ""
type: "non-portable"
- name: "Windows"
identifier: "windows"
platform: "windows-latest"
args: ""
type: "non-portable"
- name: "macOS ARM (Portable)"
identifier: "macos-arm"
platform: "macos-latest" # For Arm based macs (M1 and above).
args: "--target aarch64-apple-darwin"
type: "portable"
- name: "macOS x86_64 (Portable)"
identifier: "macos-x86"
platform: "macos-latest" # For Intel based macs.
args: "--target x86_64-apple-darwin"
type: "portable"
- name: "Linux (Portable)"
identifier: "linux"
platform: "ubuntu-22.04"
args: ""
type: "portable"
- name: "Windows (Portable)"
identifier: "windows"
platform: "windows-latest"
args: ""
type: "portable"

runs-on: ${{ matrix.platform }}
steps:
Expand Down Expand Up @@ -67,22 +96,38 @@ jobs:
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

- name: Use version from Github Tag (Non-Windows)
if: startsWith(github.ref, 'refs/tags/') && matrix.name != 'Windows'
if: startsWith(github.ref, 'refs/tags/') && matrix.identifier != 'windows'
run: |
TAG_NAME="${GITHUB_REF#refs/tags/}"
echo "APP_VERSION=${TAG_NAME}" >> $GITHUB_ENV

- name: Use version from Github Tag (Windows)
if: startsWith(github.ref, 'refs/tags/') && matrix.name == 'Windows'
if: startsWith(github.ref, 'refs/tags/') && matrix.identifier == 'windows'
run: |
$TAG_NAME = $env:GITHUB_REF -replace 'refs/tags/', ''
echo "APP_VERSION=$TAG_NAME" >> $env:GITHUB_ENV

- name: Remove File System restrictions (Portable-only)
if: matrix.type == 'portable'
uses: restackio/update-json-file-action@6f50afee9a03a456a30cd574123db793319f7544
with:
file: "./src-tauri/capabilities/plugin-fs.json"
fields: "{
\"permissions[0].allow\": [{\"path\":\"**/*\"}]
}"

- name: Mark window title as Portable (Portable-only)
if: matrix.type == 'portable'
uses: restackio/update-json-file-action@6f50afee9a03a456a30cd574123db793319f7544
with:
file: "./src-tauri/tauri.conf.json"
fields: "{\"app.windows[0].title\": \"Kaede Portable\"}"

- name: Bump tauri.conf.json version
uses: restackio/update-json-file-action@6f50afee9a03a456a30cd574123db793319f7544
with:
file: "./src-tauri/tauri.conf.json"
fields: '{"version": "${{ env.APP_VERSION }}"}'
fields: "{\"version\": \"${{ env.APP_VERSION }}\"}"

- name: Bump Cargo.toml version
uses: colt-1/toml-editor@da6b46ee7779ed730d2160393ed95fb20e82696d
Expand All @@ -100,6 +145,15 @@ jobs:
- name: Install frontend dependencies
run: bun install

- name: Run TypeScript checks
run: bun run typecheck

- name: Run ESLint
run: bun run lint

- name: Run Vitest
run: bun run test

- name: Build a Tauri app (Non-Release)
if: (startsWith(github.ref, 'refs/tags/')) != true
uses: tauri-apps/tauri-action@564aea5a8075c7a54c167bb0cf5b3255314a7f9d
Expand All @@ -121,81 +175,81 @@ jobs:
args: ${{ matrix.args }}

- name: Upload binary (Windows, NSIS)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Windows'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'windows' && matrix.type != 'portable'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-windows-nsis-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-windows-nsis-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/bundle/nsis/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_x64-setup.exe"

- name: Upload binary (Windows, MSI)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Windows'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'windows' && matrix.type != 'portable'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-windows-msi-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-windows-msi-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/bundle/msi/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_x64_en-US.msi"

- name: Upload binary (Windows, portable)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Windows'
- name: Upload binary (Windows, non-setup)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'windows'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-windows-portable-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-windows-non-setup-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/${{ steps.json_properties.outputs.productName }}.exe"

- name: Upload binary (Linux, DEB)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Linux'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'linux'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-linux-deb-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-linux-deb-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/bundle/deb/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_amd64.deb"

- name: Upload binary (Linux, RPM)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Linux'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'linux'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-linux-rpm-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-linux-rpm-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/bundle/rpm/${{ steps.json_properties.outputs.productName }}-${{steps.json_properties.outputs.version}}-1.x86_64.rpm"

- name: Upload binary (Linux, AppImage)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'Linux'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'linux'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-linux-app-image-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-linux-app-image-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/release/bundle/appimage/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_amd64.AppImage"

- name: Upload binary (macOS, x86_64, DMG)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'macOS-x86_64'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'macos-x86'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-macos-x86_64-dmg-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-macos-x86_64-dmg-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_x64.dmg"

- name: Upload binary (macOS, x86_64, tarball)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'macOS-x86_64'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'macos-x86'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-macos-x86_64-tarball-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-macos-x86_64-tarball-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/x86_64-apple-darwin/release/bundle/macos/${{ steps.json_properties.outputs.productName }}.app.tar.gz"

- name: Upload binary (macOS, ARM, DMG)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'macOS-ARM'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'macos-arm'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-macos-arm-dmg-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-macos-arm-dmg-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/${{ steps.json_properties.outputs.productName }}_${{steps.json_properties.outputs.version}}_aarch64.dmg"

- name: Upload binary (macOS, ARM, tarball)
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.name == 'macOS-ARM'
if: (startsWith(github.ref, 'refs/tags/') != true) && matrix.identifier == 'macos-arm'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
if-no-files-found: "warn"
name: "${{ steps.json_properties.outputs.productName }}-nightly-macos-arm-tarball-${{steps.json_properties.outputs.version}}-${{ github.ref_name }}"
name: "${{ steps.json_properties.outputs.productName }}-dev-macos-arm-tarball-${{steps.json_properties.outputs.version}}-${{ matrix.type }}-${{ github.ref_name }}"
path: "./src-tauri/target/aarch64-apple-darwin/release/bundle/macos/${{ steps.json_properties.outputs.productName }}.app.tar.gz"
47 changes: 0 additions & 47 deletions .github/workflows/eslint.yml

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# Development
public/

# Logs
logs
*.log
Expand Down
Binary file modified bun.lockb
Binary file not shown.
52 changes: 37 additions & 15 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
[README for JavaScript-related code](../src/README.md) | [README for Rust-related code](../src-tauri/README.md) | Contributing Guidelines

# Contributions Guidelines

## Note
Expand All @@ -10,19 +12,39 @@ Translations are done externally via a [Kaede Translations repository](https://g

## Extensions

tbd
You need this section only if you want to develop an extension.

### Repositories

Kaede has two built-in plugin repositories.

The first one is a [Kaede Add-ons User Repository (KAUR)](https://github.com/kaede-basement/kaur), similar to [AUR](https://aur.archlinux.org/) and [nixpkgs](https://github.com/NixOS/nixpkgs). This repository contains user published extensions.

The second one is a [trusted-extensions repository](https://github.com/kaede-basement/trusted-extensions). I publish my extensions there. Others may publish there too, but only by contacting me. A plugin publisher must provide me the plugin source code and build manuals. I will manually review the provided code and provide the feedback if something is not good. The reviewing procedure will happen each time a plugin publisher wants to update their extension in the repository.

### Safety

Extensions can be loaded in two environments.

The first one is a restricted environment (sandbox) that uses a permission-based system. When enabling the plugin for the first time, users are prompted with the permissions window. That window has permission toggles that the plugin requested. KAUR extensions are executed in this environment.

Restricted environment is achieved by using a [Secure ECMAScript](https://github.com/endojs/endo) framework. Each permission has its own list of globals that are passed to the plugin. Unfortunately, almost every DOM operation is prohibited since it leads to the sandbox escape.

The second one is an unrestricted environment that allows plugins to do everything that the Kaede can do itself. Trusted extensions are executed in this environment. Settings also have an option to enable the execution of KAUR extensions that require an unrestricted environment.

## Code Formatting

All files are formatted with [ESLint](https://eslint.org/) using the configuration in `eslint.config.js`. Ensure it is run on changed files before committing!

Please also follow the project's conventions for frontend:

- No AI slops in the launcher code (plugins don't count).
- TypeScript is highly recommended.
- `.vue` file names should be formatted as `PascalCase`. All other files should use `kebab-case`.
- Exported constants should be formatted as `PascalCase`.
- Functions, variables, non-exported constants should be formatted as `camelCase`.
- Elements styling is preferred by using `Tailwind v3` classes. If there is no utility class for some case, make your own, or use CSS/JS.
- Element styling is preferred by using `Tailwind v3` classes. If there is no utility class for some cases, then make your own with CSS.
- [BEM](https://en.bem.info/methodology/) methodology is the preferred way to name element IDs and classes to simplify styling by extensions. All elements should have unique IDs.

## Commit Messages

Expand All @@ -33,24 +55,24 @@ Please also follow the project's conventions for frontend:
### Elements

- **Type**: Choose from the following list. If none of the types match, use `chore`.
- `feat`: A new feature
- `fix`: A bug fix
- `docs`: Documentation only changes
- `style`: Changes that do not affect the meaning of the code
- `refactor`: Improving code structure
- `perf`: A code change that improves performance
- `test`: Adding missing tests or correcting existing tests
- `build`: Changes that affect the build system or external dependencies
- `chore`: Other changes that don't modify src or test files
- `revert`: Reverts a previous commit
- `release`: Releasing a new version
- `ci`: Changes to our CI configuration
- `feat`: A new feature.
- `fix`: A bug fix.
- `docs`: Documentation only changes.
- `style`: Changes that do not affect the meaning of the code.
- `refactor`: Improving code structure.
- `perf`: A code change that improves performance.
- `test`: Adding missing tests or correcting existing tests.
- `build`: Changes that affect the build system or external dependencies.
- `chore`: Other changes that don't modify src or test files.
- `revert`: Reverts a previous commit.
- `release`: Releasing a new version.
- `ci`: Changes to our CI configuration.
- **Scope**: As described in Conventional Commits.
- **Breaking Change**: If you're introducing a breaking change, append `!` to the type or scope, e.g., `feat(ui)!: Breaking change`.

- **Subject**: Brief description of the change.

### Guidelines

- Use imperative mood, e.g., "add feature" instead of "adding feature" or "added feature".
- Use imperative mood, e.g. "add feature" instead of "adding feature" or "added feature".
- Avoid ending with a period.
Loading