Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 23:25 UTC

vicinaehq / vicinae

A focused launcher for your desktop - native, fast, extensible

C++GPL-3.0★ 8.563 Sterne⑂ 249 Forksseit Juli 2025Auf GitHub ansehen ↗

vicinaehq/vicinae erreicht einen Gesundheitsindex von 69 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (96/100) ab, am schwächsten bei Security (36/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

69
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

69
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Vicinae HQOrganisation
88 Follower9 öffentliche Reposseit Juli 2025

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmscriptsverweist auf ein anderes Repo — nicht bewertet0.1.030.0011vor 4724 Tagenrequirepath
npmtemplateverweist auf ein anderes Repo — nicht bewertet0.17.55.35360vor 3510 Tagenatplcoffeecompileconsolidatedotdustdustjsdustjs-helpersdustjs-linkedinecoectejsengineenginesexpresshamlhaml-coffeehamljshandlebarshelpershogan.jsjadejazzjqtplliquorlo-dashlodashmarkdownmotemustachenunjucksprocessqejsractiverenderswigtemplatetemplatestemplayedtoffeeunderscoreviewwalruswhiskersyaml

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

96Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
36/36Commit-Rhythmus — 52/52 Wochen mit Commits
18/18Commit-Volumen — 1.818 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year1.818
human_commit_share1
days_since_last_push0
active_weeks_last_year52
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 5,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count100
latest_release_tagv0.23.2
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases5,2

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

79Gut · 18 % des Gesamtindex
Wie die Bewertung erfolgt
60/60Stars — 8.563 Stars
20/25Forks — 249 Forks
6/15Watcher — 13 Watcher
Verwendete Eingangsdaten
forks249
stars8.563
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (GPL-3.0)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

53Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
3.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 85 % der Commits
13.5/13.5Breite der Beitragenden — 100 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 20 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled100
top_contributor_share0,849
Wie die Bewertung erfolgt
32.6/46.8Issue-Lösungsquote — 70 % der Issues geschlossen
36.4/38.3PR-Annahme — 861/906 entschiedene PRs gemergt
3/15OpenSSF Scorecard: Code-Review — Found 7/30 approved changesets -- score normalized to 2
Verwendete Eingangsdaten
merged_prs861
open_issues212
closed_issues489
issue_closed_ratio0,698
closed_unmerged_prs45
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
14/25Reichweite des Inhabers — 88 Follower von vicinaehq
9.3/25Kontohistorie — 9 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers88
owner_typeOrganization
is_verified
owner_loginvicinaehq
public_repos9
account_age_days360

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

75Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 13 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 25 out of 26 merged PRs checked by a CI test -- score normalized to 9
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://vicinae.com
10/10Repository-Beschreibung
10/10Topics — 10 Topics
0/10Wiki
Verwendete Eingangsdaten
topicslinux, poweruser, productivity, app-launcher, nodejs, qt, react, raycast, cpp23, macos
has_wikinein
homepagehttps://vicinae.com
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

36Gefährdet · 16 % des Gesamtindex

Sicherheitslage

36Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.2/2.5CI-Tests — 25 out of 26 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 7/30 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 20 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
2.2/7.5Vulnerabilities — 7 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

82Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes6.267
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, Nix, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixja
has_testsja
lockfilespackage-lock.json
has_dockerfileja
typed_languageja
bootstrap_filesMakefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile
has_devcontainernein
has_linter_configja
typecheck_configsextra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — C++ (statisch typisiert)
54.9/55Handhabbare Dateigrößen — 1/1.061 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageC++
largest_source_bytes2.496.074
source_files_sampled1.061
oversized_source_files1

Eckdaten

8.563GitHub-Sterne
100Mitwirkende
1.818Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
1Bus-Faktor
212offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'scripts' points at a different repository (https://github.com/jaredhanson/node-scripts); excluded from ecosystem scoring
  • npm package 'template' points at a different repository (https://github.com/jonschlinkert/template); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 249 ⇿
0Sterne
249Forks
100Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

05010015020025024942025-082026-022026-07
Major 0Minor 16Patch 84
OpenSSF Scorecard 3.6 / 10
3.6Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-23 23:24 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests25 out of 26 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 7/30 approved changesets -- score normalized to 2
10Contributorsproject has 20 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
3Vulnerabilities7 existing vulnerabilities detected
Direkte Abhängigkeiten 3
RegistryPaketVersionsvorgabeManifest
npm@omnicast/apifile:../api/omnicast-api-1.0.0.tgzscripts/package.json
npm@omnicast/utilsfile:../api-utils/omnicast-utils-1.0.0.tgzscripts/package.json
npm@vicinae/apifile:../../src/typescript/apiextra/extension-boilerplate/package.json
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "linux",
        "poweruser",
        "productivity",
        "app-launcher",
        "nodejs",
        "qt",
        "react",
        "raycast",
        "cpp23",
        "macos"
      ],
      "is_fork": false,
      "size_kb": 146618,
      "has_wiki": false,
      "homepage": "https://vicinae.com",
      "languages": {
        "C": 6261,
        "C++": 5450468,
        "Nix": 24150,
        "QML": 445053,
        "GLSL": 3666,
        "HTML": 2071,
        "CMake": 88863,
        "Shell": 42135,
        "Swift": 10583,
        "Python": 3403,
        "Makefile": 10941,
        "Dockerfile": 11961,
        "Inno Setup": 3097,
        "JavaScript": 18536,
        "PowerShell": 10146,
        "TypeScript": 264486,
        "Objective-C++": 122110
      },
      "pushed_at": "2026-07-23T22:22:40Z",
      "created_at": "2025-07-28T03:49:03Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T22:22:43Z",
      "description": "A focused launcher for your desktop - native, fast, extensible",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "C++",
      "significant_languages": [
        "C++"
      ]
    },
    "owner": {
      "blog": "https://docs.vicinae.com",
      "name": "Vicinae HQ",
      "type": "Organization",
      "login": "vicinaehq",
      "company": null,
      "location": null,
      "followers": 88,
      "avatar_url": "https://avatars.githubusercontent.com/u/223195236?v=4",
      "created_at": "2025-07-28T03:08:02Z",
      "is_verified": null,
      "public_repos": 9,
      "account_age_days": 360
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.23.2",
          "kind": "patch",
          "published_at": "2026-07-18T15:34:23Z"
        },
        {
          "tag": "v0.23.1",
          "kind": "patch",
          "published_at": "2026-07-09T23:31:28Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-07-07T20:49:10Z"
        },
        {
          "tag": "v0.22.3",
          "kind": "patch",
          "published_at": "2026-07-02T16:31:16Z"
        },
        {
          "tag": "v0.22.2",
          "kind": "patch",
          "published_at": "2026-07-02T01:09:14Z"
        },
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2026-07-02T01:26:19Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-06-21T20:44:52Z"
        },
        {
          "tag": "v0.21.7",
          "kind": "patch",
          "published_at": "2026-06-15T00:29:53Z"
        },
        {
          "tag": "v0.21.6",
          "kind": "patch",
          "published_at": "2026-06-06T19:11:19Z"
        },
        {
          "tag": "v0.21.5",
          "kind": "patch",
          "published_at": "2026-06-01T09:50:24Z"
        },
        {
          "tag": "v0.21.4",
          "kind": "patch",
          "published_at": "2026-06-01T00:42:25Z"
        },
        {
          "tag": "v0.21.3",
          "kind": "patch",
          "published_at": "2026-05-30T23:35:59Z"
        },
        {
          "tag": "v0.21.2",
          "kind": "patch",
          "published_at": "2026-05-26T21:48:12Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2026-05-24T15:01:08Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-05-14T12:26:39Z"
        },
        {
          "tag": "v0.20.15",
          "kind": "patch",
          "published_at": "2026-05-02T21:19:22Z"
        },
        {
          "tag": "v0.20.14",
          "kind": "patch",
          "published_at": "2026-04-26T22:44:50Z"
        },
        {
          "tag": "v0.20.13",
          "kind": "patch",
          "published_at": "2026-04-16T12:07:54Z"
        },
        {
          "tag": "v0.20.12",
          "kind": "patch",
          "published_at": "2026-04-06T18:57:27Z"
        },
        {
          "tag": "v0.20.11",
          "kind": "patch",
          "published_at": "2026-04-05T20:03:21Z"
        },
        {
          "tag": "v0.20.10",
          "kind": "patch",
          "published_at": "2026-04-04T18:22:17Z"
        },
        {
          "tag": "v0.20.9",
          "kind": "patch",
          "published_at": "2026-03-27T13:12:35Z"
        },
        {
          "tag": "v0.20.8",
          "kind": "patch",
          "published_at": "2026-03-23T11:59:55Z"
        },
        {
          "tag": "v0.20.7",
          "kind": "patch",
          "published_at": "2026-03-16T19:51:05Z"
        },
        {
          "tag": "v0.20.6",
          "kind": "patch",
          "published_at": "2026-03-14T22:30:54Z"
        },
        {
          "tag": "v0.20.5",
          "kind": "patch",
          "published_at": "2026-03-09T23:43:50Z"
        },
        {
          "tag": "v0.20.4",
          "kind": "patch",
          "published_at": "2026-03-09T00:26:57Z"
        },
        {
          "tag": "v0.20.3",
          "kind": "patch",
          "published_at": "2026-03-05T14:53:57Z"
        },
        {
          "tag": "v0.20.2",
          "kind": "patch",
          "published_at": "2026-03-01T02:29:12Z"
        },
        {
          "tag": "v0.20.1",
          "kind": "patch",
          "published_at": "2026-02-27T23:13:39Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2026-02-26T17:41:56Z"
        },
        {
          "tag": "v0.19.9",
          "kind": "patch",
          "published_at": "2026-02-16T16:08:05Z"
        },
        {
          "tag": "v0.19.8",
          "kind": "patch",
          "published_at": "2026-02-14T02:14:58Z"
        },
        {
          "tag": "v0.19.7",
          "kind": "patch",
          "published_at": "2026-02-09T22:31:36Z"
        },
        {
          "tag": "v0.19.6",
          "kind": "patch",
          "published_at": "2026-02-06T14:56:56Z"
        },
        {
          "tag": "v0.19.4",
          "kind": "patch",
          "published_at": "2026-02-05T21:09:23Z"
        },
        {
          "tag": "v0.19.5",
          "kind": "patch",
          "published_at": "2026-02-06T01:32:33Z"
        },
        {
          "tag": "v0.19.3",
          "kind": "patch",
          "published_at": "2026-01-27T21:32:46Z"
        },
        {
          "tag": "v0.19.2",
          "kind": "patch",
          "published_at": "2026-01-25T14:16:45Z"
        },
        {
          "tag": "v0.19.1",
          "kind": "patch",
          "published_at": "2026-01-22T12:08:36Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-01-18T23:13:26Z"
        },
        {
          "tag": "v0.18.3",
          "kind": "patch",
          "published_at": "2026-01-08T17:39:15Z"
        },
        {
          "tag": "v0.18.2",
          "kind": "patch",
          "published_at": "2026-01-07T20:01:00Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2026-01-04T14:02:08Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-01-02T11:28:45Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2025-12-25T21:15:01Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2025-12-23T03:39:08Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2025-12-22T03:14:54Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2025-12-20T21:05:00Z"
        },
        {
          "tag": "v0.16.14",
          "kind": "patch",
          "published_at": "2025-12-09T09:33:36Z"
        },
        {
          "tag": "v0.16.13",
          "kind": "patch",
          "published_at": "2025-12-07T15:21:25Z"
        },
        {
          "tag": "v0.16.12",
          "kind": "patch",
          "published_at": "2025-12-05T13:05:57Z"
        },
        {
          "tag": "v0.16.11",
          "kind": "patch",
          "published_at": "2025-12-01T11:40:01Z"
        },
        {
          "tag": "v0.16.10",
          "kind": "patch",
          "published_at": "2025-11-23T22:06:54Z"
        },
        {
          "tag": "v0.16.9",
          "kind": "patch",
          "published_at": "2025-11-23T19:01:33Z"
        },
        {
          "tag": "v0.16.8",
          "kind": "patch",
          "published_at": "2025-11-18T22:46:46Z"
        },
        {
          "tag": "v0.16.7",
          "kind": "patch",
          "published_at": "2025-11-17T21:54:59Z"
        },
        {
          "tag": "v0.16.6",
          "kind": "patch",
          "published_at": "2025-11-14T21:34:09Z"
        },
        {
          "tag": "v0.16.5",
          "kind": "patch",
          "published_at": "2025-11-12T11:21:42Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2025-11-11T23:31:12Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2025-11-11T21:11:44Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2025-11-06T11:35:59Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2025-11-03T07:22:07Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2025-10-31T21:57:05Z"
        },
        {
          "tag": "v0.15.7",
          "kind": "patch",
          "published_at": "2025-10-28T19:01:31Z"
        },
        {
          "tag": "v0.15.6",
          "kind": "patch",
          "published_at": "2025-10-26T23:05:45Z"
        },
        {
          "tag": "v0.15.5",
          "kind": "patch",
          "published_at": "2025-10-25T15:39:48Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2025-10-25T05:12:02Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2025-10-23T01:15:59Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2025-10-21T23:06:35Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2025-10-19T20:41:21Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2025-10-19T02:06:34Z"
        },
        {
          "tag": "v0.14.5",
          "kind": "patch",
          "published_at": "2025-10-12T02:31:32Z"
        },
        {
          "tag": "v0.14.4",
          "kind": "patch",
          "published_at": "2025-10-11T00:59:00Z"
        },
        {
          "tag": "v0.14.3",
          "kind": "patch",
          "published_at": "2025-10-08T14:53:54Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2025-10-07T01:08:21Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2025-10-03T18:35:41Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2025-10-03T01:13:47Z"
        },
        {
          "tag": "v0.13.4",
          "kind": "patch",
          "published_at": "2025-09-30T00:35:42Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2025-09-28T15:01:59Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2025-09-27T20:53:54Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2025-09-27T11:18:22Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2025-09-26T14:38:16Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2025-09-20T17:06:33Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2025-09-19T18:25:05Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2025-09-19T14:27:28Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2025-09-17T09:05:07Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2025-09-15T12:40:35Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2025-09-13T11:15:14Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2025-09-11T09:10:14Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2025-09-10T14:23:00Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2025-09-09T11:30:51Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2025-09-06T17:32:54Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-09-06T15:59:16Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2025-09-04T09:08:14Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2025-09-03T04:53:02Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2025-09-02T05:49:09Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2025-08-30T23:39:16Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2025-08-29T15:44:49Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2025-08-29T02:51:21Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "de75102a08956b339c3b282dd43ec9eef3b743a0",
          "body": "Now that we use an event tap to implement global shortcuts it is pretty much mandatory for us to be granted the accessibility permission on macOS. It was already required for several things such as paste, snippets, etc... to work.\n\nRequiring it at startup is more honest and avoids creating unexpected broken states.",
          "is_bot": false,
          "headline": "feat(macos): make accessibility permission mandatory (#1709)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T22:22:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "632ca79e9f8fc9721384921f28ec069ff48aaf53",
          "body": "* feat(macos): migrate global shortcut backend to use a tap\n\nWe now use a keyboard event tap in order to implement the global shortcut backend on macOS.\n\nThe main reason is that this allows us to bind more complex shortcuts that can't be handled by the Carbon API. This also makes it easier to match \n[…]\n or fallback to QWERTY for non latin scripts.\n\nThis will also allow us to set up more complex bindings in the future, such as an \"hyper key\" or similar.\n\n* refactor: use named constants where possible",
          "is_bot": false,
          "headline": "feat(macos): migrate global shortcut backend to use a tap (#1708)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T20:45:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3abfbc2afe149d48c9bc3ba95f6689e965891c7",
          "body": "No shortcut preset was set to build the detail action panel, resulting\nin the primary action not being activatable using return.",
          "is_bot": false,
          "headline": "fix: use list shortcut preset for extension detail views (#1707)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T15:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdf7542d7522eec05117816635ece92efdc3d1e7",
          "body": "We were using the item title as a unique key to identity list items\nwhich is obviously incorrect as duplicates can easily occur. This makes\nsure we use the `itemId` already communicated on the wire, which is\nexplicitly designed for that purpose.",
          "is_bot": false,
          "headline": "fix: use wire list item ID for extension lists (#1706)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-22T17:17:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "630036e784de647bcf18aedab7007ec5c4f5b2d0",
          "body": "…#1625)",
          "is_bot": false,
          "headline": "feat(nix): build browser native host messaging into main derivation (…",
          "author_name": "Yechiel",
          "author_login": "yechielw",
          "committed_at": "2026-07-20T19:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a2c9ebee8f2d23e810c4d90122de701541dc086",
          "body": null,
          "is_bot": false,
          "headline": "refactor: move tryAliasFastTrack into root-view-host (#1703)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-20T00:42:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60ef1778978bbca253ddd1fd7f22be13271a86da",
          "body": null,
          "is_bot": false,
          "headline": "fix: fully remove default action wrapper usage",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-19T23:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d3cff5873211d40ff3a197346ac52c155293229",
          "body": "* feat: root search history\n\n* feat: skip entry if equal to search text\n\n* feat: honor special keybind up key\n\n* refactor: remove default action wrapper",
          "is_bot": false,
          "headline": "feat: root search history (#1702)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-19T23:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7ee1d6401bb9e8547c21bdfac85f3f572caf27f",
          "body": "* fix(hyprpaper): remove deprecated commands and migrate to current\nsyntax.\n\n* fix: format",
          "is_bot": false,
          "headline": "fix(hyprpaper): remove deprecated and migrate to current syntax (#1700)",
          "author_name": "vMohammad",
          "author_login": "vMohammad24",
          "committed_at": "2026-07-19T12:36:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74b4b62177a7e001a9d557bc76841b59341198a0",
          "body": null,
          "is_bot": false,
          "headline": "feat: windows wallpaper backend (#1699)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T23:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eee05cd9ed6f79d89721f23dadc2305313c3ac58",
          "body": "Suppress keyup events as we hide the vicinae window or trigger a global\nshortcut.\n\nThis trick is required so that we don't end up leaking keyup events to\nwhatever is below the vicinae window.\n\nTwo typical examples:\n- <toggle_shortcut> like Ctrl+Space -> on close, the space keyup event\n  is sent to t\n[…]\nnerally leaked and can result in undesirable behavior such as\n  undoing fullscreen of an application for instance.\n\nPopular Windows launchers like Flow Launcher and PowerToys Run also have this issue.",
          "is_bot": false,
          "headline": "feat(windows): suppress leaked keyup events (#1698)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T23:31:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c55e85716e3e7a68f4b0f6ef6299d02a49623c7c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.2",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T15:23:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27062766054e847e1749785e45edfac50455bcb7",
          "body": null,
          "is_bot": false,
          "headline": "fix: do not use first dropdown value as default for extensions",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T15:22:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35d46da8887e674e94331d3206c9893d56870dc3",
          "body": null,
          "is_bot": false,
          "headline": "feat(script): allow install from local appimage",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T14:16:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "969deee08d8d959e31ca2e0e83e395829c0d5ffb",
          "body": "Extension commands can now specify a `keywords` array in their manifest\nin order for it to get indexed against these as well. Note that\nkeywords carry less weight than the command name.",
          "is_bot": false,
          "headline": "feat: implement extension manifest command keywords (#1695)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T13:35:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77b5356d43453289345e593e30e8c4ad597f39f5",
          "body": null,
          "is_bot": false,
          "headline": "fix(appimage): input server not working (#1693)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T13:23:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78eb33e27a160a6fe22df25eed45081cd10a0ef8",
          "body": null,
          "is_bot": false,
          "headline": "feat: show current time as default nav title in root (#1692)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T12:18:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6bb83ed42d67f81cc3b289246510a52485d40eb",
          "body": null,
          "is_bot": false,
          "headline": "feat: make navigation wrapping opt-in (#1688)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T00:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cac296c80197135632cb3134d542dec54954a27",
          "body": "* feat: add pagination hook\n\n* feat: implement extension pagination\n\n* feat: add paginated list examples\n\n* fix: erroneous load more calls\n\n* fix: pagination loadMore type\n\n* fix: format",
          "is_bot": false,
          "headline": "feat(api): add pagination for List and Grid components (#1687)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-17T23:48:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb5b8664fe6a46ef25503f90ac5ba713e99737a5",
          "body": "* feat: adds new cmd verb to cli and attaches cwd to extension launch from it\n\n* feat: allow listing/launching all kinds of entrypoints\n\n* feat: add LaunchType.CommandLine for cli usage, and use cwd\n\n* feat: pass cwd as launch prop instead of process.cwd\n\n* feat: pass fallback text in launch props\n\n\n[…]\n* feat: cli alias\n\n* chore: better error message when launching command\n\n* fix: argument passing\n\n* feat: pass command name in json output\n\n---------\n\nCo-authored-by: Aurelien Brabant <gh@aurelle.dev>",
          "is_bot": false,
          "headline": "feat: vicinae cmd CLI commands (#1661)",
          "author_name": "Fredrik Mikal Wold",
          "author_login": "FredrikMWold",
          "committed_at": "2026-07-17T18:22:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7af67e64714e96171300478114b72e75b8c1e755",
          "body": null,
          "is_bot": false,
          "headline": "feat(nix): add launchd (macOS) support to home-manager module (#1682)",
          "author_name": "Daniel Lazaro",
          "author_login": "dnlzro",
          "committed_at": "2026-07-17T13:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51a9987f288dd083fdaa8774443d058d3c557035",
          "body": null,
          "is_bot": false,
          "headline": "fix: apply new scroll handler to all scrollables (#1685)",
          "author_name": "Fredrik Mikal Wold",
          "author_login": "FredrikMWold",
          "committed_at": "2026-07-17T12:58:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e9c29ea94d22b0b41e4c64e4551b8a629782de3",
          "body": null,
          "is_bot": false,
          "headline": "fix(macos): prevent clipboard copy HUD stealing focus (#1676)",
          "author_name": "Tinkerbells",
          "author_login": "Tinkerbells",
          "committed_at": "2026-07-17T00:57:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1e4cff7a2fd3f0dc0d9cd4b58f2255f159a79fa",
          "body": null,
          "is_bot": false,
          "headline": "refactor: pass command controller by reference (#1674)",
          "author_name": "ayn2op",
          "author_login": "ayn2op",
          "committed_at": "2026-07-17T00:57:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d49eb96243bfc841aae5640bacb56e80095c71d5",
          "body": "Run VACUUM on the file indexer db when there is enough data to reclaim\nfrom it. Vacuuming does a full rewrite of the DB so we don't want to do\nit on each startup.",
          "is_bot": false,
          "headline": "feat(indexer): VACUUM db when enough to reclaim (#1683)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-17T00:35:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67f3f5ea71a165d2a85c720ca8d7333fa9111f9c",
          "body": "Currently scan records accumulate indefinitely in the file indexer\ndatabase which is not very useful. We only care about the last scan for\na given entrypoint.",
          "is_bot": false,
          "headline": "feat(indexer): prune old scan records (#1681)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T23:06:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "818111a9a4ea895e2642a9da59c7f95e72388916",
          "body": "* feat: use fixed size thread pool to enqueue scans\n\nInstead of creating one thread per enqueued scan we now dispatch scans\nto a fixed size thread pool. This way concurrency remains fully bounded\nand we don't end up spinning up potentially thousand of threads in some\nscenarios.\n\n* fix: format",
          "is_bot": false,
          "headline": "feat(indexer): use fixed size thread pool to enqueue scans (#1680)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T21:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ff786a409d440015a94456d9583b9e60d979aa3",
          "body": "* feat: windows settings and control panel applets\n\nAdd two new root search providers: one to list all modern Windows\nsettings, and the other to list all the control panel applets. They are\ndistinct providers so that it is easy for the user to disable one or the\nother completely (there are a lot of control panel applets, and some\nusers may not want them in the root search).\n\n* feat: use generic action name to open control panel applets\n\n* feat: use std::array where available",
          "is_bot": false,
          "headline": "feat: windows settings and control panel applets (#1679)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T18:23:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8bd9b02504c8f623b5bdf8ffe6df9e8e790c792",
          "body": null,
          "is_bot": false,
          "headline": "feat: handle url scheme on windows (#1677)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T15:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a69aebb242724d5ac5261ec2c0cd66502e3b7999",
          "body": "* feat: make browser link fully cross platform\n\nThe browser link binary, invoked by the native messaging host, was using\npoll to read stdin/incoming vicinae messages. This made it not Windows\ncompatible so this PR refactors it to use a QEventLoop and a\nQLocalSocket in order to communicate with the v\n[…]\nlevant.\n\nThat same code should work on all platforms at once.\n\nBefore merging this needs testing on:\n- [ ] macOS\n- [ ] Linux\n\nJust to make sure those didn't break following this change.\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: make browser link fully cross platform (#1675)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T13:38:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0274ef4087032795d4ba06b05c0fdfc7778069a4",
          "body": "* feat: windows installer\n\n* chore: change installer name and location",
          "is_bot": false,
          "headline": "feat: windows installer (#1673)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T01:30:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "377450e3edadda1a7c9dea0d85bc493289903de6",
          "body": "* feat: windows app runtime\n\nImplements the `AbstractAppRuntime` interface on Windows in order to\nsupport the active app indicator, frontmost app API, and quit/force quit\napps.\n\nThis is pretty much a mirror of the XDG (linux) implementation, we use\nthe window manager to map apps to their window and classify an app with\nan open window as running.\n\n* refactor: use optional instead of 0 sentinel for non pid",
          "is_bot": false,
          "headline": "feat: windows app runtime (#1671)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T19:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3840525de0585ff12199c42b54490eed47e37a38",
          "body": "* feat: windows window management\n\n* fix: hide windows that are not bound to any virtual desktop\n\n* feat(api): make window.monitorId optional\n\n* refactor: better getter for workspace name",
          "is_bot": false,
          "headline": "feat: windows window management (#1670)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T18:23:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04a44c226c36bf5359ba04193b9130872a675fbd",
          "body": null,
          "is_bot": false,
          "headline": "fix(api): set jsx mode to automatic",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T16:48:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "726dfb443dcf04899999e83de9b9e15facdb20ea",
          "body": "* fix(api): use named pipe to connect to vicinae server\n\n* feat: typecheck using ts compiler api directly\n\nThis way we no longer need to invoke npx and no longer assume the\nextension has TypeScript installed.\n\n* feat: use proper path to output extensions at\n\n* fix: nix hash\n\n* feat: enforce required typescript options",
          "is_bot": false,
          "headline": "feat: extension tooling on windows (#1669)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T13:22:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc039e5264b4a76e7ed0a3099fc951a3d94c7825",
          "body": null,
          "is_bot": false,
          "headline": "feat: windows paste service (#1668)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T23:30:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "736a6ca828120794bf03b35f15907f1815a24d11",
          "body": "* feat: windows file search using system WSearch\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: windows file search using built-in index (#1667)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T22:58:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84bfbbe1d30259ee8fbbb1de2a2d94c13433aae3",
          "body": null,
          "is_bot": false,
          "headline": "fix: format",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T20:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "129640b0ac17e8dfe70b761c398011d184ad2983",
          "body": "* feat: windows clipboard history\n\n* refactor: extract to constants and prioritize image to http uris\n\n* fix: format\n\n* refactor: remove already defined headers",
          "is_bot": false,
          "headline": "feat: windows clipboard history (#1665)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T19:59:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "133506c26c800cf62cbdc18296c4da96a2e70d0c",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove Windows specific popup code",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T16:15:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d1d390274df953af9197becef80a1d338ce47b7",
          "body": "* feat: use native windows chrome for window and hud\n\n* fix: format\n\n* chore: add Windows formatting instructions\n\n* fix: shortcut activation and keyboard focus\n\n* refactor: get rid of resetAfterHide trick\n\n* refactor: remove adoptWindows hack\n\n* feat: always use in scene popups\n\n* fix: get rid of acrylic popup opacity",
          "is_bot": false,
          "headline": "feat: use native windows chrome for window and hud (#1662)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T16:14:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94f9570f096a407d27e18073d1b01dae13c4d064",
          "body": "Raycast types `filtering` as `boolean | { keepSectionOrder: boolean }`, but the\nrender-payload parser only accepted a boolean. A payload containing\n`\"filtering\":{\"keepSectionOrder\":true}` aborted with `expected_true_or_false`,\nthe view never rendered, and the extension worker exited. This broke stoc\n[…]\nFilteringOptionsWire>`,\nmirroring the existing ActionPanel submenu handling, and collapse it to the\nenabled bool — the object form enables filtering (keepSectionOrder is not\nhonored yet).\n\nFixes #1581",
          "is_bot": false,
          "headline": "fix: accept object form of List/Grid `filtering` prop (#1651)",
          "author_name": "Noam Stolero",
          "author_login": "noamsto",
          "committed_at": "2026-07-13T19:51:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ece22bda174350adc8a4da0b8aa283ce2284439f",
          "body": null,
          "is_bot": false,
          "headline": "feat: force utf8 active code page (#1660)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T11:45:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a3f964965d44565189f22d388b181a9e8be5cf0",
          "body": null,
          "is_bot": false,
          "headline": "nix: fixed misleading option description (#1659)",
          "author_name": "janquednau",
          "author_login": "janquednau",
          "committed_at": "2026-07-13T10:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d02d0325c45b006d7dc13c5fd32319362efe0077",
          "body": "* feat: windows global shortcut backend\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: windows global shortcut backend (#1655)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T10:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4933bfd829dcfba4a9b0a1f83a08ce8d29f16691",
          "body": "* feat: windows app provider poc\n\n* feat: watch packaged apps\n\n* fix: compute proper app id for accurate dedup\n\n* add windows-relwithdebinfo preset\n\nbecause full debug builds run way too slow with MSVC and qt debug libs.\n\n* fix: resolve PIDL in .lnk files\n\n* fix: find all associations for directory\n\n[…]\nract common logic in helpers\n\n* fix: format\n\n* refactor: use std::variant to represent app kinds\n\n* fix: format\n\n* refactor: use ScopedCom for icon as well\n\n* feat: add run as admin action and cleanup",
          "is_bot": false,
          "headline": "feat: windows app provider (#1654)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T00:36:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8802754abf1c1db7db3a70004df0ea8783bed582",
          "body": "address review feedback",
          "is_bot": false,
          "headline": "nix: add module options for the NixOS module (#1649)",
          "author_name": "cswimr",
          "author_login": "cswimr",
          "committed_at": "2026-07-12T17:08:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7e34695371737b371d6488c7f680b436d82093e",
          "body": "* build: successful vicinae-server compile on windows\n\n* refactor: snake_case for config structs\n\nThis is unfortunately needed in order to work around an MSVC bug where\nthe transformer silently corrupts some keys.\n\nWe just use snake case directly in the code instead of converting them\nto camelCase a\n[…]\ne sccache\n\n* fix: format\n\n* feat: add clean script\n\n* fix: do not log crash on extension manager quit\n\n* build: add cmake presets for macOS and linux\n\n* build: only allow MSVC as a compiler on windows",
          "is_bot": false,
          "headline": "feat: build with MSVC (#1648)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T18:20:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57a2e614edb0e1494b9ec73aa24b0656efa3d33c",
          "body": null,
          "is_bot": false,
          "headline": "refactor(nav): guard native meaning behind platform checks",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T15:04:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3e201ce37824db85fe9c44728750a93424b5c5a",
          "body": null,
          "is_bot": false,
          "headline": "fix: multi file copy (#1646)",
          "author_name": "Eric Kuck",
          "author_login": "EricKuck",
          "committed_at": "2026-07-11T15:02:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bafd52f3fee2d464b9293a72684a7dfd6ef729d4",
          "body": null,
          "is_bot": false,
          "headline": "feat: platform specific navigation keys (#1647)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T14:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "001b8283205d6475c10d6cd85389a1cce113d92a",
          "body": "* nix: implement SoulverCore nix module support for soulver-cpp\n\n* ci(cachix): build and cache soulver backend\n\n* nix: format\n\n* nix: refactor soulver to use with-soulver pkg\n\n* ci(nix): only build .#with-soulver",
          "is_bot": false,
          "headline": "nix: SoulverCore support (#1641)",
          "author_name": "vMohammad",
          "author_login": "vMohammad24",
          "committed_at": "2026-07-10T14:14:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81d9a9b50b19d1b90ed682d5fd24a192e56c1b4b",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.1",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T23:21:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdf50b10db56525eff175b369ef8339b38bfb8ab",
          "body": null,
          "is_bot": false,
          "headline": "fix: libqalc tests",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T23:07:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b408f4eeec58cbed25133c01b398292c25fdcbb7",
          "body": "* feat: add digit grouping to calculator extension\n\n* fix: make digit grouping the default; remove related preference\n\n* fix: tests\n\n---------\n\nCo-authored-by: Aurelien Brabant <gh@aurelle.dev>",
          "is_bot": false,
          "headline": "feat: add digit grouping to libqalc backend (#1640)",
          "author_name": "Yan Li",
          "author_login": "Yusyuriv",
          "committed_at": "2026-07-09T22:10:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a22ab04cb2587ee7632a1c2d2ba715b6ad003c4",
          "body": "* fix(api): expose Grid.throttle\n\nFor some reason the `Grid` root component didn't expose a `throttle` prop like `List` does, although fully implemented. This fixes that.\n\n* fix: pass prop properly",
          "is_bot": false,
          "headline": "fix(api): expose Grid.throttle (#1644)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T22:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bfcc50926d801f290539422cb13f60d32e63c5e",
          "body": "* feat: add active key to WindowManagement.Screen\n\nAdd `active` key to `WindowManagement.Screen` so that the callers can\nknow which screen the vicinae window is currently shown on. Always set\nto false if the vicinae window is not shown (e.g the extension runs in\nthe background at a given interval).\n\n* fix: use reinterpret_cast to cast winId",
          "is_bot": false,
          "headline": "feat: add active key to WindowManagement.Screen (#1643)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T21:21:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "034df6645a5d33ebc5ba6542ed05189496fb3c1f",
          "body": "Use the native macOS API to get screen information since QT does not\nallow us to know the physical resolution of the current mode.",
          "is_bot": false,
          "headline": "feat: use native macOS API to enumerate screens (#1642)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T20:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f55008bb888de0dab565ef21c75f6091b69d818",
          "body": "* feat(api): report screen physical resolution\n\n* feat: WindowManagement.Screen.physicalResolution\n\nAdd a `physicalResolution` key to `WindowManagement.Screen` so that\nextensions can know the physical resolution of the screen, as the\n`bounds` key reports logical coordinates (after scaling is applied\n[…]\ncularly useful for e.g wallpaper extensions where we might\nwant to suggest wallpapers that match the exact resolution\n\n* refactor: remove PixelSize in favor of QSize\n\n* fix: background effect listener",
          "is_bot": false,
          "headline": "feat(api): WindowManagement.Screen.physicalResolution (#1638)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T19:08:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efb88407898eb791436c084e570d128ecc193643",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): image scale in extension grid (#1631)",
          "author_name": "Eric Kuck",
          "author_login": "EricKuck",
          "committed_at": "2026-07-09T17:18:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09ba8d35ff0403e1c3df50685fdccbcc26e2ac49",
          "body": "text/uri-list should never be stored in the clipboard as a plain text string.\n\nPresumably this works on linux because QMimeDatabase does not categorize text/uri-list as inheriting from text/plain.",
          "is_bot": false,
          "headline": "fix: copy/paste file from macOS clipboard history (#1639)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T17:07:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f439e139c53a96fe15f3a7286e7fe054e25ae1c",
          "body": "In some scenarios, the QT clipboard is filled with the application/x-qt-image type which means we can request the raw image data and then convert it to another format. When that happens, we now convert it to PNG automatically.\n\nCurrently the image conversion happens on the main thread, as clipboard access is not thread safe, for big images it could theoretically become a problem, but it's fine for now.\n\nFixes #1634",
          "is_bot": false,
          "headline": "fix: image not saved in macOS clipboard history (#1637)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T13:37:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c219f83872f8bd8432fd2ea5972df64580a5eaef",
          "body": null,
          "is_bot": false,
          "headline": "fix: qmlls support in Nix devshells (#1636)",
          "author_name": "Bodya",
          "author_login": "bpavuk",
          "committed_at": "2026-07-09T12:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8ba9ab22132c0f358b99d057ffa5307ed8845c4",
          "body": null,
          "is_bot": false,
          "headline": "ci: publish release once all assets are uploaded",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-08T11:06:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b96d953b74c1e1a250d3282f3857c9935aeca3f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.0",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dfc2bc3c9a82c92f49be20e3be21229d246d6fe",
          "body": "…ivity monitor",
          "is_bot": false,
          "headline": "chore: hardlink node to vicinae-ext-runtime to make it clearer in act…",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:24:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29dd3ffb3f2b757c5f2b0fab3e829d5814f87750",
          "body": null,
          "is_bot": false,
          "headline": "feat: support for sendDesktopNotification on macOS (#1627)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:12:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e642dd677feb1fa290a08b105a3be4c3c9f96021",
          "body": null,
          "is_bot": false,
          "headline": "build: use npm ci to install deps",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:45:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb7ebf59c41d0a66f2d3bfbf8554382b6b57661c",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove subtitle from create extension boilerplate",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:36:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9eb06d34f58e2216189769feac49771358a4c9dc",
          "body": "Fix excessively small gifs especially on high DPI screens.",
          "is_bot": false,
          "headline": "fix: compute effective dpr from frame res for gifs",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd3f08282665c03a19ba7c01960d16de7f9b2cec",
          "body": null,
          "is_bot": false,
          "headline": "fix: grid cell inset calculations",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "750053a732c8c4ff1dac7ed50d17b8a109c23754",
          "body": "We used to cache extensions and never evicted them until next restart.",
          "is_bot": false,
          "headline": "fix: remove vicinae store caching",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3502aef7c47355714519b2458b5ebdb180bd3d08",
          "body": "* fix(extensions): do not miss detail updates\n\nWe didn't update the list detail if the update came from a subsequent\nrender. Also we added a slight debounce so that quick detail changes do\nnot flicker.\n\n* fix: set detail to current after debounce, not null",
          "is_bot": false,
          "headline": "fix(extensions): do not miss detail updates (#1626)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T16:57:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea311cb8a0b04982ff5f6d86531d19c4483073d",
          "body": "actually required for proper file search",
          "is_bot": false,
          "headline": "fix: put back FDA permission in onboarding",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T15:28:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f369ef4af10f4eaa40c9c9ed26f7af153d7c5a2",
          "body": "Per the xdg-terminal-exec spec, when an X-TerminalArg* flag is defined\nas ending with '=', its value must be appended to the same argument\nwithout whitespace. The flag and value were always emitted as two\nseparate argv entries, which breaks terminals declaring the '=' form.\n\nWith ghostty (X-Terminal\n[…]\ns=' and the\napp id as separate arguments. Ghostty does not accept space-separated\nflag values and rejected the bare app id argument with a\n\"Configuration Errors\" dialog: cli:3:<app-id>: invalid field.",
          "is_bot": false,
          "headline": "fix(xdg): append terminal arg value to flags ending with '=' (#1623)",
          "author_name": "stvsu",
          "author_login": "stvsu",
          "committed_at": "2026-07-07T12:56:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4096191dbb8e613a668492eb255994c49445db2e",
          "body": null,
          "is_bot": false,
          "headline": "ci: macOS dmg workflow",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T12:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "356c907e4589e407778569b98cca921746e12ff3",
          "body": null,
          "is_bot": false,
          "headline": "fix: bundle libqtquickshapesdesignhelpersplugin.dylib",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T11:14:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb4edb45ad7aa7eeb540c9a14cd0868ea15895ff",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove fda permission requirement from onboarding",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T10:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3b30a3f8d96dcf80ee23e6115efdc5b33c6aebc",
          "body": null,
          "is_bot": false,
          "headline": "style: reduce contrast of selection colors for vicinae inkwell",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T01:15:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10112686d1a458a224bc005374973b0dfabb6352",
          "body": "Untie navigation primitive from the launcher global and move it into a proper Keyboard global helper. This way it also works outside of the launcher window.",
          "is_bot": false,
          "headline": "refactor: move keyboard navigation to global helper (#1622)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T01:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eca1ee9c1bdd4c1dc8c4177b8d0c7e17967b036c",
          "body": "remap `cmd` key to `control` on linux and add specific names for the\nmeta keys: `meta` | `windows`.",
          "is_bot": false,
          "headline": "feat: cross platform extension keybinds (#1621)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T00:52:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "223aba710eba0ca6b2dd2d3d668eaf5f6cc1cf31",
          "body": "Fixes a URL encoding bug and make the bug report info relevant to macOS as well.",
          "is_bot": false,
          "headline": "feat: macOS report bug command (#1620)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T23:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "855ce3717f126887ed2730545a5358dc53695e12",
          "body": null,
          "is_bot": false,
          "headline": "fix: manage fallback command state and ordering (#1619)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T22:42:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fd3299ff0929713cf45d45ec0d1e2c7072d9c4b",
          "body": "* feat: bundle SoulverCore as default calculator backend on macOS\n\n* fix: do not preprocess soulver core input\n\n* refactor: move bundle soulver core in separate function\n\n* refactor: move SwiftRuntime.cmake to top level cmake dir\n\n* chore: add utm parameters for soulver link",
          "is_bot": false,
          "headline": "feat: bundle SoulverCore as default calculator backend on macOS (#1617)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T21:40:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e50108f70bf9d74e758294419e5e0400f9a0a72",
          "body": null,
          "is_bot": false,
          "headline": "fix: do not use QDBusInterface for desktop notifications (#1618)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T21:07:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9ad0ede8d09fd796b30be235837acb0a11e8a8b",
          "body": "* feat: macOS onboarding process\n\n* feat: make sure tap is restarted after accessibility is granted\n\n* fix: mark onboarding as finished only when last step is completed\n\n* refactor: use glaze to store onboarding json state\n\n* fix: proper background blend rect for buttons",
          "is_bot": false,
          "headline": "feat: macOS onboarding process (#1614)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T17:30:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fc71570f49915cb654b2f42fac6654d176224a6",
          "body": "* feat: implement environment.canAccess API\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: implement environment.canAccess API (#1613)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T13:27:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dfc50a326a54a67d0daf76ce29fcd7ebc2652b5",
          "body": null,
          "is_bot": false,
          "headline": "feat(api): expose BrowserExtension.getTabs to extensions (#1612)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T23:09:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23d6131b8dbfed5b6420880db3608ca0072fe746",
          "body": null,
          "is_bot": false,
          "headline": "feat(api): throw when raycast compat shim is unavailable (#1611)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T20:55:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f313acfe6607ab6d2f2466aa2658e56a7a8f5c4f",
          "body": "* feat: better contrast for selection colors\n\n* fix: macOS theme awareness and light theme adjustments\n\n* fix: do not force opacity on alert dialog",
          "is_bot": false,
          "headline": "feat(theming): better contrast for selection colors (#1610)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T20:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90d180e76a2bfe2cd585c50e9b6eda0032ad6752",
          "body": null,
          "is_bot": false,
          "headline": "ci: fix version labeling",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T17:20:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fd642a7c93e744e7aa5fa0d2667eaddf241aeba",
          "body": "Signed-off-by: Marvin Beckers <mail@embik.me>",
          "is_bot": false,
          "headline": "build: split qrc based on build conditions (extensions vs core) (#1609)",
          "author_name": "Marvin Beckers",
          "author_login": "embik",
          "committed_at": "2026-07-05T16:24:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b687b34c93a8952cb544f60038ad0ea3922804",
          "body": "* fix: make vicinae extension CLI cross platform\n\nSo far we have been calling the vicinae binary and passing it a deeplink in order to communicate with the daemon, which doesn't fit the macOS model very well. So in this PR we just implement a tiny IPC client in TypeScript to communicate with the daemon as any regular client does.\n\n* refactor: generate typescript ipc code using figura",
          "is_bot": false,
          "headline": "fix: make vicinae extension CLI cross platform (#1606)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T16:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9878d64f2d964752a200647b7956afbbe51b288c",
          "body": "* feat: macOS auto start\n\n* refactor: reword cmake auto start option name\n\n* fix: typo",
          "is_bot": false,
          "headline": "feat: macOS auto start (#1604)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T22:54:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0b907e610333501d1512c53a576d37a8698f72a",
          "body": null,
          "is_bot": false,
          "headline": "feat: macOS url scheme support (#1603)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T21:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6886cf113b6c7f9d76a2718df48efa35fcfae2d6",
          "body": "shared-mime-info 2.5.1 upgrade broke the loading of .sh script commands.",
          "is_bot": false,
          "headline": "fix: script command loading after shared-mime-info upgrade (#1602)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T21:41:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2d66ed75277871c48908bb1d606dd92cdf547e4",
          "body": "* feat: fetch pinned node version for self packaged builds\n\n* feat: shell out to tar instead of linking to zlib + nits\n\n* fix: do not fallback on homebrew node on macOS",
          "is_bot": false,
          "headline": "feat: fetch pinned node version for self packaged builds (#1598)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T20:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25831a499e9523b71f085d2be0470a574321b8f8",
          "body": "* feat: install browser extension native host manifests at runtime\n\n* fix: cross platform socket path\n\n* fix: simplify readme\n\n* nix: do not auto install manifests",
          "is_bot": false,
          "headline": "feat: install browser extension native host manifests at runtime (#1599)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T20:17:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4568ef7ee5afa4db103e5bd7328305ba697d1d63",
          "body": null,
          "is_bot": false,
          "headline": "build(macos): purge unused qt modules",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T15:01:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e12be8423637739d8b0d3766d0f771ef45e44b2d",
          "body": "* feat: dmg and notarization setup\n\n* chore: use correct icon size for vicinae\n\n* build: add shim to fix qtkeychain include path",
          "is_bot": false,
          "headline": "feat: dmg and notarization setup (#1597)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T14:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1818,
      "latest_release_at": "2026-07-18T15:34:23Z",
      "latest_release_tag": "v0.23.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 5.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "scripts",
          "exists": true,
          "license": null,
          "keywords": [
            "require",
            "path"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/scripts",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/jaredhanson/node-scripts",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 30001,
          "first_published_at": "2013-08-16T22:08:11.637000Z",
          "latest_published_at": "2013-08-16T22:08:13.087000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4724
        },
        {
          "name": "template",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "atpl",
            "coffee",
            "compile",
            "consolidate",
            "dot",
            "dust",
            "dustjs",
            "dustjs-helpers",
            "dustjs-linkedin",
            "eco",
            "ect",
            "ejs",
            "engine",
            "engines",
            "express",
            "haml",
            "haml-coffee",
            "hamljs",
            "handlebars",
            "helpers",
            "hogan.js",
            "jade",
            "jazz",
            "jqtpl",
            "liquor",
            "lo-dash",
            "lodash",
            "markdown",
            "mote",
            "mustache",
            "nunjucks",
            "process",
            "qejs",
            "ractive",
            "render",
            "swig",
            "template",
            "templates",
            "templayed",
            "toffee",
            "underscore",
            "view",
            "walrus",
            "whiskers",
            "yaml"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/template",
          "is_deprecated": false,
          "latest_version": "0.17.5",
          "repository_url": "https://github.com/jonschlinkert/template",
          "versions_count": 60,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 2,
          "monthly_downloads": 5353,
          "first_published_at": "2014-01-27T12:39:48.073000Z",
          "latest_published_at": "2016-12-12T17:20:45.339000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3510
        }
      ]
    },
    "popularity": {
      "forks": 249,
      "stars": 8563,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2025-08-15",
            "count": 2
          },
          {
            "date": "2025-08-16",
            "count": 4
          },
          {
            "date": "2025-08-17",
            "count": 2
          },
          {
            "date": "2025-08-19",
            "count": 1
          },
          {
            "date": "2025-08-20",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 2
          },
          {
            "date": "2025-08-23",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 1
          },
          {
            "date": "2025-08-25",
            "count": 1
          },
          {
            "date": "2025-08-26",
            "count": 3
          },
          {
            "date": "2025-08-27",
            "count": 1
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 2
          },
          {
            "date": "2025-08-31",
            "count": 1
          },
          {
            "date": "2025-09-02",
            "count": 1
          },
          {
            "date": "2025-09-05",
            "count": 1
          },
          {
            "date": "2025-09-07",
            "count": 1
          },
          {
            "date": "2025-09-10",
            "count": 2
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-14",
            "count": 4
          },
          {
            "date": "2025-09-15",
            "count": 3
          },
          {
            "date": "2025-09-16",
            "count": 2
          },
          {
            "date": "2025-09-17",
            "count": 1
          },
          {
            "date": "2025-09-18",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 2
          },
          {
            "date": "2025-09-21",
            "count": 1
          },
          {
            "date": "2025-09-22",
            "count": 1
          },
          {
            "date": "2025-09-23",
            "count": 1
          },
          {
            "date": "2025-09-24",
            "count": 1
          },
          {
            "date": "2025-09-26",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 2
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-04",
            "count": 2
          },
          {
            "date": "2025-10-06",
            "count": 2
          },
          {
            "date": "2025-10-07",
            "count": 1
          },
          {
            "date": "2025-10-08",
            "count": 1
          },
          {
            "date": "2025-10-11",
            "count": 2
          },
          {
            "date": "2025-10-14",
            "count": 1
          },
          {
            "date": "2025-10-15",
            "count": 1
          },
          {
            "date": "2025-10-16",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-25",
            "count": 2
          },
          {
            "date": "2025-10-26",
            "count": 1
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-10-31",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 2
          },
          {
            "date": "2025-11-05",
            "count": 1
          },
          {
            "date": "2025-11-07",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 3
          },
          {
            "date": "2025-11-11",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-11-14",
            "count": 2
          },
          {
            "date": "2025-11-15",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 2
          },
          {
            "date": "2025-11-19",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-21",
            "count": 1
          },
          {
            "date": "2025-11-22",
            "count": 1
          },
          {
            "date": "2025-11-24",
            "count": 1
          },
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-11-26",
            "count": 1
          },
          {
            "date": "2025-11-28",
            "count": 1
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-12-02",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2025-12-06",
            "count": 2
          },
          {
            "date": "2025-12-07",
            "count": 1
          },
          {
            "date": "2025-12-09",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2025-12-13",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 1
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2025-12-28",
            "count": 1
          },
          {
            "date": "2025-12-29",
            "count": 2
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-02",
            "count": 1
          },
          {
            "date": "2026-01-04",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-11",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 2
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-23",
            "count": 1
          },
          {
            "date": "2026-01-26",
            "count": 2
          },
          {
            "date": "2026-01-31",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 4
          },
          {
            "date": "2026-02-13",
            "count": 1
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-02-18",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 2
          },
          {
            "date": "2026-02-20",
            "count": 2
          },
          {
            "date": "2026-02-23",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 3
          },
          {
            "date": "2026-02-28",
            "count": 4
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 3
          },
          {
            "date": "2026-03-05",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-13",
            "count": 1
          },
          {
            "date": "2026-03-16",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 3
          },
          {
            "date": "2026-03-18",
            "count": 2
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-23",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 2
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-25",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-05-28",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-11",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 4
          },
          {
            "date": "2026-06-15",
            "count": 3
          },
          {
            "date": "2026-06-19",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 3
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 2
          },
          {
            "date": "2026-07-02",
            "count": 3
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 2
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 2
          },
          {
            "date": "2026-07-10",
            "count": 2
          },
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 3
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 2
          },
          {
            "date": "2026-07-23",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 249,
        "total_forks": 249
      },
      "star_history": null,
      "open_issues_and_prs": 237
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "src/browser-extension/Makefile",
        "src/lib/figura/Makefile",
        "src/lib/glyph/Makefile",
        "src/lib/script-command/Makefile",
        "src/lib/vicinae-ipc/Makefile",
        "src/lib/xdgpp/Makefile",
        "src/server/Makefile",
        "src/snippet/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "extra/extension-boilerplate/tsconfig.json",
        "src/typescript/api/tsconfig.json",
        "src/typescript/extension-manager/tsconfig.json",
        "src/typescript/raycast-api-compat/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 2496074,
      "source_files_sampled": 1061,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 6267
    },
    "dependencies": {
      "manifests": [
        "scripts/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@omnicast/api",
          "manifest": "scripts/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../api/omnicast-api-1.0.0.tgz"
        },
        {
          "name": "@omnicast/utils",
          "manifest": "scripts/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../api-utils/omnicast-utils-1.0.0.tgz"
        },
        {
          "name": "@vicinae/api",
          "manifest": "extra/extension-boilerplate/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../../src/typescript/api"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 25,
        "merged_prs": 861,
        "open_issues": 212,
        "closed_ratio": 0.698,
        "closed_issues": 489,
        "closed_unmerged_prs": 45
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "aurelleb",
          "commits": 1942,
          "avatar_url": "https://avatars.githubusercontent.com/u/72200344?v=4"
        },
        {
          "type": "User",
          "login": "cilginc",
          "commits": 40,
          "avatar_url": "https://avatars.githubusercontent.com/u/104676201?v=4"
        },
        {
          "type": "User",
          "login": "rithvikvibhu",
          "commits": 34,
          "avatar_url": "https://avatars.githubusercontent.com/u/5113343?v=4"
        },
        {
          "type": "User",
          "login": "dagimg-dot",
          "commits": 30,
          "avatar_url": "https://avatars.githubusercontent.com/u/106905365?v=4"
        },
        {
          "type": "User",
          "login": "quadratech188",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/117572566?v=4"
        },
        {
          "type": "User",
          "login": "SiriusCrain",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/22578495?v=4"
        },
        {
          "type": "User",
          "login": "AntoineGS",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/16911399?v=4"
        },
        {
          "type": "User",
          "login": "pavle99",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/73827472?v=4"
        },
        {
          "type": "User",
          "login": "schromp",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/103186360?v=4"
        },
        {
          "type": "User",
          "login": "ThatOneCalculator",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/44733677?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.849
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "api-release.yml",
        "build-appimage-image.yaml",
        "build-appimage.yaml",
        "build-arch-image.yaml",
        "build-linux.yaml",
        "build-macos.yaml",
        "build-windows.yaml",
        "cachix.yaml",
        "format.yaml",
        "macos-dmg.yaml",
        "nix-format.yaml",
        "nix-support.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 7/30 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 20 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 3,
            "reason": "7 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "de75102a08956b339c3b282dd43ec9eef3b743a0",
        "ran_at": "2026-07-23T23:24:47Z",
        "aggregate_score": 3.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T22:29:41Z",
      "oldest_open_prs": [
        {
          "number": 559,
          "created_at": "2025-10-27T02:07:00Z",
          "last_comment_at": "2025-10-31T20:36:38Z",
          "last_comment_author": "AntoineGS"
        },
        {
          "number": 568,
          "created_at": "2025-10-28T14:00:45Z",
          "last_comment_at": "2025-12-28T17:04:44Z",
          "last_comment_author": "AntoineGS"
        },
        {
          "number": 951,
          "created_at": "2026-01-11T09:34:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 984,
          "created_at": "2026-01-20T21:37:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 985,
          "created_at": "2026-01-20T23:41:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1004,
          "created_at": "2026-01-23T17:13:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1036,
          "created_at": "2026-01-31T08:50:41Z",
          "last_comment_at": "2026-02-03T08:27:41Z",
          "last_comment_author": "dagimg-dot"
        },
        {
          "number": 1107,
          "created_at": "2026-02-20T21:33:08Z",
          "last_comment_at": "2026-02-27T22:39:28Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 1158,
          "created_at": "2026-03-03T18:10:39Z",
          "last_comment_at": "2026-03-31T17:16:09Z",
          "last_comment_author": "bpavuk"
        },
        {
          "number": 1212,
          "created_at": "2026-03-13T18:57:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1228,
          "created_at": "2026-03-17T13:29:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1230,
          "created_at": "2026-03-18T03:11:04Z",
          "last_comment_at": "2026-06-07T07:05:09Z",
          "last_comment_author": "Jelloeater"
        },
        {
          "number": 1259,
          "created_at": "2026-03-25T16:55:00Z",
          "last_comment_at": "2026-04-13T21:38:34Z",
          "last_comment_author": "vMohammad24"
        },
        {
          "number": 1295,
          "created_at": "2026-04-07T17:26:39Z",
          "last_comment_at": "2026-05-06T11:15:14Z",
          "last_comment_author": "SiriusCrain"
        },
        {
          "number": 1426,
          "created_at": "2026-05-20T19:35:57Z",
          "last_comment_at": "2026-05-21T00:25:41Z",
          "last_comment_author": "vMohammad24"
        },
        {
          "number": 1468,
          "created_at": "2026-06-01T08:33:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1490,
          "created_at": "2026-06-07T19:10:40Z",
          "last_comment_at": "2026-07-13T14:20:23Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1516,
          "created_at": "2026-06-14T11:47:51Z",
          "last_comment_at": "2026-07-13T14:20:23Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1551,
          "created_at": "2026-06-24T09:54:58Z",
          "last_comment_at": "2026-07-13T14:19:29Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1607,
          "created_at": "2026-07-05T10:07:41Z",
          "last_comment_at": "2026-07-13T14:19:29Z",
          "last_comment_author": "arturict"
        }
      ],
      "last_merged_pr_at": "2026-07-23T22:22:38Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 12,
          "created_at": "2025-08-14T22:17:12Z",
          "last_comment_at": "2025-08-14T23:29:09Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 72,
          "created_at": "2025-08-17T16:53:11Z",
          "last_comment_at": "2025-11-12T10:22:17Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 75,
          "created_at": "2025-08-17T18:53:28Z",
          "last_comment_at": "2026-07-15T18:54:58Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 91,
          "created_at": "2025-08-20T17:39:35Z",
          "last_comment_at": "2026-06-23T12:40:13Z",
          "last_comment_author": "porridgewithraisins"
        },
        {
          "number": 105,
          "created_at": "2025-08-22T11:37:56Z",
          "last_comment_at": "2025-11-12T06:29:36Z",
          "last_comment_author": "rithvikvibhu"
        },
        {
          "number": 117,
          "created_at": "2025-08-23T05:22:15Z",
          "last_comment_at": "2025-08-24T06:57:35Z",
          "last_comment_author": "daxisunder"
        },
        {
          "number": 167,
          "created_at": "2025-08-28T22:46:48Z",
          "last_comment_at": "2025-10-31T20:02:23Z",
          "last_comment_author": "cloudglides"
        },
        {
          "number": 175,
          "created_at": "2025-08-30T06:04:10Z",
          "last_comment_at": "2025-10-04T00:32:31Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 183,
          "created_at": "2025-08-30T20:50:26Z",
          "last_comment_at": "2025-09-03T18:22:11Z",
          "last_comment_author": "soymadip"
        },
        {
          "number": 208,
          "created_at": "2025-09-03T15:02:36Z",
          "last_comment_at": "2025-10-07T09:20:19Z",
          "last_comment_author": "officialnochill"
        },
        {
          "number": 209,
          "created_at": "2025-09-03T15:05:53Z",
          "last_comment_at": "2026-01-15T17:23:28Z",
          "last_comment_author": "EL-File4138"
        },
        {
          "number": 246,
          "created_at": "2025-09-08T15:38:33Z",
          "last_comment_at": "2025-09-14T09:56:53Z",
          "last_comment_author": "quadratech188"
        },
        {
          "number": 248,
          "created_at": "2025-09-08T18:52:14Z",
          "last_comment_at": "2025-09-09T10:33:48Z",
          "last_comment_author": "maggster165"
        },
        {
          "number": 255,
          "created_at": "2025-09-09T11:45:40Z",
          "last_comment_at": "2026-04-27T02:56:47Z",
          "last_comment_author": "aroman"
        },
        {
          "number": 268,
          "created_at": "2025-09-10T14:11:00Z",
          "last_comment_at": "2026-06-09T18:12:49Z",
          "last_comment_author": "cslamar"
        },
        {
          "number": 269,
          "created_at": "2025-09-10T14:16:26Z",
          "last_comment_at": "2026-03-17T12:52:00Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 278,
          "created_at": "2025-09-11T15:50:07Z",
          "last_comment_at": "2025-10-08T18:17:06Z",
          "last_comment_author": "dagimg-dot"
        },
        {
          "number": 279,
          "created_at": "2025-09-11T15:50:31Z",
          "last_comment_at": "2025-09-21T19:31:38Z",
          "last_comment_author": "Damnjelly"
        },
        {
          "number": 282,
          "created_at": "2025-09-12T10:36:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 288,
          "created_at": "2025-09-13T13:59:00Z",
          "last_comment_at": "2025-09-13T14:00:53Z",
          "last_comment_author": "aurelleb"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/vicinaehq/vicinae",
    "host": "github.com",
    "name": "vicinae",
    "owner": "vicinaehq"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 36,
        "vitality": 96,
        "community": 79,
        "governance": 53,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1818,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1818 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1818
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.23.2",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 5.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 79,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "forks": 249,
              "stars": 8563,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "8,563 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 8563
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "249 forks",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 249
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 53,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 100,
              "top_contributor_share": 0.849
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 85% of commits",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 85
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 20 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "merged_prs": 861,
              "open_issues": 212,
              "closed_issues": 489,
              "issue_closed_ratio": 0.698,
              "closed_unmerged_prs": 45
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "70% of issues closed",
                "points": 32.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 70
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "861/906 decided PRs merged",
                "points": 36.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 861,
                      "decided": 906
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 7/30 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "followers": 88,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "vicinaehq",
              "public_repos": 9,
              "account_age_days": 360
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "88 followers of vicinaehq",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 88,
                      "login": "vicinaehq"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "9 public repos, account ~0 yr old",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 9
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "13 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "linux",
                "poweruser",
                "productivity",
                "app-launcher",
                "nodejs",
                "qt",
                "react",
                "raycast",
                "cpp23",
                "macos"
              ],
              "has_wiki": false,
              "homepage": "https://vicinae.com",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://vicinae.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 36,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 7/30 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 20 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "7 existing vulnerabilities detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 6267
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "src/browser-extension/Makefile",
                "src/lib/figura/Makefile",
                "src/lib/glyph/Makefile",
                "src/lib/script-command/Makefile",
                "src/lib/vicinae-ipc/Makefile",
                "src/lib/xdgpp/Makefile",
                "src/server/Makefile",
                "src/snippet/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "extra/extension-boilerplate/tsconfig.json",
                "src/typescript/api/tsconfig.json",
                "src/typescript/extension-manager/tsconfig.json",
                "src/typescript/raycast-api-compat/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, Nix, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "C++",
              "largest_source_bytes": 2496074,
              "source_files_sampled": 1061,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C++ (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/1061 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1061,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "npm package 'scripts' points at a different repository (https://github.com/jaredhanson/node-scripts); excluded from ecosystem scoring",
    "npm package 'template' points at a different repository (https://github.com/jonschlinkert/template); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T23:25:17.337326Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/vicinaehq/vicinae.svg",
  "full_name": "vicinaehq/vicinae",
  "license_state": "standard",
  "license_spdx": "GPL-3.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.