SPB Git forge

spb/websensor

Public
33commits 1branches 0releases
3.4 MBsize
maindefault branch
10 days agolast push
TypeScript 55.4% Python 43.2% SQL 1.2%
31.7 KB · 160 lines python
Raw Blame History
1# Fourth part of the spec (desktop apps, editors, shells, self-hosted apps, CMS, mobile, ML tooling, OS distributions, desktop environments, corporate OSS).23SPEC4 = [4    "Editors, terminals and shells",5    src("gnu", "GNU Project", "gnu.org", ["gnu", "gnu project", "gnu emacs", "coreutils", "glibc", "bash", "gnu make"], categories=OSD, country="US", products=["GNU Emacs", "GNU Coreutils", "glibc", "Bash", "GNU Make", "GNU grep", "GNU tar"],6        repos=[("emacs-mirror/emacs", T), ("coreutils/coreutils", T), ("bminor/glibc", T), ("bminor/bash", T), ("mirror/make", T)], feeds=[("gnu news", "https://www.gnu.org/rss/whatsnew.rss")]),7    src("obsidian", "Obsidian", "obsidian.md", ["obsidian md", "obsidian notes"], categories=OSAPP, repos=["obsidianmd/obsidian-releases", "obsidianmd/obsidian-api"]),8    src("alacritty", "Alacritty", "alacritty.org", ["alacritty"], categories=OSAPP, repos=["alacritty/alacritty"]),9    src("wezterm", "WezTerm", "wezterm.org", ["wezterm", "wez terminal"], categories=OSAPP, repos=[("wezterm/wezterm", T)]),10    src("kitty", "kitty terminal", "sw.kovidgoyal.net", ["kitty terminal", "kovidgoyal kitty", "calibre"], categories=OSAPP, products=["kitty", "calibre"], repos=["kovidgoyal/kitty", "kovidgoyal/calibre"]),11    src("ghostty", "Ghostty", "ghostty.org", ["ghostty", "mitchellh ghostty"], categories=OSAPP, repos=["ghostty-org/ghostty"]),12    src("tmux", "tmux", "tmux.github.io", ["tmux"], categories=OSD, repos=["tmux/tmux"]),13    src("fish-shell", "fish shell", "fishshell.com", ["fish shell", "fish"], categories=OSD, repos=["fish-shell/fish-shell"]),14    src("zsh", "Zsh / Oh My Zsh", "zsh.org", ["zsh", "oh my zsh", "ohmyzsh", "powerlevel10k", "zsh-autosuggestions"], categories=OSD, products=["Zsh", "Oh My Zsh", "Powerlevel10k", "zsh-autosuggestions", "zsh-syntax-highlighting"],15        repos=[("zsh-users/zsh", T), ("zsh-users/zsh-autosuggestions", T), "zsh-users/zsh-syntax-highlighting", "romkatv/powerlevel10k"]),16    src("starship", "Starship", "starship.rs", ["starship prompt"], categories=OSD, repos=["starship/starship"]),17    src("helix", "Helix editor", "helix-editor.com", ["helix editor"], categories=OSD, repos=["helix-editor/helix"]),18    src("lapce", "Lapce", "lapce.dev", ["lapce editor", "floem"], categories=OSD, repos=["lapce/lapce", "lapce/floem"]),19    src("micro-editor", "micro editor", "micro-editor.github.io", ["micro editor", "zyedidia micro"], categories=OSD, repos=["zyedidia/micro"]),20    src("nushell", "Nushell", "nushell.sh", ["nushell", "nu shell"], categories=OSD, repos=["nushell/nushell"]),21    ext("git", repos=["git-lfs/git-lfs", "libgit2/libgit2", "jj-vcs/jj", "pre-commit/pre-commit", "git-ecosystem/git-credential-manager", "newren/git-filter-repo", "tummychow/git-absorb", "arxanas/git-branchless", "git-town/git-town", "gitextensions/gitextensions"],22        products=["Git LFS", "libgit2", "Jujutsu", "pre-commit", "Git Credential Manager", "git-filter-repo", "git-absorb", "git-branchless", "Git Town", "Git Extensions"]),23    src("gitea", "Gitea", "gitea.com", ["gitea", "go-gitea", "gitea actions", "act_runner"], tier="B", categories=OSD, country="CN", products=["Gitea", "act_runner", "tea CLI"],24        repos=["go-gitea/gitea", "gitea/tea"], feeds=[("blog feed", "https://blog.gitea.com/index.xml")]),25    src("forgejo", "Forgejo (Codeberg)", "forgejo.org", ["forgejo", "codeberg"], categories=OSD, country="DE", feeds=[("releases (codeberg)", "https://codeberg.org/forgejo/forgejo/releases.rss"), ("blog feed", "https://forgejo.org/rss.xml")]),26    src("gogs", "Gogs", "gogs.io", ["gogs"], categories=OSD, repos=["gogs/gogs"]),27    src("onedev", "OneDev", "onedev.io", ["onedev"], categories=OSD, repos=["theonedev/onedev"]),28    src("sourcegraph", "Sourcegraph", "sourcegraph.com", ["sourcegraph", "cody ai", "zoekt", "scip", "src-cli", "amp code"], categories=OSD, country="US", products=["Sourcegraph", "Cody", "Zoekt", "SCIP", "src-cli"],29        repos=["sourcegraph/sourcegraph-public-snapshot", "sourcegraph/cody", "sourcegraph/zoekt", "sourcegraph/scip", "sourcegraph/src-cli", "sourcegraph/conc", "sourcegraph/jsonrpc2", "sourcegraph/scip-typescript", "sourcegraph/scip-java", "sourcegraph/scip-python"]),30    src("guix", "GNU Guix", "guix.gnu.org", ["guix", "gnu guix", "guix system"], categories=OSOS, feeds=[("blog feed", "https://guix.gnu.org/feeds/blog.atom", "ATOM")]),31    ext("nixos", repos=[("NixOS/nixpkgs", T), ("nix-community/home-manager", T), "nix-community/nixos-anywhere", "nix-community/disko", "DeterminateSystems/nix-installer", "cachix/devenv", "nix-community/nix-direnv", "nix-community/NixOS-WSL", "nix-darwin/nix-darwin", "nix-community/nix-index"],32        products=["nixpkgs", "Home Manager", "nixos-anywhere", "disko", "Determinate Nix Installer", "devenv", "nix-direnv", "NixOS-WSL", "nix-darwin", "nix-index"]),33    ext("mozilla", repos=["mozilla/pdf.js", "thunderbird/thunderbird-android", "mozilla/sccache", "mozilla/uniffi-rs", "mozilla/neqo", "mozilla/mozjpeg", "mozilla/glean", "mozilla/rhino", "mozilla/cbindgen", "mozilla/grcov"],34        products=["PDF.js", "Thunderbird for Android", "sccache", "UniFFI", "neqo", "mozjpeg", "Glean", "Rhino", "cbindgen", "grcov"]),35    ext("homebrew", repos=["Homebrew/actions", "Homebrew/ruby-macho", "Homebrew/install", "Homebrew/homebrew-portable-ruby", "Homebrew/homebrew-command-not-found", "Homebrew/homebrew-test-bot", "Homebrew/homebrew-formula-analytics", "Homebrew/homebrew-autoupdate", "Homebrew/brew.sh", "Homebrew/homebrew-bundle"],36        products=["Homebrew actions", "Homebrew install script", "Portable Ruby", "brew bundle", "brew autoupdate", "brew test-bot"]),37    ext("neovim", repos=["neovim/nvim-lspconfig", "nvim-treesitter/nvim-treesitter", "nvim-telescope/telescope.nvim", "LazyVim/LazyVim", "folke/lazy.nvim", "hrsh7th/nvim-cmp", "neovide/neovide", "mason-org/mason.nvim", "nvim-lualine/lualine.nvim", "nvim-neo-tree/neo-tree.nvim"],38        products=["nvim-lspconfig", "nvim-treesitter", "telescope.nvim", "LazyVim", "lazy.nvim", "nvim-cmp", "Neovide", "mason.nvim", "lualine", "neo-tree"]),39    ext("vim", repos=["vim/vim-win32-installer", "macvim-dev/macvim", "vim/colorschemes", "junegunn/vim-plug", "preservim/nerdtree", "tpope/vim-fugitive", "vim-airline/vim-airline", "dense-analysis/ale", "neoclide/coc.nvim", "ycm-core/YouCompleteMe"],40        products=["Vim Win32 installer", "MacVim", "vim-plug", "NERDTree", "vim-fugitive", "vim-airline", "ALE", "coc.nvim", "YouCompleteMe"]),41    ext("zed", repos=["zed-industries/extensions", "longbridge/gpui-component", "zed-industries/agent-client-protocol", "zed-industries/claude-code-acp", "zed-industries/codex-acp"],42        products=["Zed extensions", "GPUI Component", "Agent Client Protocol", "claude-code-acp", "codex-acp"]),43    ext("jetbrains", repos=["JetBrains/intellij-platform-gradle-plugin", "JetBrains/intellij-plugin-verifier", "JetBrains/JetBrainsMono", "JetBrains/qodana-cli", "JetBrains/kotlin-wrappers", "JetBrains/skiko", "JetBrains/lets-plot", "JetBrains/pty4j", "JetBrains/jewel", "JetBrains/amper", "JetBrains/koog", "Kotlin/kotlin-jupyter", "JetBrains/ideavim", "JetBrains/intellij-scala", "JetBrains/intellij-sdk-docs", "JetBrains/ring-ui", "JetBrains/xodus", "JetBrains/kotlinconf-app", "JetBrains/mps"],44        products=["IntelliJ Platform Gradle Plugin", "IntelliJ Plugin Verifier", "JetBrains Mono", "Qodana CLI", "Kotlin Wrappers", "Skiko", "Lets-Plot", "pty4j", "Jewel", "Amper", "Koog", "Kotlin Jupyter", "IdeaVim", "IntelliJ Scala", "IntelliJ SDK docs", "Ring UI", "Xodus", "KotlinConf app", "MPS"]),4546    "Self-hosted and desktop applications",47    src("gimp", "GIMP", "gimp.org", ["gimp", "gnu image manipulation program", "babl", "gegl"], categories=OSAPP, repos=[("GNOME/gimp", T), ("GNOME/gegl", T), ("GNOME/babl", T)], feeds=[("news feed", "https://www.gimp.org/news.rss")]),48    src("inkscape", "Inkscape", "inkscape.org", ["inkscape"], categories=OSAPP, repos=[("inkscape/inkscape", T)]),49    ext("gnome", repos=[("GNOME/gtk", T), ("GNOME/glib", T), ("GNOME/gnome-shell", T), ("GNOME/mutter", T), ("GNOME/nautilus", T), ("GNOME/gnome-control-center", T), ("GNOME/libadwaita", T), ("GNOME/gnome-builder", T), ("GNOME/epiphany", T), ("GNOME/gnome-software", T)],50        products=["GTK", "GLib", "GNOME Shell", "Mutter", "Nautilus", "GNOME Settings", "libadwaita", "GNOME Builder", "GNOME Web", "GNOME Software"]),51    ext("kde", repos=[("KDE/plasma-desktop", T), ("KDE/krita", T), ("KDE/kdenlive", T), ("KDE/digikam", T), ("KDE/kwin", T), ("KDE/dolphin", T), ("KDE/konsole", T), ("KDE/kate", T), ("KDE/okular", T), ("KDE/plasma-mobile", T)],52        products=["Plasma Desktop", "Krita", "Kdenlive", "digiKam", "KWin", "Dolphin", "Konsole", "Kate", "Okular", "Plasma Mobile"]),53    src("audacity", "Audacity (Muse Group)", "audacityteam.org", ["audacity", "muse group", "musescore", "muse hub"], categories=OSAPP, products=["Audacity", "MuseScore Studio"], repos=["audacity/audacity", "musescore/MuseScore"]),54    src("darktable", "darktable / RawTherapee", "darktable.org", ["darktable", "rawtherapee", "raw photo editor"], categories=OSAPP, products=["darktable", "RawTherapee"], repos=["darktable-org/darktable", "Beep6581/RawTherapee"]),55    src("keepassxc", "KeePassXC / KeePass", "keepassxc.org", ["keepassxc", "keepass", "keepassdx", "keeweb"], categories=OSSEC, products=["KeePassXC", "KeePassDX", "KeeWeb", "KeePassium"], repos=["keepassxreboot/keepassxc", "Kunzisoft/KeePassDX", "keeweb/keeweb", "keepassium/KeePassium"]),56    src("nextcloud", "Nextcloud", "nextcloud.com", ["nextcloud", "nextcloud hub", "nextcloud talk", "nextcloud office"], tier="B", categories=OSAPP, country="DE", products=["Nextcloud Server", "Nextcloud Desktop", "Nextcloud Talk", "Nextcloud Android", "Nextcloud iOS", "Nextcloud AIO"],57        repos=["nextcloud/server", "nextcloud/desktop", "nextcloud/spreed", "nextcloud/android", "nextcloud/ios", "nextcloud/all-in-one", "nextcloud/mail", "nextcloud/calendar"], feeds=[("blog feed", "https://nextcloud.com/blog/feed/")]),58    src("owncloud", "ownCloud (Kiteworks)", "owncloud.com", ["owncloud", "owncloud infinite scale", "ocis"], categories=OSAPP, country="DE", products=["ownCloud Infinite Scale", "ownCloud Desktop"], repos=["owncloud/ocis", "owncloud/client", "owncloud/web"]),59    src("seafile", "Seafile", "seafile.com", ["seafile"], categories=OSAPP, country="DE", repos=["haiwen/seafile", "haiwen/seahub"]),60    src("syncthing", "Syncthing", "syncthing.net", ["syncthing"], categories=OSAPP, repos=["syncthing/syncthing", "syncthing/syncthing-android"]),61    src("rclone", "rclone", "rclone.org", ["rclone"], categories=OSD, country="GB", repos=["rclone/rclone"]),62    src("restic", "restic", "restic.net", ["restic backup", "rustic"], categories=OSD, country="DE", products=["restic", "rustic"], repos=["restic/restic", "rustic-rs/rustic"]),63    src("borgbackup", "BorgBackup", "borgbackup.org", ["borg backup", "borgbackup", "borgmatic", "vorta"], categories=OSD, products=["Borg", "borgmatic", "Vorta"], repos=["borgbackup/borg", "borgmatic-collective/borgmatic", "borgbase/vorta"]),64    src("kopia", "Kopia", "kopia.io", ["kopia backup"], categories=OSD, repos=["kopia/kopia"]),65    src("duplicati", "Duplicati", "duplicati.com", ["duplicati"], categories=OSAPP, repos=["duplicati/duplicati"]),66    src("jellyfin", "Jellyfin", "jellyfin.org", ["jellyfin", "jellyfin media server"], tier="B", categories=OSAPP, products=["Jellyfin Server", "Jellyfin Web", "Jellyfin Media Player", "Jellyfin Android", "Swiftfin", "Jellyfin ffmpeg"],67        repos=["jellyfin/jellyfin", "jellyfin/jellyfin-web", "jellyfin/jellyfin-media-player", "jellyfin/jellyfin-android", "jellyfin/Swiftfin", "jellyfin/jellyfin-ffmpeg", "jellyfin/jellyfin-androidtv", "jellyfin/jellyfin-kodi"]),68    src("servarr", "Servarr (Radarr, Sonarr, Lidarr, Prowlarr, Readarr) and companions", "wiki.servarr.com", ["radarr", "sonarr", "lidarr", "prowlarr", "readarr", "bazarr", "jackett", "overseerr", "jellyseerr", "tautulli", "servarr"], categories=OSAPP,69        products=["Radarr", "Sonarr", "Lidarr", "Prowlarr", "Readarr", "Bazarr", "Jackett", "Overseerr", "Jellyseerr", "Tautulli"],70        repos=["Radarr/Radarr", "Sonarr/Sonarr", "Lidarr/Lidarr", "Prowlarr/Prowlarr", "Readarr/Readarr", "morpheus65535/bazarr", "Jackett/Jackett", "sct/overseerr", "Fallenbagel/jellyseerr", "Tautulli/Tautulli"]),71    src("immich", "Immich (FUTO)", "immich.app", ["immich", "futo immich"], tier="B", categories=OSAPP, repos=["immich-app/immich"]),72    src("photoprism", "PhotoPrism", "photoprism.app", ["photoprism"], categories=OSAPP, country="DE", repos=["photoprism/photoprism"]),73    src("paperless-ngx", "Paperless-ngx", "docs.paperless-ngx.com", ["paperless ngx", "paperless-ngx", "paperless"], categories=OSAPP, repos=["paperless-ngx/paperless-ngx"]),74    ext("home-assistant", repos=["esphome/esphome", "blakeblackshear/frigate", "Koenkk/zigbee2mqtt", "home-assistant/operating-system", "home-assistant/supervisor", "home-assistant/frontend", "home-assistant/android", "home-assistant/iOS", "hacs/integration", "music-assistant/server"],75        products=["ESPHome", "Frigate", "Zigbee2MQTT", "Home Assistant OS", "Supervisor", "Home Assistant frontend", "Home Assistant Android", "Home Assistant iOS", "HACS", "Music Assistant"]),76    src("openhab", "openHAB", "openhab.org", ["openhab"], categories=OSAPP, country="DE", repos=["openhab/openhab-core", "openhab/openhab-addons", "openhab/openhab-distro"]),77    src("tasmota", "Tasmota", "tasmota.github.io", ["tasmota", "arendst tasmota"], categories=OSAPP, repos=["arendst/Tasmota"]),78    src("wled", "WLED", "kno.wled.ge", ["wled", "aircoookie wled"], categories=OSAPP, repos=["Aircoookie/WLED"]),79    src("openwrt", "OpenWrt", "openwrt.org", ["openwrt", "lede", "luci"], tier="B", categories=OSINF, repos=[("openwrt/openwrt", T), ("openwrt/luci", T), ("openwrt/packages", T)]),80    src("netgate", "Netgate pfSense", "pfsense.org", ["pfsense", "netgate", "pfsense plus", "pfsense ce"], categories=OSSEC, country="US", repos=[("pfsense/pfsense", T), ("pfsense/FreeBSD-ports", T)], feeds=[("netgate blog", "https://www.netgate.com/blog/rss.xml")]),81    src("opnsense", "OPNsense (Deciso)", "opnsense.org", ["opnsense", "deciso"], categories=OSSEC, country="NL", repos=[("opnsense/core", T), ("opnsense/plugins", T), ("opnsense/tools", T)]),82    src("vyos", "VyOS", "vyos.io", ["vyos", "vyos networks"], categories=OSINF, repos=[("vyos/vyos-1x", T), ("vyos/vyos-build", T)], feeds=[("blog feed", "https://blog.vyos.io/rss.xml")]),83    src("pi-hole", "Pi-hole", "pi-hole.net", ["pi-hole", "pihole", "ftl dns"], tier="B", categories=OSSEC, products=["Pi-hole", "FTL", "Pi-hole web interface", "Pi-hole docker"], repos=["pi-hole/pi-hole", "pi-hole/FTL", "pi-hole/web", "pi-hole/docker-pi-hole"]),84    ext("adguard-dns", repos=["AdguardTeam/AdGuardHome", "AdguardTeam/AdGuardDNS", "AdguardTeam/dnsproxy", "AdguardTeam/urlfilter", "AdguardTeam/AdguardBrowserExtension", "AdguardTeam/AdGuardVPNCLI", "AdguardTeam/tsurlfilter", "AdguardTeam/Scriptlets", "AdguardTeam/AdGuardForSafari", "AdguardTeam/FiltersCompiler"],85        products=["AdGuard Home", "AdGuard DNS", "dnsproxy", "urlfilter", "AdGuard Browser Extension", "AdGuard VPN CLI", "tsurlfilter", "Scriptlets", "AdGuard for Safari", "FiltersCompiler"]),86    src("technitium", "Technitium DNS Server", "technitium.com", ["technitium", "technitium dns"], categories=OSINF, repos=["TechnitiumSoftware/DnsServer"]),87    src("blocky", "Blocky", "0xerr0r.github.io", ["blocky dns", "0xerr0r"], categories=OSINF, repos=["0xERR0R/blocky"]),88    src("telegram", "Telegram (open-source clients)", "telegram.org", ["telegram desktop", "tdesktop", "telegram android", "tdlib"], categories=OSAPP, products=["Telegram Desktop", "Telegram Android", "Telegram iOS", "TDLib"],89        repos=["telegramdesktop/tdesktop", "DrKLO/Telegram", "TelegramMessenger/Telegram-iOS", ("tdlib/td", T)]),90    src("jitsi", "Jitsi (8x8)", "jitsi.org", ["jitsi", "jitsi meet", "jitsi videobridge", "jibri", "prosody"], tier="B", categories=OSAPP, country="US", products=["Jitsi Meet", "Jitsi Videobridge", "Jibri", "Jicofo", "docker-jitsi-meet"],91        repos=["jitsi/jitsi-meet", "jitsi/jitsi-videobridge", "jitsi/docker-jitsi-meet", "jitsi/jibri", "jitsi/jicofo", "jitsi/jitsi-meet-electron", "jitsi/lib-jitsi-meet"]),92    src("bigbluebutton", "BigBlueButton", "bigbluebutton.org", ["bigbluebutton", "bbb", "greenlight"], categories=OSAPP, country="CA", products=["BigBlueButton", "Greenlight"], repos=["bigbluebutton/bigbluebutton", "bigbluebutton/greenlight"]),93    src("rocket-chat", "Rocket.Chat", "rocket.chat", ["rocket chat", "rocket.chat", "rocketchat"], categories=OSAPP, country="BR", repos=["RocketChat/Rocket.Chat", "RocketChat/Rocket.Chat.ReactNative", "RocketChat/Rocket.Chat.Electron"]),94    src("mattermost", "Mattermost", "mattermost.com", ["mattermost"], tier="B", categories=OSAPP, country="US", products=["Mattermost server", "Mattermost desktop", "Mattermost mobile", "mmctl"],95        repos=["mattermost/mattermost", "mattermost/desktop", "mattermost/mattermost-mobile", "mattermost/mattermost-plugin-calls", "mattermost/mattermost-operator", "mattermost/mattermost-plugin-github", "mattermost/mattermost-plugin-jira", "mattermost/focalboard", "mattermost/mattermost-docker"]),96    src("matrix-ecosystem", "Matrix ecosystem (Element and servers)", "matrix.org", ["element web", "element x", "matrix rust sdk", "dendrite", "conduit", "conduwuit", "matrix-js-sdk", "mautrix", "matrix-react-sdk", "hydrogen"], categories=OSAPP, country="GB",97        products=["Element Web", "Element X Android", "Element X iOS", "matrix-rust-sdk", "matrix-js-sdk", "Dendrite", "Conduit", "continuwuity", "mautrix bridges", "Matrix Authentication Service"],98        repos=["element-hq/element-web", "element-hq/element-x-android", "element-hq/element-x-ios", "matrix-org/matrix-rust-sdk", "matrix-org/matrix-js-sdk", "element-hq/dendrite", ("matrix-org/matrix-spec", T), "element-hq/matrix-authentication-service", "mautrix/telegram", "element-hq/element-desktop"]),99    src("onlyoffice", "ONLYOFFICE (Ascensio)", "onlyoffice.com", ["onlyoffice", "ascensio"], categories=OSAPP, country="LV", products=["ONLYOFFICE Document Server", "ONLYOFFICE Desktop Editors", "ONLYOFFICE Docs docker"],100        repos=["ONLYOFFICE/DocumentServer", "ONLYOFFICE/DesktopEditors", "ONLYOFFICE/Docker-DocumentServer", "ONLYOFFICE/onlyoffice-nextcloud", "ONLYOFFICE/onlyoffice-owncloud", "ONLYOFFICE/document-server-integration", "ONLYOFFICE/sdkjs", "ONLYOFFICE/web-apps", "ONLYOFFICE/core", "ONLYOFFICE/build_tools"]),101    src("collabora-online", "Collabora Online", "collaboraonline.com", ["collabora online", "collabora office", "cool"], categories=OSAPP, country="GB", repos=[("CollaboraOnline/online", T), "CollaboraOnline/richdocuments", "CollaboraOnline/collabora-online-sdk-examples"]),102    src("cryptpad", "CryptPad (XWiki SAS)", "cryptpad.org", ["cryptpad"], categories=OSAPP, country="FR", repos=["cryptpad/cryptpad"]),103    src("joplin", "Joplin", "joplinapp.org", ["joplin", "joplin notes"], categories=OSAPP, country="GB", repos=["laurent22/joplin"]),104    src("logseq", "Logseq", "logseq.com", ["logseq"], categories=OSAPP, repos=["logseq/logseq"]),105    src("affine", "AFFiNE", "affine.pro", ["affine", "toeverything", "blocksuite"], categories=OSAPP, country="SG", products=["AFFiNE", "BlockSuite"], repos=["toeverything/AFFiNE", "toeverything/blocksuite"]),106    src("appflowy", "AppFlowy", "appflowy.io", ["appflowy"], categories=OSAPP, country="SG", repos=["AppFlowy-IO/AppFlowy", "AppFlowy-IO/AppFlowy-Cloud"]),107    src("standard-notes", "Standard Notes (Proton)", "standardnotes.com", ["standard notes", "standardnotes"], categories=OSAPP, repos=["standardnotes/app", "standardnotes/server"]),108    src("notesnook", "Notesnook (Streetwriters)", "notesnook.com", ["notesnook", "streetwriters"], categories=OSAPP, repos=["streetwriters/notesnook", "streetwriters/notesnook-sync-server"]),109    src("siyuan", "SiYuan", "b3log.org", ["siyuan note", "b3log"], categories=OSAPP, country="CN", repos=["siyuan-note/siyuan"]),110    src("outline", "Outline", "getoutline.com", ["outline wiki", "getoutline"], categories=OSAPP, country="US", repos=["outline/outline"]),111    src("bookstack", "BookStack", "bookstackapp.com", ["bookstack"], categories=OSAPP, country="GB", repos=["BookStackApp/BookStack"]),112    src("wiki-js", "Wiki.js (Requarks)", "js.wiki", ["wiki.js", "wikijs", "requarks"], categories=OSAPP, country="CA", repos=["requarks/wiki"]),113    src("dokuwiki", "DokuWiki", "dokuwiki.org", ["dokuwiki"], categories=OSAPP, country="DE", repos=["dokuwiki/dokuwiki"]),114    src("xwiki", "XWiki", "xwiki.org", ["xwiki", "xwiki sas"], categories=OSAPP, country="FR", repos=[("xwiki/xwiki-platform", T), ("xwiki/xwiki-commons", T), ("xwiki/xwiki-rendering", T)]),115    ext("wikimedia", repos=[("wikimedia/mediawiki", T), ("wikimedia/apps-android-wikipedia", T), ("wikimedia/wikipedia-ios", T), ("wikimedia/pywikibot", T), ("wikimedia/parsoid", T), ("wikimedia/VisualEditor", T), ("wikimedia/mediawiki-extensions-CirrusSearch", T), ("wikimedia/mediawiki-extensions-Wikibase", T), ("wikimedia/wikidata-query-rdf", T), ("wikimedia/mediawiki-extensions-Translate", T)],116        products=["MediaWiki", "Wikipedia Android", "Wikipedia iOS", "Pywikibot", "Parsoid", "VisualEditor", "CirrusSearch", "Wikibase", "Wikidata Query Service", "Translate extension"]),117    src("docmost", "Docmost", "docmost.com", ["docmost"], categories=OSAPP, repos=["docmost/docmost"]),118    src("zotero", "Zotero", "zotero.org", ["zotero", "zotero 7", "better bibtex"], categories=["open-source", "research", "education"], country="US", products=["Zotero", "Zotero Connectors", "Zotero Android", "Zotero iOS", "Better BibTeX"],119        repos=[("zotero/zotero", T), ("zotero/zotero-connectors", T), ("zotero/zotero-android", T), ("zotero/zotero-ios", T), "retorquere/zotero-better-bibtex", ("zotero/translators", T), ("zotero/zotero-standalone-build", T), ("zotero/dataserver", T), ("zotero/web-library", T), ("zotero/zotero-build", T)]),120    src("anki", "Anki", "apps.ankiweb.net", ["anki", "ankidroid", "ankiweb", "ankitects"], categories=["open-source", "education"], country="AU", products=["Anki", "AnkiDroid", "AnkiMobile"], repos=["ankitects/anki", "ankidroid/Anki-Android"]),121    src("handbrake", "HandBrake", "handbrake.fr", ["handbrake"], categories=OSAPP, repos=["HandBrake/HandBrake"]),122    src("ffmpeg", "FFmpeg", "ffmpeg.org", ["ffmpeg", "libav", "ffprobe", "libavcodec"], tier="B", categories=OSD, repos=[("FFmpeg/FFmpeg", T), "BtbN/FFmpeg-Builds", "ffmpegwasm/ffmpeg.wasm", "Zulko/moviepy", "PyAV-Org/PyAV", "kkroening/ffmpeg-python", "fluent-ffmpeg/node-fluent-ffmpeg", "wader/static-ffmpeg", "jrottenberg/ffmpeg", "linuxserver/docker-ffmpeg"]),123    src("imagemagick", "ImageMagick", "imagemagick.org", ["imagemagick", "graphicsmagick", "libvips", "sharp"], tier="B", categories=OSD, products=["ImageMagick", "libvips", "sharp", "GraphicsMagick", "Pillow-SIMD", "libwebp", "libavif", "libjxl", "mozjpeg", "libjpeg-turbo"],124        repos=["ImageMagick/ImageMagick", "libvips/libvips", "lovell/sharp", ("ImageMagick/ImageMagick6", T), "uploadcare/pillow-simd", "webmproject/libwebp", "AOMediaCodec/libavif", "libjxl/libjxl", "mozilla/mozjpeg", "libjpeg-turbo/libjpeg-turbo"]),125    src("mpv", "mpv", "mpv.io", ["mpv player", "mpv", "iina", "celluloid", "mpv.net"], categories=OSAPP, products=["mpv", "IINA", "Celluloid", "mpv.net"], repos=["mpv-player/mpv", "iina/iina", "celluloid-player/celluloid", "mpvnet-player/mpv.net"]),126    src("kodi", "Kodi", "kodi.tv", ["kodi", "xbmc"], categories=OSAPP, repos=["xbmc/xbmc", "xbmc/inputstream.adaptive"]),127    src("freecad", "FreeCAD / open-source CAD", "freecad.org", ["freecad", "openscad", "librecad", "solvespace", "blenderbim", "bonsai bim", "cadquery", "build123d", "kicad", "horizon eda", "libreoffice draw"], categories=OSAPP,128        products=["FreeCAD", "OpenSCAD", "LibreCAD", "SolveSpace", "CadQuery", "build123d", "Bonsai (BlenderBIM)", "Horizon EDA", "OpenCASCADE", "Manifold"],129        repos=["FreeCAD/FreeCAD", "openscad/openscad", "LibreCAD/LibreCAD", "solvespace/solvespace", "CadQuery/cadquery", "gumyr/build123d", "IfcOpenShell/IfcOpenShell", "horizon-eda/horizon", ("Open-Cascade-SAS/OCCT", T), "elalish/manifold"]),130    src("kicad", "KiCad", "kicad.org", ["kicad", "kicad eda"], tier="B", categories=OSAPP, feeds=[("gitlab tags", "https://gitlab.com/kicad/code/kicad/-/tags?format=atom", "ATOM"), ("blog feed", "https://www.kicad.org/blog/index.xml")]),131    src("arduino", "Arduino", "arduino.cc", ["arduino", "arduino ide", "arduino cli", "arduino-esp32"], tier="B", categories=["open-source", "developer", "technology"], country="IT", products=["Arduino IDE", "Arduino CLI", "ArduinoCore-avr", "ArduinoCore-mbed", "Arduino Language Server", "Arduino Cloud CLI"],132        repos=["arduino/arduino-ide", "arduino/arduino-cli", "arduino/ArduinoCore-avr", "arduino/ArduinoCore-mbed", "arduino/arduino-language-server", "arduino/arduino-cloud-cli", "arduino/ArduinoCore-renesas", "arduino/ArduinoCore-samd", "arduino/Arduino", "arduino/arduino-create-agent"],133        feeds=[("blog feed", "https://blog.arduino.cc/feed/")]),134    src("espressif", "Espressif (ESP-IDF)", "espressif.com", ["espressif", "esp-idf", "esp32", "esp8266", "arduino-esp32", "esp-rs"], tier="B", categories=["open-source", "developer", "semiconductors"], country="CN", products=["ESP-IDF", "arduino-esp32", "ESP-AT", "esptool", "ESP-ADF", "ESP-Matter", "esp-rs"],135        repos=["espressif/esp-idf", "espressif/arduino-esp32", "espressif/esptool", "espressif/esp-at", "espressif/esp-adf", "espressif/esp-matter", "esp-rs/esp-hal", "espressif/vscode-esp-idf-extension", "espressif/esp-protocols", "espressif/esp-rainmaker"],136        feeds=[("news feed", "https://www.espressif.com/en/rss.xml")]),137    src("platformio", "PlatformIO", "platformio.org", ["platformio"], categories=OSD, repos=["platformio/platformio-core", "platformio/platformio-vscode-ide"]),138    src("micropython", "MicroPython / CircuitPython", "micropython.org", ["micropython", "circuitpython", "adafruit circuitpython"], categories=OSD, products=["MicroPython", "CircuitPython", "mpremote", "Thonny"],139        repos=["micropython/micropython", "adafruit/circuitpython", "thonny/thonny", "adafruit/Adafruit_CircuitPython_Bundle", "micropython/micropython-lib", "adafruit/Adafruit_Blinka", "adafruit/Adafruit-GFX-Library", "adafruit/Adafruit_NeoPixel", "adafruit/Adafruit_CircuitPython_HID", "adafruit/circup"]),140    ext("raspberry-pi", repos=["raspberrypi/rpi-imager", ("raspberrypi/linux", T), ("raspberrypi/firmware", T), "raspberrypi/pico-sdk", "raspberrypi/picotool", "raspberrypi/pico-examples", "raspberrypi/rpi-eeprom", "raspberrypi/rpicam-apps", "raspberrypi/picamera2", "raspberrypi/utils"],141        products=["Raspberry Pi Imager", "Raspberry Pi kernel", "Raspberry Pi firmware", "Pico SDK", "picotool", "rpi-eeprom", "rpicam-apps", "Picamera2"]),142    src("zephyr", "Zephyr Project", "zephyrproject.org", ["zephyr rtos", "zephyr project", "west tool"], tier="B", categories=OSD, country="US", products=["Zephyr RTOS", "west", "Zephyr SDK"], repos=["zephyrproject-rtos/zephyr", "zephyrproject-rtos/west", "zephyrproject-rtos/sdk-ng"]),143    src("freertos", "FreeRTOS", "freertos.org", ["freertos", "freertos kernel", "aws freertos"], tier="B", categories=OSD, country="US", products=["FreeRTOS Kernel", "FreeRTOS-Plus-TCP", "coreMQTT"], repos=["FreeRTOS/FreeRTOS-Kernel", "FreeRTOS/FreeRTOS", "FreeRTOS/FreeRTOS-Plus-TCP", "FreeRTOS/coreMQTT"]),144    src("riot-os", "RIOT OS", "riot-os.org", ["riot os", "riot-os"], categories=OSD, country="DE", repos=["RIOT-OS/RIOT"]),145    src("sel4", "seL4 Foundation", "sel4.systems", ["sel4", "sel4 microkernel", "camkes", "microkit"], categories=OSD, repos=["seL4/seL4", "seL4/microkit", "seL4/camkes-tool", "seL4/l4v", "seL4/sel4test", "seL4/rust-sel4", "seL4/lionsos", "seL4/sddf", "seL4/seL4_libs", "seL4/capdl"]),146    src("sdl", "SDL (Simple DirectMedia Layer)", "libsdl.org", ["sdl", "sdl2", "sdl3", "libsdl"], tier="B", categories=OSD, products=["SDL3", "SDL2", "SDL_image", "SDL_mixer", "SDL_ttf"], repos=["libsdl-org/SDL", "libsdl-org/SDL_image", "libsdl-org/SDL_mixer", "libsdl-org/SDL_ttf"]),147    src("glfw", "GLFW", "glfw.org", ["glfw"], categories=OSD, repos=["glfw/glfw"]),148    src("khronos", "Khronos Group", "khronos.org", ["khronos", "vulkan", "opengl", "gltf", "openxr", "opencl", "spir-v", "sycl", "webgl", "ktx"], tier="B", categories=["open-source", "developer", "standards"], country="US",149        products=["Vulkan", "glTF", "OpenXR", "OpenCL", "SPIR-V", "KTX", "MoltenVK", "Vulkan-ValidationLayers", "glslang", "SPIRV-Cross", "SPIRV-Tools", "OpenCL-SDK", "Vulkan-Loader", "Vulkan-Docs", "WebGL", "SYCL", "ANARI", "OpenGL Registry"],150        repos=["KhronosGroup/Vulkan-Headers", ("KhronosGroup/glTF", T), "KhronosGroup/OpenXR-SDK", "KhronosGroup/OpenCL-SDK", "KhronosGroup/SPIRV-Tools", "KhronosGroup/KTX-Software", "KhronosGroup/MoltenVK", "KhronosGroup/Vulkan-ValidationLayers", "KhronosGroup/glslang", "KhronosGroup/SPIRV-Cross", "KhronosGroup/Vulkan-Loader", ("KhronosGroup/Vulkan-Docs", T), ("KhronosGroup/WebGL", T), ("KhronosGroup/SYCL-Docs", T), "KhronosGroup/ANARI-SDK", ("KhronosGroup/OpenGL-Registry", T), "KhronosGroup/Vulkan-Tools", "KhronosGroup/Vulkan-Samples", "KhronosGroup/glTF-Sample-Viewer", "KhronosGroup/OpenXR-SDK-Source"],151        feeds=[("news feed", "https://www.khronos.org/news/feed", "RSS")]),152    src("wgpu", "wgpu / WebGPU implementations", "wgpu.rs", ["wgpu", "webgpu", "naga", "dawn", "gfx-rs"], categories=OSD, products=["wgpu", "naga", "Dawn", "WebGPU spec"], repos=["gfx-rs/wgpu", ("gpuweb/gpuweb", T), "gfx-rs/wgpu-native", ("google/dawn", T)]),153    src("winehq", "Wine (WineHQ)", "winehq.org", ["wine", "winehq", "proton", "dxvk", "vkd3d", "crossover", "wine staging", "bottles", "lutris", "heroic", "protonup", "winetricks"], tier="B", categories=OSAPP, products=["Wine", "Proton", "DXVK", "vkd3d-proton", "Wine Staging", "Bottles", "Lutris", "Heroic Games Launcher", "ProtonUp-Qt", "Winetricks", "GE-Proton", "UMU launcher", "Whisky", "Gamescope", "MangoHud", "ProtonDB"],154        repos=[("wine-mirror/wine", T), "ValveSoftware/Proton", "doitsujin/dxvk", "HansKristian-Work/vkd3d-proton", ("wine-staging/wine-staging", T), "bottlesdevs/Bottles", "lutris/lutris", "Heroic-Games-Launcher/HeroicGamesLauncher", "DavidoTek/ProtonUp-Qt", "Winetricks/winetricks", "GloriousEggroll/proton-ge-custom", "Open-Wine-Components/umu-launcher", "Whisky-App/Whisky", "ValveSoftware/gamescope", "flightlessmango/MangoHud", "ValveSoftware/steam-for-linux", "ValveSoftware/openvr", "ValveSoftware/steam-audio", "ValveSoftware/GameNetworkingSockets", "ValveSoftware/Fossilize"],155        feeds=[("news feed", "https://www.winehq.org/news/rss")]),156    src("libretro", "Libretro / RetroArch and emulators", "libretro.com", ["retroarch", "libretro", "dolphin emulator", "pcsx2", "duckstation", "ppsspp", "rpcs3", "melonds", "mgba", "snes9x", "azahar", "shadps4", "xemu", "flycast", "mupen64plus", "scummvm", "dosbox staging", "dosbox-x", "openmw", "es-de", "emulationstation", "retrodeck", "batocera", "recalbox", "lakka"], categories=["open-source", "gaming"],157        products=["RetroArch", "Dolphin", "PCSX2", "DuckStation", "PPSSPP", "RPCS3", "melonDS", "mGBA", "Snes9x", "Azahar", "shadPS4", "xemu", "Flycast", "Mupen64Plus", "ScummVM", "DOSBox Staging", "DOSBox-X", "OpenMW", "ES-DE", "RetroDECK", "Batocera", "Lakka", "Cemu", "Vita3K", "Sudachi", "Xenia"],158        repos=["libretro/RetroArch", ("dolphin-emu/dolphin", T), "PCSX2/pcsx2", "stenzek/duckstation", "hrydgard/ppsspp", "RPCS3/rpcs3", "melonDS-emu/melonDS", "mgba-emu/mgba", "snes9xgit/snes9x", "azahar-emu/azahar", "shadps4-emu/shadPS4", "xemu-project/xemu", "flyinghead/flycast", "mupen64plus/mupen64plus-core", "scummvm/scummvm", "dosbox-staging/dosbox-staging", "joncampbell123/dosbox-x", "OpenMW/openmw", "RetroDECK/RetroDECK", "batocera-linux/batocera.linux", "libretro/Lakka-LibreELEC", "cemu-project/Cemu", "Vita3K/Vita3K", "xenia-project/xenia", "xenia-canary/xenia-canary", "RetroPie/RetroPie-Setup", "libretro/libretro-super", "libretro/ludo", "libretro/libretro-database", "libretro/docs"]),159]160