Plugin recipes for Chelys, the local process host that installs and runs language servers and tools for TeXlyre.
A recipe is a self-describing JSON manifest hosted on GitHub Pages. Chelys fetches the registry index, lets you install a recipe, and runs it without any application rebuild. Each recipe declares the commands and Dockerfile it needs, plus a set of variables that are editable from the Chelys GUI.
- Recipes as uploadable data (JSON manifests + Dockerfiles)
- GUI-settable variables (e.g.
language,motherTongue) substituted into commands, environment, Dockerfiles, and injected client config - System, Docker, and Connect install modes per recipe
npm install chelys-recipesimport { recipesApi } from 'chelys-recipes';
// Get every recipe grouped by type
const api = await recipesApi.getRecipes();
// Search recipes
const results = await recipesApi.searchRecipes('grammar');
// Get recipes by type
const servers = await recipesApi.getRecipesByCategory('lsp');
// Fetch a full manifest
const manifest = await recipesApi.getManifest(results[0]);import { RecipesApiClient } from 'chelys-recipes';
const client = new RecipesApiClient('https://my-custom-url.com');
recipesApi.clearCache();const client = new RecipesApiClient(baseUrl?);Methods:
getRecipes(useCache?): every recipe grouped by typesearchRecipes(query): search by name, description, tags, or authorgetRecipesByCategory(categoryId): recipes for a given typegetCategories(): available recipe typesgetManifest(entry): fetch a full recipe manifestclearCache(): clear the internal cache
const response = await fetch('https://texlyre.github.io/chelys-recipes/api/recipes.json');
const data = await response.json();API response structure:
{
"lastUpdated": "2025-06-01T10:00:00Z",
"version": "1.0.0",
"categories": [
{
"id": "lsp",
"name": "Language Servers",
"description": "Language Server Protocol recipes",
"recipes": [
{
"id": "harper-ls",
"type": "lsp",
"name": "Harper LS",
"description": "Offline grammar and spelling checker.",
"tags": ["grammar", "spell-check"],
"author": "TeXlyre",
"version": "1.0.0",
"lastUpdated": "2025-06-01T10:00:00Z",
"manifestUrl": "https://texlyre.github.io/chelys-recipes/recipes/lsp/harper-ls/recipe.json"
}
]
}
]
}Each recipe lives at recipes/<type>/<recipe-id>/recipe.json with an optional
Dockerfile and README.md alongside it. The manifest mirrors the Chelys
Recipe shape and adds a variables array. Use ${variableKey} placeholders
anywhere a value should be filled in from the GUI: run arguments, Docker run
args, environment values, the Dockerfile, transportUrl, and clientConfig.
{
"id": "example-ls",
"type": "lsp",
"name": "Example LS",
"description": "A short description of at least twenty characters.",
"tags": ["example"],
"author": "You",
"version": "1.0.0",
"lastUpdated": "2025-06-01T10:00:00Z",
"variables": [
{ "key": "wsPort", "label": "WebSocket port", "kind": "number", "default": "7000" }
],
"env": {},
"modes": [
{
"kind": "system",
"installSteps": [
{ "label": "Install server", "command": "cargo", "args": ["install", "example-ls", "--locked"] }
],
"runCommand": { "command": "lsp-ws-proxy", "args": ["-l", "127.0.0.1:${wsPort}", "--", "example-ls"] }
},
{ "kind": "connect" }
],
"typeConfig": {
"configId": "example-ls",
"fileExtensions": ["tex"],
"languageIdMap": { "tex": "latex" },
"transportUrl": "ws://localhost:${wsPort}",
"contentLength": false,
"clientConfig": "{\"rootUri\":\"file:///\",\"workspaceFolders\":[]}"
}
}text: free-form stringnumber: numeric inputboolean: checkbox (substituted astrue/false)select: fixed choice; requires anoptionsarray
system:installStepsthen a long-runningrunCommanddocker:buildSteps, animage, and either an inlinedockerfileor adockerfileUrlChelys fetches and writes beforedocker buildconnect: attach to a server already running on the configured port
- LTeX LS Plus (
recipes/lsp/ltex-ls-plus): LanguageTool grammar and spell checker withlanguageandmotherTongueoptions. - Harper LS (
recipes/lsp/harper-ls): offline, privacy-first grammar and spelling checker with a configurable Englishdialect.
git clone https://github.com/texlyre/chelys-recipes.git
cd chelys-recipes
npm install
npm run validate # validate all recipes
npm run build:api # generate api/recipes.json
npm run build # build the TypeScript library
npm run pages-exampleMIT