Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 15 additions & 4 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ body:
- type: markdown
attributes:
value: |
MonoCode is macOS (Apple Silicon) only. Linux and Windows are out of scope.
MonoCode supports macOS, Linux, and Windows.

- type: input
id: version
Expand All @@ -15,11 +15,22 @@ body:
validations:
required: true

- type: dropdown
id: os
attributes:
label: Operating system
options:
- macOS
- Linux
- Windows
validations:
required: true

- type: input
id: macos
id: os-version
attributes:
label: macOS version
placeholder: "15.5"
label: OS version
placeholder: "Windows 11, Ubuntu 24.04, macOS 15.5"
validations:
required: true

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
check:
strategy:
matrix:
os: [macos-latest, ubuntu-latest]
os: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand Down
40 changes: 36 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ permissions:

jobs:
release:
needs: linux
needs: [linux, windows]
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -168,6 +168,12 @@ jobs:
name: linux-packages
path: target/release/bundle/linux

- name: Download Windows packages
uses: actions/download-artifact@v4
with:
name: windows-packages
path: target/release/bundle/nsis

- name: GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -181,14 +187,15 @@ jobs:
shopt -s nullglob
DEB=("$BUNDLE"/linux/*.deb)
APPIMAGE=("$BUNDLE"/linux/*.AppImage)
if (( ${#DEB[@]} != 1 || ${#APPIMAGE[@]} != 1 )); then
echo "Expected exactly one .deb and one AppImage" >&2
NSIS=("$BUNDLE"/nsis/*.exe)
if (( ${#DEB[@]} != 1 || ${#APPIMAGE[@]} != 1 || ${#NSIS[@]} != 1 )); then
echo "Expected exactly one .deb, one AppImage, and one NSIS installer" >&2
exit 1
fi
gh release create "$GITHUB_REF_NAME" \
--title "MonoCode $VERSION" \
--notes "See CHANGELOG.md for details." \
"$DMG" "$TAR" "$SIG" "${DEB[0]}" "${APPIMAGE[0]}"
"$DMG" "$TAR" "$SIG" "${DEB[0]}" "${APPIMAGE[0]}" "${NSIS[0]}"

linux:
name: Linux packages
Expand Down Expand Up @@ -230,3 +237,28 @@ jobs:
name: linux-packages
path: release-artifacts/
if-no-files-found: error

windows:
name: Windows packages
runs-on: windows-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- uses: dtolnay/rust-toolchain@stable

- run: npm ci

- name: Build Windows packages
run: npm run build:windows

- name: Upload Windows packages
uses: actions/upload-artifact@v4
with:
name: windows-packages
path: target/release/bundle/nsis/*.exe
if-no-files-found: error
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- Windows is a supported desktop target. Terminals, agent CLIs, and the rest of the macOS/Linux feature set run there, and the window uses Tauri Acrylic in place of macOS vibrancy.
- Settings → General → Diff view: Editor or Unified. Unified stacks every working-tree change in one **Changes** tab — GitHub-style review, editor syntax colours, sticky file headers and line numbers, and a single horizontal scroll that stops at the end of the line. Editor keeps the previous per-file working-tree tabs.

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ You need Node.js 20+, a current stable Rust toolchain, and at least one provider
- [omp](https://omp.sh) - `curl -fsSL https://omp.sh/install | sh`
- [fx](https://fx.sh) - `curl -fsSL https://fx.sh/setup.sh | bash` then `fx login`

macOS and Linux are supported targets. On Debian/Ubuntu, `npm run setup:linux:deb` installs the native Tauri build dependencies.
macOS, Linux, and Windows are supported targets. On Debian/Ubuntu, `npm run setup:linux:deb` installs the native Tauri build dependencies.

```bash
npm install
Expand Down
100 changes: 99 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[workspace]
resolver = "2"
members = ["src-tauri"]
exclude = ["vendor/portable-pty"]

[workspace.package]
version = "0.1.32"
Expand Down
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ macOS (Apple Silicon): download [MonoCode.dmg](https://dl.usemono.dev/MonoCode.d

Linux (x86_64): download the `.deb` or AppImage from [GitHub Releases](https://github.com/hardbeat920/monocode/releases/latest). Install the `.deb` with `sudo apt install ./MonoCode_*.deb`, or make the AppImage executable with `chmod +x MonoCode_*.AppImage` and run it directly.

Windows (x86_64): download the NSIS installer from [GitHub Releases](https://github.com/hardbeat920/monocode/releases/latest) and run it.

## Some notes

This is very early and you should expect bugs.
Expand All @@ -40,9 +42,9 @@ Small, focused pull requests are welcome. Anything large is worth an issue first

## Build from source

Supports macOS and Linux.
Supports macOS, Linux, and Windows.

Need Node.js 20+ and a current stable Rust toolchain. On Linux, ensure standard Tauri prerequisites are installed (e.g. `libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `libsoup-3.0-dev`, `libjavascriptcoregtk-4.1-dev`).
Need Node.js 20+ and a current stable Rust toolchain. On Linux, ensure standard Tauri prerequisites are installed (e.g. `libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `libsoup-3.0-dev`, `libjavascriptcoregtk-4.1-dev`). On Windows, the installer bootstraps the [WebView2](https://developer.microsoft.com/microsoft-edge/webview2/) runtime when it is missing.

```bash
npm install
Expand All @@ -62,6 +64,16 @@ npm run build:linux
The Linux build emits `.deb` and AppImage bundles under `target/release/bundle/`.
Tauri loads `src-tauri/tauri.linux.conf.json` automatically for Linux development and builds.

### Windows packages

```bash
npm ci
npm run build:windows
```

The Windows build emits an NSIS installer under `target/release/bundle/nsis/`.
Tauri loads `src-tauri/tauri.windows.conf.json` automatically for Windows development and builds.

## License

[MIT](LICENSE). Provider names and logos are trademarks of their owners - see [NOTICE](NOTICE).
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/monocode.png" />
<title>MonoCode</title>
<script>
(function () {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"tauri": "tauri",
"tauri:stable": "tauri dev --no-watch --config src-tauri/tauri.stable.conf.json",
"setup:linux:deb": "bash scripts/install-linux-deps-debian.sh",
"build:linux": "tauri build --bundles deb,appimage"
"build:linux": "tauri build --bundles deb,appimage",
"build:windows": "set \"RUSTUP_TOOLCHAIN=stable-x86_64-pc-windows-msvc\" && tauri build --bundles nsis"
},
"dependencies": {
"@codemirror/lang-css": "^6.3.1",
Expand Down
4 changes: 4 additions & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ tauri-plugin-process = "2"
[target.'cfg(unix)'.dependencies]
libc = "0.2"

[target.'cfg(windows)'.dependencies]
portable-pty = { version = "0.9", path = "../vendor/portable-pty" }
windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_Security", "Win32_System_JobObjects", "Win32_System_Threading", "Win32_System_LibraryLoader", "Win32_System_Diagnostics_ToolHelp"] }

[target.'cfg(target_os = "macos")'.dependencies]
block2 = "0.6.2"
objc2 = "0.6"
Expand Down
Loading
Loading