Open source for data and AI

749 projects · 100 relicensed

For AI agents

Open-source licenses as data: data and AI projects, every relicensing dated, foundations, companies and stars.

Point your agent here

https://repos.fru.dev/llms.txt
https://repos.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/projectscategory, foundation, license (open|source-available), sort (stars|velocity|name), limit (max 200), offsetProjects: license and whether it is open source, foundation, backing company, stars, stars per week, latest release
GET/api/projects/{slug}slugOne project with its full license history, forks, weekly star snapshots and recent changes
GET/api/licensessince (YYYY-MM-DD)Every relicensing, dated, with the LICENSE commit and the announcement
GET/api/companiessince (YYYY-MM-DD)Registry feed: backing companies with their companies.fru.dev slug, domain, page here and dated items
GET/api/changessince (ISO date or datetime), after (change id), limit (max 500)Append-only history: releases, license detection, renames, archives, foundation moves, velocity; each row has title, the project name
GET/api/sourcesnoneWhere projects are found (OSS Insight collections, GitHub topics, foundation lists, registry companies on GitHub): first seen, repositories named, projects added; grows every run
GET/api/searchq, limit (max 20)Ranked projects, companies and pages

/api/projects

curl -s "https://repos.fru.dev/api/projects?license=source-available"
{
 "count": 749,
 "projects": [
  {
   "slug": "deepseek-harness",
   "name": "deepseek-harness",
   "repo": "deepseek-ai/deepseek-harness",
   "github": "https://github.com/deepseek-ai/deepseek-harness",
   "category": "agents",
   "categoryName": "Agents and coding agents",
   "description": "DeepSeek Harness: Everything is a Plugin.",
   "license": "MIT",
   "licenseName": "MIT",
   "openSource": true,
   "licenseHistory": [],
   "foundation": null,
   "company": {
    "slug": "deepseek",
    "name": "DeepSeek",
    "domain": "deepseek.com",
    "inRegistry": true
   },
   "forkOf": null,
   "forkedBy": [],
   "stars": 277953,
   "starsPerWeek": 6052,
   "starsPerWeekSource": "GitHub weekly snapshots",
   "forks": 34129,
   "latestRelease": null,
   "archived": false,
   "verified": true,
   "provenance": {
    "firstSeen": "2026-09-25",
    "foundBy": "topic:ai-agents",
    "sourceTy
...

/api/projects/{slug}

curl -s "https://repos.fru.dev/api/projects/redis"
{
 "project": {
  "slug": "redis",
  "name": "Redis",
  "repo": "redis/redis",
  "github": "https://github.com/redis/redis",
  "category": "databases",
  "categoryName": "Databases and caches",
  "description": "For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.",
  "license": "RSALv2 OR SSPL-1.0 OR AGPL-3.0",
  "licenseName": "Redis Source Available License v2 or SSPL v1 or AGPL v3",
  "openSource": true,
  "licenseHistory": [
   {
    "date": "2024-03-20",
    "from": "BSD-3-Clause",
    "to": "RSALv2 OR SSPL-1.0",
    "fromName": "BSD 3-Clause",
    "toName": "Redis Source Available License v2 or SSPL v1",
    "note": "From Redis 7.4, a choice of the Redis Source Available License or SSPL; 7.2 and earlier stay BSD.",
    "commit": "https://github
...

/api/licenses

curl -s "https://repos.fru.dev/api/licenses?since=2023-01-01"
{
 "events": [
  {
   "date": "2026-06-08",
   "from": "Elastic-2.0",
   "to": "MIT",
   "fromName": "Elastic License 2.0",
   "toName": "MIT",
   "note": "The repo, renamed mindshub, returned to a plain MIT license.",
   "commit": "https://github.com/mindsdb/mindshub/commit/538460a632f14e8a3fa567be8da23ec8b7446b3c",
   "announcement": null,
   "announced": null
  },
  {
   "date": "2026-08-26",
   "from": "BSD-3-Clause",
   "to": "BSD-3-Clause+Weaviate-License",
   "fromName": "BSD 3-Clause",
   "toName": "BSD-3-Clause outside the wl directory, Weaviate License inside it",
   "note": "Weaviate added a wl directory under its own Weaviate License, toggled at build time, keeping the rest BSD.",
   "commit": "https://github.com/weaviate/weaviate/commit/8677d32e173ca5154ce5346b61f3f366e498aeaf",
   "announcement": null,
   "announced": null
  }
 ]
}

/api/companies

curl -s "https://repos.fru.dev/api/companies?since=2024-01-01"
{
 "companies": [
  {
   "slug": "hugging-face",
   "name": "Hugging Face",
   "domain": "huggingface.co",
   "in_registry": true,
   "url": "https://repos.fru.dev/companies/hugging-face",
   "projects": 17,
   "items": [
    {
     "date": "2026-10-06",
     "type": "release",
     "title": "diffusers v0.41.0",
     "url": "https://repos.fru.dev/projects/diffusers",
     "source_url": "https://github.com/huggingface/diffusers/releases/tag/v0.41.0"
    }
   ]
  }
 ]
}

/api/changes

curl -s "https://repos.fru.dev/api/changes?since=2026-09-01&limit=3"
{
 "changes": [
  {
   "id": 3536,
   "project": "graphiti",
   "field": "velocity",
   "old": "252",
   "new": "223",
   "changedAt": "2026-11-10T13:17:53Z",
   "source": "https://github.com/getzep/graphiti",
   "url": "https://repos.fru.dev/projects/graphiti"
  },
  {
   "id": 3535,
   "project": "grafana",
   "field": "velocity",
   "old": "141",
   "new": "130",
   "changedAt": "2026-11-10T13:17:52Z",
   "source": "https://github.com/grafana/grafana",
   "url": "https://repos.fru.dev/projects/grafana"
  }
 ]
}

/api/sources

curl -s "https://repos.fru.dev/api/sources"
{
 "sources": [
  {
   "key": "topic:llm",
   "kind": "topic",
   "url": "https://github.com/topics/llm",
   "name": "GitHub topic llm",
   "category": "llm-apps",
   "foundBy": "seed",
   "firstSeen": "2026-09-25 10:20:12",
   "lastOk": "",
   "yield": 59,
   "added": 59,
   "active": true
  }
 ]
}

/api/search

curl -s "https://repos.fru.dev/api/search?q=terraform"
{
 "q": "terraform",
 "results": [
  {
   "id": "p:terraform",
   "group": "items",
   "title": "Terraform",
   "href": "/projects/terraform"
  }
 ]
}

OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.

Add to your agent

System prompt line

For open-source data and AI projects (current license, every relicensing with dates, foundation, backing company, forks, stars), fetch https://repos.fru.dev/llms.txt and use https://repos.fru.dev/api/projects and https://repos.fru.dev/api/projects/{slug}. Cite "Repos (repos.fru.dev)".

Tool definition

{
  "name": "fru_repos",
  "description": "Look up an open-source data or AI project (DuckDB, Spark, Kafka, Redis, Elasticsearch, Terraform, vLLM, PyTorch and more): its license and every relicensing with dates, foundation, backing company, forks, stars and latest release. Source: Repos (repos.fru.dev).",
  "input_schema": {
    "type": "object",
    "properties": {
      "slug": {
        "type": "string",
        "description": "Project slug, e.g. redis, terraform, opentofu, elasticsearch, duckdb. List them with GET /api/projects."
      }
    },
    "required": [
      "slug"
    ]
  },
  "endpoint": "GET https://repos.fru.dev/api/projects/{slug}"
}

Python

import json, urllib.request

def project(slug: str) -> dict:
    """License, every relicensing, foundation and stars for one project."""
    url = f"https://repos.fru.dev/api/projects/{slug}"
    with urllib.request.urlopen(url, timeout=20) as r:
        return json.load(r)["project"]

p = project("redis")
print(p["licenseName"], [(e["date"], e["toName"]) for e in p["licenseHistory"]])

TypeScript

type Project = { slug: string; name: string; license: string; openSource: boolean; stars: number }

async function sourceAvailable(): Promise<Project[]> {
  const res = await fetch("https://repos.fru.dev/api/projects?license=source-available")
  if (!res.ok) throw new Error(`repos ${res.status}`)
  const { projects } = (await res.json()) as { projects: Project[] }
  return projects
}

console.log(await sourceAvailable())

Usage terms

  • Free to read. Please cite "Repos (repos.fru.dev)" with a link.
  • Responses are cached for an hour; the data changes daily.
  • Be polite: 60 requests a minute at most.
  • License summaries are for orientation, not legal advice.