245 Commits
Author SHA1 Message Date
hlatimer266andRūdolfs Ošiņš 74aaa6ef14 Use configured explorer and seed for links
explorerUrl() hardcoded both the seed ("iris.radicle.network") and
the explorer base ("https://radicle.network"), so every "Copy Link"
and "Open in …" action ignored the user's config and could point at
a host that does not replicate the repo.

Expose publicExplorer and preferredSeeds on the Config type (both
already carried by radicle::profile::Config) and thread config
through to every explorerUrl() call site. URLs are now built from
the publicExplorer template, filling $host from the first preferred
seed (falling back to rosa only when none are configured), and link
labels show the configured explorer's host.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-07-21 13:26:31 +02:00
justarandomgeek 7fe26dc4e5 Fix console window flashes when navigating repos on Windows 2026-07-21 12:05:55 +02:00
Rūdolfs Ošiņš e7b6d054d4 Release v0.13.0 2026-07-03 12:35:51 +02:00
Rūdolfs Ošiņš 9bd20fa15c Move patch pagination into the patch service 2026-07-03 11:33:12 +02:00
Rūdolfs Ošiņš ce5e270ecb Open the COB cache database once per driver 2026-07-03 11:33:01 +02:00
Rūdolfs Ošiņš 151db44c28 Move issue pagination into the issue service 2026-07-03 11:32:58 +02:00
Rūdolfs Ošiņš 1ba7369392 Generate copyable patch text via libgit2 2026-07-03 11:32:33 +02:00
Rūdolfs Ošiņš f568125aa7 Compute diff stats via git diff --numstat
PatchTeaser requests diff_stats per row, and each call re-opened the
whole repo through libgit2-surf, so a list of patches serialized into
tens of seconds on a large repo. Shell out to `git diff --numstat`,
which opens and diffs in one fast pass, falling back to the surf diff
when git is unavailable.
2026-07-03 11:31:50 +02:00
Rūdolfs Ošiņš 0bfe2d7220 Speed up opening files in large repositories
repo_blob and repo_readme resolved the blob through radicle-surf, which
also walks history to find the last commit that touched the path.
libgit2 ignores the commit-graph and diffs every commit, so opening a
file last changed long ago took a long time and varied by how far back
the file changed, not by its size.

Resolve the content with a direct tree lookup and the last commit via
`git rev-list -1`, falling back to the libgit2 walk when git is
unavailable.
2026-07-03 11:30:51 +02:00
Rūdolfs Ošiņš 2bfd580bbe Count commits via git rev-list with bitmaps
libgit2's revwalk ignores the pack bitmap and commit-graph, so counting
walks every commit. Shell out to `git rev-list --count --use-bitmap-index`,
which uses those indexes, and fall back to the revwalk if git is
missing, too old, or errors, so the result is unchanged, just faster on
maintained storage.
2026-07-03 11:30:07 +02:00
Rūdolfs Ošiņš 5b121b131a Add a diff actions menu with copy and save to disk
Replace the file-header and whole-diff copy buttons with a popover menu
offering "Copy to clipboard" and "Save to disk".
2026-07-03 11:28:57 +02:00
Rūdolfs Ošiņš 32b1d0e272 Restore list scroll position on back/forward
Navigating away from a list and back via history (the sidebar
back/forward buttons) returns to the same scroll position with the
previously loaded pages intact, instead of refetching only the first
page at the top.
2026-07-03 11:27:58 +02:00
Rūdolfs Ošiņš 8970fd6f68 Project issues through a timestamp-ordered SQLite query
list_issues previously read through heartwood's id-ordered issue cache,
forcing it to load and sort every issue in memory on each page. Mirror
the patch path instead: a domain/issue Service backed by an IssueStorage
adapter that queries the issues table directly.
2026-07-03 11:26:36 +02:00
Rūdolfs Ošiņš ac92fc9197 Omit issue body from list responses
The issues list shipped each issue's full root comment (body) over IPC,
but the teaser never renders it, only the detail view does. Make
Issue.body optional and add an Issue::summary constructor that skips it;
list_issues now builds summaries while issue_by_id keeps the full body.
2026-07-03 11:26:16 +02:00
Rūdolfs Ošiņš e1b940b21d Paginate the issues list view
The issues list loaded every issue at once and rendered them all.
Paginate it the same way as commits and patches.
2026-07-03 11:26:03 +02:00
Rūdolfs Ošiņš 239cc84bbf Show Linux launcher name as Radicle
On Linux, Tauri derives the deb/rpm package name from productName with
no way to set them independently. We override productName to
radicle-desktop so the package is named correctly, which would otherwise
also force the launcher entry to read radicle-desktop.

Add a custom .desktop template that hardcodes Name=Radicle while keeping
the package name unchanged.
2026-06-10 14:00:58 +02:00
Rūdolfs Ošiņš 3abba53437 Release v0.12.0 2026-06-09 13:55:44 +02:00
Rūdolfs Ošiņš 411e2a9126 Raise open-file limit at startup
Listing a repo's refs for the peer selector resolves every remote's
signed refs through libgit2, opening a file descriptor per packfile it
reads. Radicle storage is a git monorepo that can hold thousands of
packfiles, so under the low default limit a Finder-launched bundle
exhausts descriptors and objects in the unopened packs spuriously fail
with "missing commit", leaving the peer selector stuck loading.

Raise the limit to 4096 at startup, matching heartwood's binaries.
2026-06-05 10:59:59 +02:00
Rūdolfs Ošiņš 063b7f8d01 Run heavy read commands on the blocking pool 2026-06-04 18:04:33 +02:00
Rūdolfs Ošiņš d2441f1b3a Speed up commit count with a direct revwalk 2026-06-04 18:04:33 +02:00
Rūdolfs Ošiņš efea7f1ab2 Add peer selector to repo source browsing
Introduce a peer/branch/tag selector in the repository source and commits
views, letting you browse the canonical refs or any peer's namespace.
2026-06-04 17:19:31 +02:00
Rūdolfs Ošiņš 857d68a1e9 Fix Linux AppImage on non-Debian distros
Force-bundle libjpeg.so.8 (Fedora/RHEL lack the libjpeg8 ABI the bundled
gdk-pixbuf needs) and strip the mismatched bundled glib core so the whole
glib stack resolves from the host. Repackage with mksquashfs, reusing the
AppImage's own runtime, so the step fetches nothing from the network.
2026-06-02 14:32:13 +02:00
Rūdolfs Ošiņš 657ac9a6c1 Release v0.11.0 2026-05-22 12:33:32 +02:00
Rūdolfs Ošiņš c651ef7779 Exclude job COBs without runs from list_jobs 2026-05-21 15:56:53 +02:00
Rūdolfs Ošiņš 071338d4d0 Work around alias lookups not working
Aliases advertised via i2p/tor would not resolve when the features
aren't compiled in. This is only a workaround, it would be better to fix
upstream.
2026-05-20 11:01:28 +02:00
Rūdolfs Ošiņš 3057fd7644 Fix clippy lints for Rust 1.90 2026-05-19 17:40:37 +02:00
Rūdolfs Ošiņš 7ea1f580c8 Fix inbox show all and align group filters 2026-05-19 17:16:09 +02:00
Fintan Halpenny aa767003de crates: Use Edition 2024 2026-05-19 11:40:52 +01:00
Lorenz Leutgeb 9a474a4258 tauri/config/bundle: Add category and homepage
To allow desktop environments to list the app alongside other
development tools, set the appropriate category in the Tauri bundle
configuration.

See:
 - https://radicle.zulipchat.com/#narrow/channel/392584-Feedback/topic/Purely.20eastetic.20change.20for.20radicle-desktop/with/595736519
2026-05-18 09:39:49 +02:00
Rūdolfs Ošiņš 3e01bafb71 Bump tauri 2.5/2.10 -> 2.11
Bump the @tauri-apps/* npm packages and the matching Rust crates
together. The Tauri CLI rejects builds when the @tauri-apps/api npm
package and the tauri Rust crate are on different major/minor versions,
so they must move in lockstep.
2026-05-13 12:31:36 +02:00
Daniel Norman 3fc73a0b89 Fix contributor filter in list_repos & repo_count
- the previous list_repos / repo_count predicates only matched
  SignedRefsInfo::Some, so a forked repo whose sigrefs predate the
  current FeatureLevel (NeedsMigration) was hidden from the
  contributor view and undercounted
- add is_contributor helper so the two call sites can't drift again
  (they already had — list_repos was inverted from repo_count after the
0.22 sigrefs refactor)

See discussion for more info
https://radicle.zulipchat.com/#narrow/channel/369277-heartwood/topic/.60SignedRefsInfo.3A.3ANeedsMigration.60.20and.20local.20signed.20refs/with/594265582
2026-05-12 11:35:52 +02:00
Daniel Norman 28e1ddd372 Remove unused create_repo handler
This handler wasn't being called by any code and diverges from a typical
`rad init` flow, as it creates an empty repo with an initial empty
commit. Removing this as it reduces maintenance burden
2026-05-12 11:35:52 +02:00
Daniel Norman 073a5fb574 Bump deps to radicle 0.24 / radicle-job 0.6
- bump radicle 0.22 -> 0.24, radicle-job 0.5.2 -> 0.6, and
  radicle-surf 0.27.0 -> 0.27.1 to match heartwood
- raise radicle-tauri rust-version to 1.86 for radicle-job 0.6's MSRV
- migrate to the 0.24 COB store API: signer moves onto the cache via
  WriteAs, so issues_mut/patches_mut take &signer and the per-call
  signer arg disappears from every issue/patch action method
- pass ReadOnly to JobsStore::open for radicle-job 0.6's new Access
  type param
- replace the removed Profile::socket() with home().socket_from_env()
  and the removed WriteRepository::set_head() with the
  set_canonical_symbolic_refs + set_default_branch_to_canonical_head
  pair used by rad::init
- split the old ssh::agent::Error into AgentError + ConnectError so
  Agent::connect failures still bubble through ?
- swap SignedRefsInfo::is_ok() (gone in 0.23) for an explicit
  matches!(_, Some(_)) on the new None/Some/NeedsMigration enum
2026-05-12 11:26:53 +02:00
Brandon OxendineandRūdolfs Ošiņš ec49ecbd36 Start review from code-comment on revision diff
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-04-30 16:49:41 +02:00
Rūdolfs Ošiņš e0aafa7de2 Register dialog plugin in release builds 2026-04-30 12:10:52 +02:00
Yaroslav Halchenko af7d2e5181 chore: run codespell to fix typos automagically 2026-04-28 12:04:26 +02:00
Rūdolfs OšiņšandJulien Donck 65c453e37d Add commit history list and single commit views
Co-authored-by: Julien Donck <donckjulien@gmail.com>
2026-04-27 18:00:14 +02:00
Rūdolfs Ošiņš 0bd6f6b2b9 Share a single Highlighter across diff commands 2026-04-27 17:58:55 +02:00
Rūdolfs Ošiņš 17188c77c2 Reuse cached tree-sitter configurations in Highlighter 2026-04-27 17:58:30 +02:00
Lorenz Leutgebandjustarandomgeek 1ed54a46fa radicle-tauri/check_radicle_cli: Fix for Windows
Co-authored-by: justarandomgeek
2026-04-27 12:17:27 +02:00
Rūdolfs Ošiņš a9423e20f2 Regenerate types via ts-rs
After the update there were slight differences on the rendered types.
2026-04-27 11:40:35 +02:00
justarandomgeek d6d0fbfb7a chore: Update dependencies related to Tauri 2026-04-27 11:35:56 +02:00
Rūdolfs Ošiņš 99996f168e Rename radicle.xyz -> radicle.dev and app.radicle.xyz -> radicle.network 2026-04-27 11:26:17 +02:00
Lorenz Leutgeb 3864336d45 radicle-tauri/startup: Remove unnecessary clone 2026-04-26 10:41:51 +02:00
Rūdolfs Ošiņš 82807ecee7 Fix CSP connect-src to allow all local assets
The previous entry hardcoded a Vite-generated content-hash filename
(onig-CwjCXqnP.wasm), which breaks whenever the file's hash changes
between builds. Replacing it with 'self' covers all same-origin assets
regardless of filename.
2026-04-15 15:11:05 +02:00
Rūdolfs Ošiņš ee36f75d05 Release v0.10.0 2026-03-23 23:09:21 -06:00
Rūdolfs Ošiņš d0763b3ab0 Bring back browser devtools in dev mode
When we switched off debug-assertions in the backend it inadvertently
also disabled browser devtools in the app. We need those in dev mode to
debug things, this brings them back.
2026-03-23 17:17:59 -06:00
Rūdolfs Ošiņš 81388f2101 radicle-types: Fix clippy warning after heartwood upgrade 2026-03-23 09:04:22 -06:00
Lorenz Leutgeb d9300c5cb9 radicle-types: Skip over invalid sigrefs
`radicle::storage::RepositoryInfo` now contains the result of loading
signed references, not just an `Option`. Skip over errors.
2026-03-21 18:55:31 +01:00
Lorenz Leutgeb cd9e0be8a3 radicle-types: Initialize DB from profile
The database initialization in `radicle` was changed, so that it now
requires a configuration.
2026-03-21 18:55:31 +01:00