{"id":31444104,"url":"https://github.com/thefrontside/lspx","last_synced_at":"2025-09-30T20:58:10.760Z","repository":{"id":279997466,"uuid":"939567382","full_name":"thefrontside/lspx","owner":"thefrontside","description":"language server multiplexer, supervisor, and interactive shell","archived":false,"fork":false,"pushed_at":"2025-07-28T20:04:56.000Z","size":59,"stargazers_count":55,"open_issues_count":7,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-28T22:09:11.065Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thefrontside.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-26T18:43:40.000Z","updated_at":"2025-07-28T20:04:58.000Z","dependencies_parsed_at":"2025-02-28T21:16:50.448Z","dependency_job_id":"2881a7bf-7caa-45b8-8f9b-34ea3701b3e3","html_url":"https://github.com/thefrontside/lspx","commit_stats":null,"previous_names":["thefrontside/lspx"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/thefrontside/lspx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Flspx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Flspx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Flspx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Flspx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thefrontside","download_url":"https://codeload.github.com/thefrontside/lspx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thefrontside%2Flspx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277754252,"owners_count":25871358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-30T02:00:09.208Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-30T20:58:09.458Z","updated_at":"2025-09-30T20:58:10.756Z","avatar_url":"https://github.com/thefrontside.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lspx\n\n`lspx` is a language server multiplexer, supervisor, and interactive shell.\n\n```\nUsage: lspx [options]\n\nOptions:\n  -h, --help              Show help\n  -i, --interactive       start an interactive session with a multiplexed system (default: false)\n      --lsp \u003cstring ...\u003e  start and muliplex a server with specified command string                [required]\n```\n\n## multiplexer\n\nThere are often many language servers active for a given file. For example, if\nyou are editing some TypeScript for the web, you might want to run some\ncombination of the following:\n\n- _typescript_ (ts) resolve symbols, provide refactorings\n- _tailwind_ (css) provides completion for tailwind utility clases\n- _eslint_ (ts) highlight warnings and errors based on project linting settings\n\nIn order to provide this union of functionality, IDEs like VSCode must manage\nthree separate language server processes and then handle the dispatch and\nsynchronization of all edits and user inputs to each one. What this means in\npractice is that in the example above, if you hover over a symbol, that hover\nshould be sent to each of the typescript, tailwind, and eslint servers. Then any\nhints, overlays that any of them have should be collated and displayed at that\npoint. This is a complex process, and furthermore it is required that it be\nduplicated inside every single IDE that wants to use more than one language\nserver per buffer.\n\n`lspx` combines the capabilities of any number language servers into one, so\nthat each IDE only needs to interact with a single LSP connection.\n\nTo run the three language servers above in unison:\n\n```\nlspx --lsp \"typescript-language-server --stdio\" --lsp \"tailwindcss-language-server --stdio\" --lsp \"eslint-lsp --stdio\"\n```\n\n## supervisor\n\n//TODO\n\n`lspx` manages the language server processes that it proxies and will attempt to\nrestart them if they fail. How many times and at what interval is configurable.\n\n## shell\n\n`lspx` allows you to send commands by to the set of lsp, and print their\nresponses\n\n```\nlspx --lsp \"deno lsp\" --lsp \"tailwindcss-language-server\" --interactive\n\nlspx\n|\n+-\u003e deno lsp\n+-\u003e tailwindcss-language-server --stdio\n\nLSP\u003e initialize({ \"capabilities\": {} })\n```\n\n## Development\n\nRequires [Deno](https://deno.land) \u003e= 2.0\n\n### compile\n\n```\ndeno task compile\n```\n\n### test\n\n```\ndeno task test\n```\n\n### dispatch\n\nThe actual logic of matching requests to servers and merging the responses\nhappens in [dispatch.ts](./lib/dispatch.ts), so if you're looking to extend the\nfunctionality, that's a great place to start.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthefrontside%2Flspx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthefrontside%2Flspx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthefrontside%2Flspx/lists"}