├── .github └── workflows │ ├── build-specific-zed-version.yml │ └── build.yml ├── README.md └── zed_setup.iss /.github/workflows/build-specific-zed-version.yml: -------------------------------------------------------------------------------- 1 | name: Build Specific Zed Version 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | zed_version: 6 | description: 'Zed version to build (e.g., v0.100.0)' 7 | required: true 8 | type: string 9 | 10 | jobs: 11 | check: 12 | runs-on: ubuntu-latest 13 | outputs: 14 | version_exists: ${{ steps.check_tag.outputs.exists }} 15 | steps: 16 | - name: Check if version exists 17 | id: check_tag 18 | env: 19 | GH_TOKEN: ${{ github.token }} 20 | run: | 21 | if gh release view ${{ github.event.inputs.zed_version }} --repo zed-industries/zed &> /dev/null; then 22 | echo "Version ${{ github.event.inputs.zed_version }} exists." 23 | echo "exists=true" >> $GITHUB_OUTPUT 24 | else 25 | echo "Version ${{ github.event.inputs.zed_version }} does not exist." 26 | echo "exists=false" >> $GITHUB_OUTPUT 27 | fi 28 | 29 | build: 30 | needs: check 31 | runs-on: windows-latest 32 | if: needs.check.outputs.version_exists == 'true' 33 | steps: 34 | - name: Enable long paths in Git 35 | run: | 36 | git config --system core.longpaths true 37 | 38 | - name: Enable long paths in Windows 39 | shell: powershell 40 | run: | 41 | New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" ` 42 | -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force 43 | - name: Checkout Zed repository 44 | uses: actions/checkout@v3 45 | with: 46 | repository: zed-industries/zed 47 | ref: ${{ github.event.inputs.zed_version }} 48 | fetch-depth: 1 49 | 50 | - name: Set up for build 51 | run: | 52 | echo "Ready to build ${{ github.event.inputs.zed_version }}" 53 | 54 | - name: Install rust 55 | uses: actions-rs/toolchain@v1 56 | with: 57 | toolchain: stable 58 | override: true 59 | target: wasm32-wasip1 60 | 61 | - name: Rust Cache 62 | uses: Swatinem/rust-cache@v2.7.3 63 | 64 | - name: Build release 65 | uses: actions-rs/cargo@v1 66 | with: 67 | command: build 68 | args: --release 69 | 70 | - name: Archive build 71 | uses: actions/upload-artifact@v4 72 | with: 73 | name: zed-release 74 | path: target/release/zed.exe 75 | 76 | create_installer: 77 | needs: [check, build] 78 | runs-on: windows-latest 79 | 80 | steps: 81 | - name: Checkout our repository 82 | uses: actions/checkout@v3 83 | 84 | - name: Download Zed build artifact 85 | uses: actions/download-artifact@v4 86 | with: 87 | name: zed-release 88 | path: zed-release 89 | 90 | - name: Update Inno Setup script version 91 | run: | 92 | $content = Get-Content -Path zed_setup.iss -Raw 93 | $newContent = $content -replace '#define MyAppVersion ".*"', '#define MyAppVersion "${{ github.event.inputs.zed_version }}"' 94 | $newContent | Set-Content -Path zed_setup.iss -NoNewline 95 | 96 | - name: Compile Setup Wizard 97 | uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 98 | with: 99 | path: zed_setup.iss 100 | options: /O+ 101 | 102 | - name: Upload Inno Setup Installer 103 | uses: actions/upload-artifact@v4 104 | with: 105 | name: zed-installer 106 | path: Output/ZedInstaller-${{ github.event.inputs.zed_version }}.exe 107 | 108 | release: 109 | needs: [check, build, create_installer] 110 | runs-on: ubuntu-latest 111 | permissions: 112 | contents: write 113 | 114 | steps: 115 | - name: Download Inno Setup Installer 116 | uses: actions/download-artifact@v4 117 | with: 118 | name: zed-installer 119 | path: zed-installer 120 | 121 | - name: Download non-installer executable 122 | uses: actions/download-artifact@v4 123 | with: 124 | name: zed-release 125 | path: zed-release 126 | 127 | - name: Zip the non-installer executable 128 | run: zip zed-${{ github.event.inputs.zed_version }}.zip zed-release/zed.exe 129 | 130 | - name: Upload release artifacts to GitHub Release 131 | uses: softprops/action-gh-release@v2 132 | with: 133 | name: ${{ github.event.inputs.zed_version }} 134 | tag_name: ${{ github.event.inputs.zed_version }} 135 | draft: false 136 | files: | 137 | zed-installer/ZedInstaller-${{ github.event.inputs.zed_version }}.exe 138 | zed-${{ github.event.inputs.zed_version }}.zip 139 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build Zed Latest Release 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | - cron: "0 0 * * *" # Runs every night at midnight UTC 6 | push: 7 | branches: 8 | - main 9 | 10 | jobs: 11 | check: 12 | runs-on: ubuntu-latest 13 | outputs: 14 | latest_tag: ${{ steps.get_latest_tag.outputs.latest_tag }} 15 | proceed: ${{ steps.compare.outputs.proceed }} 16 | 17 | steps: 18 | - name: Get latest Zed release tag 19 | id: get_latest_tag 20 | env: 21 | GH_TOKEN: ${{ github.token }} 22 | run: | 23 | latestTag=$(gh release list -R zed-industries/zed -L 10 --json tagName,isLatest -q '.[] | select(.isLatest == true) | select(.tagName | startswith("v")) | .tagName') 24 | echo "Latest Zed release tag: $latestTag" 25 | echo "latest_tag=$latestTag" >> $GITHUB_OUTPUT 26 | 27 | - name: Get our latest release name 28 | id: get_our_release 29 | env: 30 | GH_TOKEN: ${{ github.token }} 31 | run: | 32 | ourLatestRelease=$(gh release list -R ${{ github.repository }} -L 10 --json tagName,isLatest -q '.[] | select(.isLatest == true) | select(.tagName | startswith("v")) | .tagName') 33 | echo "Our latest release: $ourLatestRelease" 34 | echo "OUR_LATEST_RELEASE=$ourLatestRelease" >> $GITHUB_ENV 35 | 36 | - name: Compare releases 37 | id: compare 38 | run: | 39 | if [ -z "${{ steps.get_latest_tag.outputs.latest_tag }}" ] || [ "${{ env.OUR_LATEST_RELEASE }}" = "${{ steps.get_latest_tag.outputs.latest_tag }}" ]; then 40 | echo "Our latest release matches Zed's latest tag. Stopping workflow." 41 | echo "proceed=false" >> $GITHUB_OUTPUT 42 | else 43 | echo "Proceeding with build for Zed's latest tag: ${{ steps.get_latest_tag.outputs.latest_tag }}" 44 | echo "proceed=true" >> $GITHUB_OUTPUT 45 | fi 46 | 47 | build: 48 | needs: check 49 | runs-on: windows-latest 50 | if: needs.check.outputs.proceed == 'true' 51 | 52 | steps: 53 | - name: Enable long paths in Git 54 | run: | 55 | git config --system core.longpaths true 56 | 57 | - name: Enable long paths in Windows 58 | shell: powershell 59 | run: | 60 | New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" ` 61 | -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force 62 | 63 | - name: Checkout Zed repository 64 | uses: actions/checkout@v3 65 | with: 66 | repository: zed-industries/zed 67 | ref: ${{ needs.check.outputs.latest_tag }} 68 | fetch-depth: 1 69 | 70 | - name: Set up for build 71 | shell: powershell 72 | run: | 73 | Write-Output "Ready to build ${{ needs.check.outputs.latest_tag }}" 74 | if (Test-Path ".cargo/config.toml") { 75 | $configString = "[profile.release]`n debug = false`n lto = `"fat`"`n opt-level = 3`n codegen-units = 1`n panic = `"abort`"`n strip = true" 76 | Write-Output "Configuration string: $configString" 77 | $configString | Add-Content .cargo/config.toml 78 | Write-Output "Successfully appended build parameters to .cargo/config.toml" 79 | Get-Content .cargo/config.toml 80 | } else { 81 | Write-Output "Error: .cargo/config.toml file does not exist" 82 | } 83 | 84 | - name: Install rust 85 | uses: actions-rs/toolchain@v1 86 | with: 87 | toolchain: stable 88 | override: true 89 | target: wasm32-wasip1 90 | 91 | - name: Rust Cache 92 | uses: Swatinem/rust-cache@v2.7.3 93 | 94 | - name: Build release 95 | uses: actions-rs/cargo@v1 96 | with: 97 | command: build 98 | args: --release 99 | 100 | - name: Archive build 101 | uses: actions/upload-artifact@v4 102 | with: 103 | name: zed-release 104 | path: target/release/zed.exe 105 | 106 | create_installer: 107 | needs: [check, build] 108 | runs-on: windows-latest 109 | if: needs.check.outputs.proceed == 'true' 110 | 111 | steps: 112 | - name: Checkout our repository 113 | uses: actions/checkout@v3 114 | 115 | - name: Download Zed build artifact 116 | uses: actions/download-artifact@v4 117 | with: 118 | name: zed-release 119 | path: zed-release 120 | 121 | - name: Update Inno Setup script version 122 | run: | 123 | $content = Get-Content -Path zed_setup.iss -Raw 124 | $newContent = $content -replace '#define MyAppVersion ".*"', '#define MyAppVersion "${{ needs.check.outputs.latest_tag }}"' 125 | $newContent | Set-Content -Path zed_setup.iss -NoNewline 126 | 127 | - name: Compile Setup Wizard 128 | uses: Minionguyjpro/Inno-Setup-Action@v1.2.2 129 | with: 130 | path: zed_setup.iss 131 | options: /O+ 132 | 133 | - name: Upload Inno Setup Installer 134 | uses: actions/upload-artifact@v4 135 | with: 136 | name: zed-installer 137 | path: Output/ZedInstaller-${{ needs.check.outputs.latest_tag }}.exe 138 | 139 | release: 140 | needs: [check, build, create_installer] 141 | runs-on: ubuntu-latest 142 | permissions: 143 | contents: write 144 | if: needs.check.outputs.proceed == 'true' 145 | 146 | steps: 147 | - name: Download Inno Setup Installer 148 | uses: actions/download-artifact@v4 149 | with: 150 | name: zed-installer 151 | path: zed-installer 152 | 153 | - name: Download non-installer executable 154 | uses: actions/download-artifact@v4 155 | with: 156 | name: zed-release 157 | path: zed-release 158 | 159 | - name: Zip the non-installer executable 160 | run: zip zed-${{ needs.check.outputs.latest_tag }}.zip zed-release/zed.exe 161 | 162 | - name: Upload release artifacts to GitHub Release 163 | uses: softprops/action-gh-release@v2 164 | with: 165 | name: ${{ needs.check.outputs.latest_tag }} 166 | tag_name: ${{ needs.check.outputs.latest_tag }} 167 | draft: false 168 | make_latest: true 169 | files: | 170 | zed-installer/ZedInstaller-${{ needs.check.outputs.latest_tag }}.exe 171 | zed-${{ needs.check.outputs.latest_tag }}.zip 172 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ⚠️ This repository has been archived(2025/10/16). 2 | Since it seems that the Windows version of Zed has finally been released, this repository will be archived. 3 | 4 | The official installer can be found here: 5 | https://zed.dev/download 6 | 7 | If you still need to build it manually on Windows, please fork this repository. 8 | 9 | # Unofficial release builds of Zed for Windows 10 | 11 | Only release versions are included, and pre-release versions may not be included. 12 | 13 | builds: 14 | [https://github.com/MuNeNICK/zed-for-windows/releases](https://github.com/MuNeNICK/zed-for-windows/releases) 15 | 16 | # Build Types 17 | - ZedInstaller-{version}.exe 18 | 19 | This is the installer. You can install Zed to any location by following the installation wizard. 20 | 21 | - zed-{version}.zip 22 | 23 | This is the standalone executable of Zed. You can run the extracted executable directly after unzipping. 24 | 25 | ## Is it safe? 26 | 27 | This repository is just a [simple GitHub workflow](./.github/workflows/build.yml) that builds Zed from `main` and publishes a release every night at UTC+0000. (Additionally on push for testing). 28 | 29 | See the [Zed homepage](https://zed.dev/) or [official repository](https://github.com/zed-industries/zed) for more details. 30 | -------------------------------------------------------------------------------- /zed_setup.iss: -------------------------------------------------------------------------------- 1 | #define MyAppName "Zed" 2 | #define MyAppVersion "0.0.0" ; This will be dynamically updated by the workflow 3 | #define MyAppPublisher "Zed Industries" 4 | #define MyAppURL "https://zed.dev" 5 | #define MyAppExeName "zed.exe" 6 | 7 | [Setup] 8 | AppId={{DEC54CF2-B010-495E-A78B-BD7E1DED610A} 9 | AppName={#MyAppName} 10 | AppVersion={#MyAppVersion} 11 | AppPublisher={#MyAppPublisher} 12 | AppPublisherURL={#MyAppURL} 13 | AppSupportURL={#MyAppURL} 14 | AppUpdatesURL={#MyAppURL} 15 | DefaultDirName={autopf}\{#MyAppName} 16 | DisableProgramGroupPage=yes 17 | OutputBaseFilename=ZedInstaller-{#MyAppVersion} 18 | Compression=lzma2/ultra64 19 | SolidCompression=yes 20 | WizardStyle=modern 21 | UninstallDisplayIcon={app}\{#MyAppExeName} 22 | ChangesAssociations=yes 23 | PrivilegesRequired=lowest 24 | PrivilegesRequiredOverridesAllowed=dialog 25 | 26 | [Languages] 27 | Name: "english"; MessagesFile: "compiler:Default.isl" 28 | 29 | [Tasks] 30 | Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 31 | Name: "associatefiles"; Description: "Associate Zed with supported file types"; GroupDescription: "File associations:"; Flags: unchecked 32 | 33 | [Files] 34 | Source: "zed-release\zed.exe"; DestDir: "{app}"; Flags: ignoreversion 35 | 36 | [Icons] 37 | Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 38 | Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 39 | 40 | [Registry] 41 | Root: HKCU; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "Open with {#MyAppName}"; Flags: uninsdeletekey; Tasks: associatefiles 42 | Root: HKCU; Subkey: "Software\Classes\*\shell\{#MyAppName}\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Flags: uninsdeletekey; Tasks: associatefiles 43 | 44 | [Code] 45 | procedure CurStepChanged(CurStep: TSetupStep); 46 | begin 47 | if CurStep = ssPostInstall then 48 | begin 49 | if WizardIsTaskSelected('associatefiles') then 50 | begin 51 | // Associate Zed with specific file types 52 | // Add your specific file associations here 53 | end; 54 | end; 55 | end; 56 | 57 | procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 58 | begin 59 | if CurUninstallStep = usPostUninstall then 60 | begin 61 | // Remove desktop icon 62 | DeleteFile(ExpandConstant('{userdesktop}\{#MyAppName}.lnk')); 63 | 64 | // Remove file associations 65 | RegDeleteKeyIncludingSubkeys(HKCU, 'Software\Classes\*\shell\{#MyAppName}'); 66 | end; 67 | end; 68 | --------------------------------------------------------------------------------