Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

g1t.sh

Commit

The download page says every build is unsigned while g1t is in alpha. A notice under the platform switcher says the desktop app, the Android app, the runner and the CLI aren't code-signed yet, so the system warns before opening them, with what to choose on the platform shown (Windows: More info, Run anyway; macOS: System Settings, Privacy & Security, Open Anyway; Linux: an unsigned package, an AppImage made executable; Android: Play Protect's More details, Install anyway). The macOS-only question becomes "Why does my system warn me before opening it?" covering all four, and the Android app is no longer said to be signed by g1t. The desktop guide gains "Unsigned during the alpha" in place of the old right-click-Open note, and the phone app guide says what to do when Play Protect warns.

syntaqxcommitted Parentf3017aaBrowse files
3 files+68−100/3 viewed
+18−1
3535 | Platform | What you get | Notes |
3636 | --- | --- | --- |
3737 | **Windows** 10 and 11 | An installer, `g1t-<version>-windows-x64-setup.exe` | Installs for your account alone; no administrator needed. Uses the WebView2 runtime Windows already has, and fetches it if a machine lacks it. |
38−| **macOS** 11 and later | A disk image, Apple silicon or Intel | Drag g1t to Applications. The app is not yet notarized with Apple: the first time, right-click it and choose **Open**. |
38+| **macOS** 11 and later | A disk image, Apple silicon or Intel | Drag g1t to Applications. |
3939 | **Linux** | An AppImage, a `.deb` or an `.rpm` | The AppImage runs anywhere once made executable (`chmod +x`). It needs WebKitGTK 4.1, which the packages install for you. |
4040
4141 Every file's SHA-256 is in `SHA256SUMS` beside it, at
4242 `https://g1t.sh/downloads/desktop/<version>/`.
4343
44+### Unsigned during the alpha
45+
46+While g1t is in alpha, none of its builds are code-signed: not the desktop
47+app, the Android app, the runner or the CLI. Your system can't tell who made
48+them, so it warns you the first time you open one. Check the file against
49+its SHA-256, then:
50+
51+- **Windows**: when SmartScreen says it protected your PC, choose **More
52+ info**, then **Run anyway**.
53+- **macOS**: when it says it can't check g1t, open **System Settings →
54+ Privacy & Security** and choose **Open Anyway**.
55+- **Linux**: your package manager may say the `.deb` or `.rpm` isn't
56+ signed. The AppImage needs only `chmod +x`.
57+
58+The app's own updates are different: each is checked against g1t's
59+signature before it installs.
60+
4461 The app opens on g1t.sh's sign-in page, not the site's landing page: it
4562 is for using g1t, not for reading about it. It keeps you signed in like a
4663 browser does, and signing out brings you back to the sign-in page.
+6−3
1818 1. On your Android phone, choose **Download for Android**. On a computer,
1919 scan the code beside it with the phone's camera instead.
2020 2. Open the downloaded file. Android asks once to allow your browser to
21− install apps: allow it.
21+ install apps: allow it. If Play Protect warns about an unknown app,
22+ choose **More details**, then **Install anyway**.
2223 3. Open **g1t (beta)** and choose **Sign in with g1t**.
2324
2425 Point at the file's name on the page to see its SHA-256, to check the file
25−you have is the one g1t published.
26+you have is the one g1t published. Like every g1t build during the alpha,
27+the app isn't code-signed yet, which is why Android warns
28+([unsigned during the alpha](/guides/desktop/#unsigned-during-the-alpha)).
2629
2730 **Why a download, and not Google Play?** Google Play and the App Store
2831 publish a company's apps only once it is verified with a D-U-N-S number,
2932 and Flagon's is on its way. Until then the Android app is published on
30−g1t.sh, signed by g1t, as [the desktop app](/guides/desktop/) is. It moves
33+g1t.sh, as [the desktop app](/guides/desktop/) is. It moves
3134 into Google Play as soon as it can. iOS has no way in but the App Store,
3235 so it follows then.
3336
+44−6
11 import { env } from "cloudflare:workers";
22 import { connectLink } from "@g1t/contracts/discovery";
3−import { ArrowRight, Bell, Download, Link2, RefreshCw, Server, Smartphone } from "lucide-react";
3+import { ArrowRight, Bell, Download, Link2, RefreshCw, Server, ShieldAlert, Smartphone } from "lucide-react";
44 import { type ReactNode, useEffect, useRef, useState } from "react";
55 import { useLoaderData } from "react-router";
66
99 import { QrCode } from "../components/qr-code";
1010 import { ButtonLink } from "../components/ui";
1111 import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "../components/ui/accordion";
12+import { Alert, AlertDescription, AlertTitle } from "../components/ui/alert";
1213 import { Badge } from "../components/ui/badge";
1314 import { Button } from "../components/ui/button";
1415 import { Card, CardContent } from "../components/ui/card";
134135 ios: { name: "iOS", device: "iPhone", note: "" },
135136 };
136137
138+/**
139+ * What each system says about an app that isn't code-signed, and how to
140+ * open it anyway. Every build is unsigned while g1t is in alpha.
141+ */
142+const UNSIGNED: Record<PlatformId, string | null> = {
143+ windows: "Windows may say it protected your PC: choose More info, then Run anyway.",
144+ macos: "macOS may say it can't check g1t: open System Settings, Privacy & Security, and choose Open Anyway.",
145+ linux: "Your package manager may say the package isn't signed. The AppImage needs only to be made executable.",
146+ android: "Play Protect may warn about an unknown app: choose More details, then Install anyway.",
147+ ios: null,
148+};
149+
137150 const KINDS: Record<string, string> = {
138151 installer: "Installer",
139152 dmg: "Disk image",
227240 ))}
228241 </TabsList>
229242 </div>
243+ <Alert tone="warn" className="mx-auto mt-6 flex max-w-3xl gap-3 px-4 py-3">
244+ <ShieldAlert size={16} className="mt-0.5 shrink-0 text-warn" />
245+ <div>
246+ <AlertTitle>Unsigned while g1t is in alpha</AlertTitle>
247+ <AlertDescription>
248+ The desktop app, the Android app, the runner and the CLI aren't code-signed yet, so your system warns you before it opens them.{" "}
249+ {UNSIGNED[tab] ?? "Every download here is unsigned until g1t leaves alpha."} Each file's SHA-256 is listed to check it against.
250+ </AlertDescription>
251+ </div>
252+ </Alert>
230253 {PLATFORM_IDS.map((id) => (
231254 <TabsContent key={id} value={id} className="mt-6">
232255 {isDesktop(id) ? (
648671 <AccordionTrigger>Why a download, and not Google Play or the App Store?</AccordionTrigger>
649672 <AccordionContent>
650673 Both stores publish a company's apps only once it is verified with a D-U-N-S number, and Flagon's is on its way. Until then the Android app is
651− published {hosted ? "here" : "on g1t.sh"}, signed by g1t, as the desktop app is. It moves into Google Play as soon as it can, and iOS follows
652− through the App Store.
674+ published {hosted ? "here" : "on g1t.sh"}, as the desktop app is. It moves into Google Play as soon as it can, and iOS follows through the App
675+ Store.
653676 </AccordionContent>
654677 </AccordionItem>
655− <AccordionItem value="macos">
656− <AccordionTrigger>Why does macOS ask before opening it?</AccordionTrigger>
657− <AccordionContent>The app isn't notarized with Apple yet. The first time, right-click it and choose Open.</AccordionContent>
678+ <AccordionItem value="unsigned">
679+ <AccordionTrigger>Why does my system warn me before opening it?</AccordionTrigger>
680+ <AccordionContent>
681+ <p>
682+ While g1t is in alpha, none of its builds are code-signed: not the desktop app, the Android app, the runner or the CLI. Your system can't tell
683+ who made them, so it warns you the first time. To open one anyway:
684+ </p>
685+ <ul className="mt-3 space-y-1.5">
686+ {(["windows", "macos", "linux", "android"] as const).map((id) => (
687+ <li key={id}>
688+ <span className="text-fg-soft">{PLATFORMS[id].name}:</span> {UNSIGNED[id]}
689+ </li>
690+ ))}
691+ </ul>
692+ <p className="mt-3">
693+ Check a download against its SHA-256 first. The desktop app's own updates are checked against g1t's signature before they install.
694+ </p>
695+ </AccordionContent>
658696 </AccordionItem>
659697 <AccordionItem value="check">
660698 <AccordionTrigger>How do I check a download?</AccordionTrigger>