{"id":46527321,"url":"https://github.com/hadishahpuri/nvimlaunch","last_synced_at":"2026-04-05T18:36:48.598Z","repository":{"id":341100475,"uuid":"1168901059","full_name":"hadishahpuri/nvimlaunch","owner":"hadishahpuri","description":"A lightweight Neovim plugin that lets you define, run, and manage multiple project-specific commands directly from your editor. By creating a .nvimlaunch file in your project root","archived":false,"fork":false,"pushed_at":"2026-02-28T00:27:07.000Z","size":2402,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-28T05:02:51.976Z","etag":null,"topics":["neovim","neovim-plugin","nvimlaunch","plugin","task-runner"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/hadishahpuri.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-27T23:29:35.000Z","updated_at":"2026-02-28T00:27:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"9fc30b4f-9e45-482a-b347-95c370d1f94c","html_url":"https://github.com/hadishahpuri/nvimlaunch","commit_stats":null,"previous_names":["hadishahpuri/nvimlaunch"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/hadishahpuri/nvimlaunch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadishahpuri%2Fnvimlaunch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadishahpuri%2Fnvimlaunch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadishahpuri%2Fnvimlaunch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadishahpuri%2Fnvimlaunch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hadishahpuri","download_url":"https://codeload.github.com/hadishahpuri/nvimlaunch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadishahpuri%2Fnvimlaunch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30244537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"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":["neovim","neovim-plugin","nvimlaunch","plugin","task-runner"],"created_at":"2026-03-06T21:00:28.268Z","updated_at":"2026-04-05T18:36:48.584Z","avatar_url":"https://github.com/hadishahpuri.png","language":"Lua","readme":"# nvimlaunch\n\nA Neovim plugin for launching and managing project shell commands from a per-project `.nvimlaunch` config file. Run long-lived processes (dev servers, build watchers, test runners), view their live output, and stop or restart them — all without leaving your editor.\n\n![demo](demo1.gif)\n\n## Features\n\n- Reads commands from a `.nvimlaunch` JSON file in your project root\n- Groups commands by label for easy organisation\n- Shows live status: `RUNNING`, `STOPPED`, `EXITED`, `FAILED`\n- Per-command output buffer with auto-scroll and automatic line-limit trimming\n- Start, stop, and restart individual commands, entire groups, or all at once\n- Auto-start commands when the panel opens\n- Per-command working directory and environment variables\n- Live uptime and exit code display in the panel\n- Notifications on unexpected command failures\n- Optional file logging for persistent output history\n- Fully configurable keymaps\n- Reload config without restarting Neovim\n- Automatic cleanup of all jobs when Neovim exits\n- Status refreshes every 500 ms automatically\n\n## Requirements\n\n- Neovim 0.9+\n- `bash` available in `$PATH`\n\n## Installation\n\n### lazy.nvim\n\n```lua\n{\n  \"hadishahpuri/nvimlaunch\",\n  keys = {\n    { \"\u003cleader\u003el\", \"\u003ccmd\u003eNvimLaunch\u003ccr\u003e\", desc = \"NvimLaunch\" },\n  },\n},\n```\n\nTo customise options:\n\n```lua\n{\n  \"hadishahpuri/nvimlaunch\",\n  opts = {\n    max_lines    = 5000,  -- max lines kept per output buffer (default: 5000)\n    log_to_file  = true,  -- write output to .nvimlaunch-logs/ (default: false)\n    keymaps = {           -- override any default keymap (optional)\n      stop = \"x\",\n    },\n  },\n  keys = {\n    { \"\u003cleader\u003el\", \"\u003ccmd\u003eNvimLaunch\u003ccr\u003e\", desc = \"NvimLaunch\" },\n  },\n},\n```\n\n### packer.nvim\n\n```lua\nuse \"hadishahpuri/nvimlaunch\"\n```\n\nThen call setup manually somewhere in your config:\n\n```lua\nrequire(\"nvimlaunch\").setup()\n```\n\n## Configuration\n\nCreate a `.nvimlaunch` file in the root of your project:\n\n```json\n{\n  \"commands\": [\n    {\n      \"name\": \"Start Dev Server\",\n      \"cmd\": \"pnpm dev\",\n      \"groups\": [\"Frontend\"],\n      \"cwd\": \"./frontend\",\n      \"auto_start\": true\n    },\n    {\n      \"name\": \"Build\",\n      \"cmd\": \"pnpm build\",\n      \"groups\": [\"Frontend\"]\n    },\n    {\n      \"name\": \"API Server\",\n      \"cmd\": \"python manage.py runserver\",\n      \"groups\": [\"Backend\"],\n      \"cwd\": \"./backend\",\n      \"env\": { \"DJANGO_DEBUG\": \"1\", \"PORT\": \"8000\" },\n      \"auto_start\": true\n    },\n    {\n      \"name\": \"Celery Worker\",\n      \"cmd\": \"./venv/bin/celery -A core worker -l INFO\",\n      \"groups\": [\"Backend\"],\n      \"cwd\": \"./backend\"\n    }\n  ]\n}\n```\n\n| Field        | Type                    | Required | Description                                                        |\n|--------------|-------------------------|----------|--------------------------------------------------------------------|\n| `name`       | `string`                | yes      | Display name shown in the panel                                    |\n| `cmd`        | `string`                | yes      | Shell command — runs via `bash -c`                                 |\n| `groups`     | `string[]`              | no       | One or more group labels for organising commands (default: `[\"Default\"]`) |\n| `cwd`        | `string`                | no       | Working directory — relative paths resolve from the `.nvimlaunch` file |\n| `env`        | `object`                | no       | Environment variables to set for this command                      |\n| `auto_start` | `boolean`               | no       | Start automatically when the panel opens (default: `false`)        |\n\nA command listed under multiple groups appears under each group in the panel.\n\n## Setup options\n\n| Option        | Type      | Default               | Description                                      |\n|---------------|-----------|-----------------------|--------------------------------------------------|\n| `max_lines`   | `number`  | `5000`                | Max lines kept per output buffer                 |\n| `log_to_file` | `boolean` | `false`               | Write all output to `.nvimlaunch-logs/` directory |\n| `log_dir`     | `string`  | `.nvimlaunch-logs/`   | Custom log directory (when `log_to_file` is true) |\n| `keymaps`     | `table`   | see below             | Override default keybindings                     |\n\n### Keymap defaults\n\n```lua\nrequire(\"nvimlaunch\").setup({\n  keymaps = {\n    run_restart  = \"\u003ccr\u003e\",      -- run or restart selected command\n    stop         = \"s\",         -- stop selected command\n    output       = \"o\",         -- open output window\n    start_all    = \"a\",         -- start all commands\n    start_group  = \"g\",         -- start all commands in current group\n    reload       = \"r\",         -- reload .nvimlaunch config\n    close        = { \"q\", \"\u003cEsc\u003e\" },  -- close panel\n    output_close = \"q\",         -- close output window\n    output_clear = \"c\",         -- clear output buffer\n  },\n})\n```\n\n## Usage\n\n### Commands\n\n| Command              | Description                          |\n|----------------------|--------------------------------------|\n| `:NvimLaunch`        | Open the command panel               |\n| `:NvimLaunchStopAll` | Stop all currently running commands  |\n\n### Panel keymaps\n\n| Key           | Action                                               |\n|---------------|------------------------------------------------------|\n| `j` / `↓`     | Move to next command                                 |\n| `k` / `↑`     | Move to previous command                             |\n| `\u003ccr\u003e`        | **Run** selected command (or **Restart** if running) |\n| `s`           | **Stop** selected command                            |\n| `o`           | Open **output** window for selected command          |\n| `a`           | **Start all** non-running commands                   |\n| `g`           | **Start group** — start all commands in current group|\n| `r`           | **Reload** `.nvimlaunch` config from disk            |\n| `q` / `\u003cEsc\u003e` | Close panel                                          |\n\n### Output window keymaps\n\n| Key | Action                              |\n|-----|-------------------------------------|\n| `q` | Close output and return to panel    |\n| `c` | Clear the output buffer             |\n\n## How it works\n\n```\nproject/\n├── .nvimlaunch           ← per-project config, not checked in (add to .gitignore)\n└── .nvimlaunch-logs/     ← output logs (when log_to_file is enabled)\n```\n\nEach command runs as a background job via Neovim's `jobstart`. Its stdout and stderr are streamed into a dedicated buffer that persists for the lifetime of the Neovim session. Restarting a command appends a separator to the existing buffer rather than clearing it, so you keep the full history.\n\nOutput buffers are capped at `max_lines` (default 5000). When the limit is reached, the oldest lines are automatically dropped so memory use stays bounded even for commands that produce continuous output.\n\nWhen `log_to_file` is enabled, all output is also written to `.nvimlaunch-logs/\u003ccommand-name\u003e.log` next to your `.nvimlaunch` config file, so you can review logs after restarting Neovim.\n\nThe panel floats in the centre of the screen and polls job status every 500 ms. Running commands show their uptime, and failed commands show their exit code:\n\n```\n╭────────────────────────────── NvimLaunch ──────────────────────────────╮\n│                                                                        │\n│  Frontend                                                              │\n│  ●  Start Dev Server                          2m30s  [RUNNING]         │\n│  ○  Build                                            [STOPPED]         │\n│                                                                        │\n│  Backend                                                               │\n│  ●  API Server                                1m15s  [RUNNING]         │\n│  ✗  Celery Worker                           exit(1)  [FAILED ]         │\n│                                                                        │\n│  \u003ccr\u003e Run  s Stop  o Out  a All  g Grp  r Reload  q Quit              │\n╰────────────────────────────────────────────────────────────────────────╯\n```\n\nAll running jobs are automatically stopped when Neovim exits, so there is no need for manual cleanup.\n\n## Tips\n\n- Add `.nvimlaunch` and `.nvimlaunch-logs/` to your global `.gitignore` if commands contain machine-specific paths, or commit `.nvimlaunch` if your team shares the same setup.\n- Use `auto_start` on commands you always need (e.g. dev servers) so they launch as soon as you open the panel.\n- Use `cwd` instead of `cd ... \u0026\u0026` prefixes in your commands for cleaner config.\n- Press `a` to spin up your entire dev environment in one keystroke.\n\n## License\n\nMIT\n","funding_links":[],"categories":["Code Runner"],"sub_categories":["Quickfix"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadishahpuri%2Fnvimlaunch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhadishahpuri%2Fnvimlaunch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadishahpuri%2Fnvimlaunch/lists"}