Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
64c93e8
feat: add AI Libraries page to website
jbrinkman Jul 17, 2026
740f330
fix: use forced symlinks and proper quoting in init script
jbrinkman Aug 10, 2026
5d30c03
feat: Add integrations and clients page to replace ai page
rileydes-improving Sep 11, 2026
f0e6b44
Remove 21 catalog entries that don't meet the inclusion bar
Jonathan-Improving Sep 12, 2026
4ce89fa
Reword the licence rule so it stops contradicting itself
Jonathan-Improving Sep 14, 2026
a0e3c84
Content audit: apply field corrections and add 7 verified entries
Jonathan-Improving Sep 15, 2026
1a761e2
Content audit: final field edits, plus restore a field I dropped
Jonathan-Improving Sep 15, 2026
f25d92a
Drop LocalAI: its install requirement can't be expressed in the schema
Jonathan-Improving Sep 15, 2026
bd0acb3
Document docsNote properly so submitters know when and how to use it
Jonathan-Improving Sep 15, 2026
f146b49
Add vLLM Semantic Router
Jonathan-Improving Sep 15, 2026
6e631e3
Adjusting design based of feedback
rileydes-improving Sep 16, 2026
4efc95c
Temp Pipeline for Feedback
rileydes-improving Sep 16, 2026
a30b7bc
Cleaning up comment verboseness to match repository patterns
rileydes-improving Sep 16, 2026
ab9d26e
Enhance Libraries catalog with search term highlighting and improved …
rileydes-improving Sep 16, 2026
0fd47c0
Add pull request template link for adding libraries
rileydes-improving Sep 18, 2026
72778c4
Adding valkey glide php client
rileydes-improving Sep 18, 2026
b11242d
Refactor card layout in libraries catalog for consistent height throu…
rileydes-improving Sep 18, 2026
c0141f0
Merging Reviewer Feedback from Test Branch
rileydes-improving Sep 18, 2026
1989d78
Fix spring-data-valkey's installCommand so one line reaches Valkey
Jonathan-Improving Sep 21, 2026
1057868
Address Code Rabbit Suggestions and cleaning up development pipeline
rileydes-improving Sep 21, 2026
5fbe28b
Addressing remaining greptile/code rabbit comments
rileydes-improving Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/add_library.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
<!-- Thanks for contributing to valkey.io! Everything you need is in this template. -->

### What are you adding?

<!-- Name of the client, tool, or integration, and a one-line summary. -->

- [ ] Client library (`type: "clients"` → `_data/libraries/clients/`)
- [ ] Tool or framework (`type: "tools"` → `_data/libraries/integrations/`)
- [ ] AI or agent library (`type: "ai"` → `_data/libraries/integrations/`)

### Entry details

- **Name:**
- **Repository:**
- **License (SPDX):**
- **Maintained by the Valkey project (`isFirstParty`)?** yes / no

---

## How entries work

Each entry is a single flat JSON file under `_data/libraries/`, in one of two
group directories, and registered by path in `_data/libraries/manifest.json`:

- Client libraries → `_data/libraries/clients/` (appear on the **Clients** page)
- Tools & frameworks (`type: "tools"`) → `_data/libraries/integrations/`
- AI & agent libraries (`type: "ai"`) → `_data/libraries/integrations/`

Tools and AI libraries both live in `integrations/` and are shown together on
the **Integrations** page. The `type` value must match the directory the file
lives in. Name the file after your entry, lowercase and hyphenated
(e.g. `valkey-glide-python.json`). The CI build loads every file in the manifest
and **fails on any malformed or invalid entry**, so problems are caught before merge.

## Fields

Entries are flat JSON objects. Use only the fields below — extra fields are
ignored by the templates and may fail review.

**Required for all entries:**

- `name` (string) — official name; also used to derive the card slug.
- `description` (string) — 1–2 factual, vendor-neutral sentences, ideally under ~200 characters.
- `type` (string) — exactly one of `"clients"`, `"tools"`, or `"ai"`, matching the directory.
- `license` (string) — SPDX identifier, e.g. `"Apache-2.0"`, `"MIT"`, `"BSD-3-Clause"`. Must be an OSI-approved open-source license.
- `repository` (string) — public source-code repository URL.
- `isFirstParty` (boolean) — `true` for repos under `github.com/valkey-io/`, otherwise `false`.

**Required for clients — `features` (9-character bit-string):**

A string of nine `"0"`/`"1"` characters; `"1"` means supported. Positions, in order:

| Position | Key | Feature |
| --- | --- | --- |
| 1 | `replica` | Replica reads |
| 2 | `backoff` | Retry & backoff |
| 3 | `pubsub` | Pub/Sub restoration |
| 4 | `scan` | SCAN family |
| 5 | `latency` | Low-latency routing |
| 6 | `az` | AZ affinity |
| 7 | `csc` | Client-side caching |
| 8 | `capa` | Advanced capabilities |
| 9 | `pool` | Connection pooling |

Example: `"111101000"` = replica, backoff, pubsub, scan, and az supported; the rest not.

**Optional fields:**

- `language` (string) — primary language. Required in practice for clients and any library imported into code (ORM adapters, SDK wrappers, agent frameworks). Omit for standalone tools. If a library ships separate packages per language, create one entry per language.
- `tags` (array of strings) — for filtering and discovery. Clients use `["Clients"]`; tools and AI libraries use category tags. Prefer an existing tag:
- Clients: `["Clients"]`
- Tools: `CLI & GUI`, `Deploy & operate`, `Proxies & gateways`, `Frameworks & ORMs`, `Queues & background jobs`, `Data movement`, `Observability & testing`
- AI: `RAG & retrieval`, `Agent memory`, `Agent frameworks`, `Inference & serving`
- `documentation` (string or null) — official docs/landing URL, or `null` if none exists.
- `docsNote` (string) — reviewer-only note explaining a `null` `documentation`; not rendered. Use only with `documentation: null`, and include a `(checked YYYY-MM-DD)` date. Do not present an unverified URL as documentation.
- `installCommand` (string) — primary install command, e.g. `"pip install valkey-glide"`.
- `isGlide` (boolean) — marks a Valkey GLIDE client.

## Example entries

Client (`_data/libraries/clients/valkey-glide-python.json`):

```json
{
"name": "Valkey GLIDE Python",
"language": "Python",
"license": "Apache-2.0",
"description": "Designed for reliability, optimized performance, and high-availability. GLIDE is a multi-language client with one shared Rust core and per-language bindings.",
"repository": "https://github.com/valkey-io/valkey-glide/tree/main/python",
"documentation": "https://glide.valkey.io/getting-started/quickstart/?lang=python",
"isFirstParty": true,
"installCommand": "pip install valkey-glide",
"features": "111101000",
"isGlide": true,
"type": "clients",
"tags": ["Clients"]
}
```

Integration (`_data/libraries/integrations/valkey-cli.json`):

```json
{
"name": "valkey-cli",
"language": "C",
"license": "BSD-3-Clause",
"description": "The interactive terminal client shipped with valkey-server, with cluster-aware routing, --scan, --bigkeys and latency diagnostics built in.",
"repository": "https://github.com/valkey-io/valkey",
"documentation": "https://valkey.io/topics/cli/",
"isFirstParty": true,
"type": "tools",
"tags": ["CLI & GUI"]
}
```

## Register in the manifest

Add the file's path (relative to `_data/libraries/`) to the matching array in
`_data/libraries/manifest.json` — `clients` or `integrations`. List it exactly
once; manifest order is render order. A file not in the manifest will not appear
on the site.

---

### Submission checklist

- [ ] Valid JSON, placed in the directory matching its `type`, and registered once in `_data/libraries/manifest.json`.
- [ ] All required fields present: `name`, `description`, `type`, `license`, `repository`, `isFirstParty` — plus a 9-character `features` string for clients.
- [ ] Tested compatible with Valkey 7.2 or above.
- [ ] OSI-approved open-source license.
- [ ] Repository is publicly accessible, active within the last 6 months, and has a README with basic usage.
- [ ] Description is factual and vendor-neutral.
- [ ] Commits are signed per the DCO using `--signoff`.

By submitting this pull request, I confirm that my contribution is made under the terms of the BSD-3-Clause License.
124 changes: 124 additions & 0 deletions LOCAL_TESTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Local Testing for Valkey Website

This guide explains how to build and test the Valkey website locally, including all content from the `valkey-doc` repository.

## Prerequisites

1. **Zola** - Static site generator
```bash
# macOS
brew install zola

# Or download from https://www.getzola.org/documentation/getting-started/installation/
```

2. **Local copies of repositories** - All repos should be in the same parent directory:
```
~/projects/
├── valkey-io.github.io/ (this repo)
└── valkey-doc/ (documentation repo)
```

## Quick Start

### 1. Clone required repositories

```bash
cd ~/projects # or your preferred directory

# Clone the website repo (if you haven't already)
git clone https://github.com/valkey-io/valkey-io.github.io.git

# Clone the documentation repo
git clone https://github.com/valkey-io/valkey-doc.git
```

### 2. Build with external content

From the `valkey-io.github.io` directory:

```bash
# Run the init script to create symlinks
./build/init-topics-and-clients.sh ../valkey-doc/topics \
../valkey-doc/clients

# Start Zola development server with extra watch path for client symlinks
zola serve --extra-watch-path build-clients
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
```

### 3. View the site

Open your browser to `http://127.0.0.1:1111/`

## What the init script does

The `init-topics-and-clients.sh` script:
1. Creates symlinks in the website directory:
- `build-topics` → `../valkey-doc/topics`
- `build-clients` → `../valkey-doc/clients`
2. Creates stub files for topics (allows Zola to generate pages)
3. Copies topic images to the content directory

## Viewing specific pages

- **Client Libraries**: http://127.0.0.1:1111/clients/
- **Documentation Topics**: http://127.0.0.1:1111/topics/
- **Commands**: http://127.0.0.1:1111/commands/ (requires additional setup - see main README.md)

## Making changes

### Editing page content

1. Edit the relevant file under `content/` for introductory text
2. Edit the matching template under `templates/` for layout changes
3. Zola will automatically reload

## Troubleshooting

### Zola fails to start

1. Check Zola is installed: `zola --version`
2. Make sure you're in the `valkey-io.github.io` directory
3. Check for syntax errors in config.toml

### Changes not appearing

1. Stop Zola (Ctrl+C)
2. Re-run the init script (symlinks may have been removed)
3. Restart Zola: `zola serve --extra-watch-path build-clients`
4. Hard refresh browser (Cmd+Shift+R or Ctrl+Shift+R)

## Building for production

To build static files without running a server:

```bash
# Run init script first
./build/init-topics-and-clients.sh ../valkey-doc/topics \
../valkey-doc/clients

# Build static site
zola build

# Output will be in ./public/
```

## Cleaning up

To remove generated files and symlinks:

```bash
# Remove symlinks
rm -f build-topics build-clients

# Remove generated topic stub files
rm -f content/topics/*.md

# Remove Zola build output
rm -rf public/
```

## Additional Resources

- [Zola Documentation](https://www.getzola.org/documentation/getting-started/overview/)
- [Main README](README.md) - Full website build instructions
55 changes: 55 additions & 0 deletions _data/lang_colors.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Language chip colors for the client/integration catalog (see templates/libraries.html).
#
# Colors are the per-language "color" values from GitHub Linguist's
# lib/linguist/languages.yml, which is MIT-licensed data (colors, not logos), so
# there is no trademark exposure — unlike bundling brand logos. See:
# https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml
# https://github.com/github-linguist/linguist/blob/main/LICENSE (MIT)
#
# Each entry is keyed by the language slug the template computes from the
# `language` field (lowercased; `#` -> `-sharp`, `.` and spaces -> `-`), e.g.
# "C#" -> "c-sharp", "Node.Js" -> "node-js".
#
# Fields:
# color — chip background (Linguist hex).
# fg — chip text/monogram color; use "#000" on light chips, "#fff" on dark.
# mono — 1-2 char monogram shown in the badge.
#
# Note: Node.js is a runtime, not a Linguist language, so it has no Linguist
# color of its own; we reuse the JavaScript color (#f1e05a) for the "node-js"
# slug since Node.js clients are JavaScript/TypeScript.

[python]
color = "#3572A5"
fg = "#fff"
mono = "Py"

[node-js]
color = "#f1e05a"
fg = "#000"
mono = "Js"

[java]
color = "#b07219"
fg = "#fff"
mono = "Jv"

[c-sharp]
color = "#178600"
fg = "#fff"
mono = "C#"

[go]
color = "#00ADD8"
fg = "#fff"
mono = "Go"

[php]
color = "#4F5D95"
fg = "#fff"
mono = "PHP"

[swift]
color = "#F05138"
fg = "#fff"
mono = "Sw"
16 changes: 16 additions & 0 deletions _data/libraries/clients/iovalkey.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "iovalkey",
"language": "Node.Js",
"license": "MIT",
"description": "A friendly fork of a widely used Node.js client, tracking Valkey. Promise-based API, Lua scripting and cluster support.",
"repository": "https://github.com/valkey-io/iovalkey",
"documentation": null,
"isFirstParty": true,
"docsNote": "No dedicated Valkey-branded docs site; only redis.github.io API docs from the ioredis lineage exist (checked 2026-09-03).",
"installCommand": "npm install iovalkey",
"features": "111000001",
"type": "clients",
"tags": [
"Clients"
]
}
15 changes: 15 additions & 0 deletions _data/libraries/clients/predis.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "predis",
"language": "PHP",
"license": "MIT",
"description": "A pure-PHP client with no extension to compile. Supports clustering, replication and transparent key prefixing.",
"repository": "https://github.com/predis/predis",
"documentation": "https://github.com/predis/predis/wiki",
"isFirstParty": false,
"installCommand": "composer require predis/predis",
"features": "110000000",
"type": "clients",
"tags": [
"Clients"
]
}
15 changes: 15 additions & 0 deletions _data/libraries/clients/redisson.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "redisson",
"language": "Java",
"license": "Apache-2.0",
"description": "A Java client that exposes Valkey as familiar JDK structures — Map, Lock, Queue, ExecutorService — plus client-side caching.",
"repository": "https://github.com/redisson/redisson",
"documentation": "https://redisson.pro/docs/",
"isFirstParty": false,
"installCommand": "implementation 'org.redisson:redisson:4.+'",
"features": "111100111",
"type": "clients",
"tags": [
"Clients"
]
}
16 changes: 16 additions & 0 deletions _data/libraries/clients/valkey-glide-csharp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "Valkey GLIDE C#",
"language": "C#",
"license": "Apache-2.0",
"description": "Designed for reliability, optimized performance, and high-availability. The .NET client over the shared Rust core, with StackExchange.Redis API compatibility.",
"repository": "https://github.com/valkey-io/valkey-glide-csharp",
"documentation": "https://glide.valkey.io/getting-started/quickstart/?lang=csharp",
"isFirstParty": true,
"installCommand": "dotnet add package Valkey.Glide",
"features": "111100001",
"isGlide": true,
"type": "clients",
"tags": [
"Clients"
]
}
16 changes: 16 additions & 0 deletions _data/libraries/clients/valkey-glide-go.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "Valkey GLIDE Go",
"language": "Go",
"license": "Apache-2.0",
"description": "Designed for reliability, optimized performance, and high-availability. GLIDE is a multi-language client with one shared Rust core and per-language bindings.",
"repository": "https://github.com/valkey-io/valkey-glide/tree/main/go",
"documentation": "https://glide.valkey.io/getting-started/quickstart/?lang=go",
"isFirstParty": true,
"installCommand": "go get github.com/valkey-io/valkey-glide/go",
"features": "111101000",
"isGlide": true,
"type": "clients",
"tags": [
"Clients"
]
}
Loading