lynkr
Version:
Self-hosted LLM gateway and tier-routing proxy for Claude Code, Cursor, and Codex. Routes across Ollama, AWS Bedrock, OpenRouter, Databricks, Azure OpenAI, llama.cpp, and LM Studio with prompt caching, MCP tools, and 60-80% cost savings.
106 lines (105 loc) • 5.15 kB
JSON
{
"name": "lynkr",
"version": "9.5.0",
"description": "Self-hosted LLM gateway and tier-routing proxy for Claude Code, Cursor, and Codex. Routes across Ollama, AWS Bedrock, OpenRouter, Databricks, Azure OpenAI, llama.cpp, and LM Studio with prompt caching, MCP tools, and 60-80% cost savings.",
"main": "index.js",
"bin": {
"lynkr": "bin/cli.js",
"lynkr-setup": "scripts/setup.js"
},
"scripts": {
"postinstall": "node scripts/check-native.js",
"rebuild-native": "node scripts/check-native.js",
"prestart": "node -e \"if(process.env.HEADROOM_ENABLED==='true'&&process.env.HEADROOM_DOCKER_ENABLED!=='false'){process.exit(0)}else{process.exit(1)}\" && docker compose --profile headroom up -d --build headroom 2>/dev/null || echo 'Headroom skipped (disabled or Docker not running)'",
"start": "node index.js 2>&1 | npx pino-pretty --sync",
"stop": "node -e \"if(process.env.HEADROOM_ENABLED==='true'&&process.env.HEADROOM_DOCKER_ENABLED!=='false'){process.exit(0)}else{process.exit(1)}\" && docker compose --profile headroom down || echo 'Headroom skipped (disabled or Docker not running)'",
"dev": "nodemon index.js",
"lint": "eslint src index.js",
"test": "npm run test:unit && npm run test:performance",
"test:unit": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node --test test/routing.test.js test/hybrid-routing-integration.test.js test/web-tools.test.js test/passthrough-mode.test.js test/openrouter-error-resilience.test.js test/format-conversion.test.js test/azure-openai-config.test.js test/azure-openai-format-conversion.test.js test/azure-openai-routing.test.js test/azure-openai-streaming.test.js test/azure-openai-error-resilience.test.js test/azure-openai-integration.test.js test/openai-integration.test.js test/toon-compression.test.js test/llamacpp-integration.test.js test/resilience.test.js test/telemetry-routing.test.js test/memory/store.test.js test/memory/surprise.test.js test/memory/extractor.test.js test/memory/search.test.js test/memory/retriever.test.js test/distill.test.js test/large-payload.test.js test/code-mode.test.js test/prompt-cache-injection.test.js test/risk-analyzer.test.js test/interaction-block.test.js test/preflight.test.js test/token-reduction.test.js test/session-affinity.test.js test/model-registry-cost.test.js",
"test:memory": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node --test test/memory/store.test.js test/memory/surprise.test.js test/memory/extractor.test.js test/memory/search.test.js test/memory/retriever.test.js",
"test:new-features": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node --test test/passthrough-mode.test.js test/openrouter-error-resilience.test.js test/format-conversion.test.js",
"test:performance": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node test/hybrid-routing-performance.test.js && DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node test/performance-tests.js",
"test:benchmark": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node test/performance-benchmark.js",
"test:quick": "DATABRICKS_API_KEY=test-key DATABRICKS_API_BASE=http://test.com node --test test/routing.test.js",
"test:all": "npm run test:unit && npm run test:performance && npm run test:benchmark"
},
"keywords": [
"llm",
"llm-gateway",
"llm-proxy",
"llm-router",
"ai-gateway",
"tier-routing",
"claude",
"claude-code",
"anthropic",
"cursor",
"codex",
"openai",
"openrouter",
"ollama",
"llamacpp",
"lm-studio",
"bedrock",
"aws-bedrock",
"azure-openai",
"databricks",
"gemini",
"mcp",
"model-context-protocol",
"prompt-cache",
"self-hosted",
"litellm-alternative",
"portkey-alternative",
"copilot-alternative"
],
"author": "Vishal Veera Reddy",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/Fast-Editor/Lynkr.git"
},
"bugs": {
"url": "https://github.com/Fast-Editor/Lynkr/issues"
},
"homepage": "https://fast-editor.github.io/Lynkr/",
"engines": {
"node": ">=20.0.0"
},
"dependencies": {
"@azure/openai": "^2.0.0",
"@babel/parser": "^7.29.0",
"@babel/traverse": "^7.29.0",
"@toon-format/toon": "^2.1.0",
"cockatiel": "^3.2.1",
"compression": "^1.7.4",
"diff": "^5.2.0",
"dotenv": "^16.4.5",
"express": "^5.1.0",
"express-rate-limit": "^8.2.1",
"fast-glob": "^3.3.2",
"hnswlib-node": "^3.0.0",
"js-tiktoken": "^1.0.20",
"js-yaml": "^4.1.1",
"openai": "^6.14.0",
"pino": "^8.17.2",
"pino-http": "^8.6.0",
"pino-roll": "^4.0.0",
"undici": "^6.22.0"
},
"optionalDependencies": {
"better-sqlite3": "^12.6.2",
"dockerode": "^4.0.2",
"tree-sitter": "^0.21.1",
"tree-sitter-javascript": "^0.21.0",
"tree-sitter-python": "^0.21.0",
"tree-sitter-typescript": "^0.21.0"
},
"devDependencies": {
"@napi-rs/cli": "^3.6.2",
"eslint": "^8.57.0",
"nodemon": "^3.1.0",
"pino-pretty": "^10.2.0"
}
}