Forks a repository into you or an organization, and opens pull requests from the fork into the repository it came from.
Works with Forgejo forks too. Ship it.
usta is a desktop client for GitHub and Forgejo. One inbox for reviews, mentions and failed checks; pull requests read from real git diffs; and it keeps working when the network does not.
nix run github:abdivasiyev/usta
Written in Haskell with GTK 4, usta opens in a blink and keeps your forges in a local cache, so the pages you know are already there.
Review requests, mentions and failed checks from GitHub and Forgejo in one list, with desktop notifications when something needs you.
Diffs come from a local mirror: split or unified, changed words marked, comments on any line or range, and files you viewed stay viewed until they change.
Everything synced is kept on disk. Open conversations update as people write, without reloading the page you are reading.
Live job logs with colors and folded groups. Run a workflow with its inputs, re-run failed jobs or cancel a run, from the pull request itself.
Fork in a click, open pull requests from your fork, clone into any folder, or start a repository on any forge you use.
⌘K finds any pull request, issue or repository. j and k move, Enter opens, e marks done; text fields know the Emacs keys.
Make usta the default browser and forge links from chat or mail open in the app; every other link goes on to the browser you choose.
A Home Manager, NixOS and nix-darwin module sets every preference from your configuration, so each machine starts the same.
Side by side or unified, with the file's header kept at the top of a long diff and its Viewed box always in reach. Threads sit on their lines; resolved ones fold away.
Every page below is drawn from the app as it is today: the same layout, the same controls.
Comments, reviews, commits and events in one timeline that updates while you read it. Reply with Enter, react, edit a title in place, and merge with the method the repository allows.
Forks a repository into you or an organization, and opens pull requests from the fork into the repository it came from.
Works with Forgejo forks too. Ship it.
Every job of a pull request with its steps and its log, in color, with folded groups, following a running job live. Start a workflow by hand with its inputs, re-run what failed, or cancel a run.
Every repository you can see, filtered by forge and owner. Files with an icon for their type, code with syntax colors, blame and history, a README rendered with diagrams, on any branch or tag.
-- | The files of each pull request marked viewed, each with a mark of -- what its diff was then, so a file that changed since opens again. module Usta.Viewed (load, keep) where -- | The files viewed at @key@ (a pull request), by path. load :: Text -> IO (Map.Map Text Text) load key = Map.findWithDefault Map.empty key <$> everything keep :: Text -> Map.Map Text Text -> IO ()
Pull requests, issues and repositories across every forge, searched on the forge itself, plus every command. Paste a link and it opens the page it points to.
What waits for your review, what you opened, what is assigned to you, across forges. Filter by forge, repository, label or author, sort by update or age, and the forge pages in the rest as you scroll.
Fork into your account or an organization. On a repository you cannot push to, a new pull request forks first and opens from your fork. Clone over HTTPS or SSH into any folder, or start a new repository.
Sign in to GitHub and Forgejo with a token or in the browser; the token stays in the system keyring. Choose how often to sync, the theme and notifications, or set them all from your Nix configuration.
usta is in beta. It runs on macOS and Linux and checks once a day whether a newer release is out.
Download usta.dmg from the latest release and drag usta into Applications.
Download usta-x86_64.AppImage, make it executable and run it, or install the package for your system.
Run it at once, or add the Home Manager module and set it up in your configuration.
inputs.usta.url = "github:abdivasiyev/usta";
imports = [ inputs.usta.homeManagerModules.default ];
programs.usta = {
enable = true;
settings.theme = "system";
};