Skip to content

Open-source framework for maintained knowledge spaces

Build community knowledge that stays useful.

Grove turns community submissions into structured, searchable, and maintainable knowledge spaces—using portable files, Git-based review, and static publishing.

Astro renderer availableMIT licensedActive development

data/records/immich.yml

kind: project
name: Immich
category: media
repoUrl:
  https://github.com/immich-app/immich

Grove

  1. 01 Validate
  2. 02 Enrich
  3. 03 Review
  4. 04 Generate

Generated output

/projects/immichrecords.index.jsonsitemap.xmlllms-full.txt

One reviewed record, ready for people, search engines, and AI systems.

100Performance
100Accessibility
100Best Practices
100SEO

Measured on this landing page’s production build. Custom content and third-party integrations can affect individual scores.

$pnpm dlx @grove-dev/cli@latest new my-space

The maintenance problem

Lists are easy to start and difficult to maintain.

A README or small static site works until the collection becomes shared infrastructure. Growth turns publishing into recurring maintenance work.

Structure drifts

Fields, naming, and categories diverge as more people contribute.

Metadata goes stale

Archived projects and old releases remain visible without a repeatable refresh.

Review becomes cleanup

Maintainers normalize every submission before they can judge its value.

Discovery becomes software

Search, filters, routes, metadata, and sitemaps become another app to maintain.

Machines receive fragments

A README is readable, but it is not a predictable record set or generated context.

Maintenance lives in memory

Quality depends on someone remembering what needs review and why.

How Grove works

One lifecycle, with maintainers in control.

Grove automates repeatable checks and generation. It does not automate editorial judgment.

grove — maintained knowledge lifecycle

✓ A community suggestion

Collect

Grove does
Import a Markdown list or add a YAML record.
Maintainer controls
Maintainers define what belongs.
Output

data/records/<slug>.yml

$ pnpm exec grove import <awesome-list-url>

✓ An unstructured candidate

Structure

Grove does
Map fields to the selected blueprint and taxonomy.
Maintainer controls
Maintainers own categories and wording.
Output

A typed project, resource, or entity

$ kind: project
category: self-hosted

✓ Records + taxonomy files

Validate

Grove does
Check schemas, slugs, decisions, health, and references.
Maintainer controls
Warnings can become strict CI failures.
Output

Actionable validation results

$ pnpm exec grove validate --strict

✓ A project with a repository URL

Enrich

Grove does
Fetch activity, releases, license, topics, and archive state.
Maintainer controls
Synced signals remain reviewable data.
Output

Current repository metadata

$ pnpm exec grove sync github

✓ A proposed record change

Review

Grove does
Run checks in Actions and review the pull request.
Maintainer controls
A human makes the editorial decision.
Output

Accepted, revised, or rejected change

$ git diff data/records/immich.yml

✓ Reviewed records

Publish

Grove does
Build JSON, sitemap, AI-readable files, and Astro pages.
Maintainer controls
Choose the host, routes, and presentation.
Output

Static, cacheable output

$ pnpm exec grove generate && pnpm build

✓ A growing, aging collection

Maintain

Grove does
Report stale, inactive, archived, and incomplete records.
Maintainer controls
Humans decide to keep, hide, or remove.
Output

A focused maintenance report

$ pnpm exec grove cleanup stale --report

One source, multiple outputs

Maintain one record. Serve people and machines.

Grove generates a website for people, crawlable pages and a sitemap for search engines, structured JSON for other tools, and predictable context files for AI systems.

It does not promise rankings or AI visibility. It produces stable, inspectable formats from the same reviewed source.

  • static HTML
  • sitemap.xml
  • llms.txt
  • llms-full.txt

record.yml

name: Immich

kind: project

category: media

Website

Static pages

Search

sitemap.xml

AI

llms.txt

Tools

records.json

Production reference

Grove grew out of maintaining Open Apps.

Open Apps is a live directory with file-backed records, repository refresh, search, filters, detail pages, a sitemap, and AI-readable outputs. Grove turns that operating model into a reusable framework.

The live repository still carries local versions of this logic. Migration to the published Grove packages is the next reference-space milestone.

open-apps.dev.mn/apps
Open Apps

Explore real open-source apps

SearchFilter
ImmichMedia
active
JoplinProductivity
mature
LinkwardenKnowledge
active
taxonomysitemapllms.txt

What Grove can power

For collections that need to stay useful.

Grove is not only a directory template. Its record model supports three typed blueprints; the polished default frontend is available for project directories today.

Available today

Project directories

Developer tools, open-source apps, packages, services, or internal systems.

Schema available

Resource hubs

Guides, comparisons, explainers, learning collections, and curated links.

Schema available

Ecosystem maps

Organizations, products, communities, schools, and local ecosystem actors.

Import path

Maintained awesome lists

Import a Markdown collection, then add structure, review, and static discovery.

Architecture and status

Headless lifecycle. Replaceable frontend.

Core owns the source model and generated data. UI owns framework-neutral primitives. An adapter renders the site. Your repository keeps the content, brand, and editorial rules.

Supported today

  • Astro logo

    Astro

    V1 supported renderer

Planned adapters

  • SvelteKit logo

    SvelteKit

    Skeleton · planned V1.1

  • Next.js logo

    Next.js

    Skeleton · planned V1.2

The CLI refuses --framework {svelte|nextjs}until the adapter ships components, layouts, and a working template.

Package boundaries

  • @grove-dev/core

    Schema + lifecycle

  • @grove-dev/ui

    Headless primitives

  • @grove-dev/cli

    Scaffold + commands

Start with the Astro implementation.

Inspect the example, read the architecture, and build a space from plain files. No CMS or runtime database required.

$pnpm dlx @grove-dev/cli@latest new my-space