{"id":13850717,"url":"https://github.com/anonimitoraf/skerrick","last_synced_at":"2025-08-22T00:32:38.933Z","repository":{"id":43454074,"uuid":"443252378","full_name":"anonimitoraf/skerrick","owner":"anonimitoraf","description":"REPL-driven development for NodeJS","archived":false,"fork":false,"pushed_at":"2024-03-28T12:49:33.000Z","size":68489,"stargazers_count":103,"open_issues_count":3,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-12-12T20:49:44.715Z","etag":null,"topics":["emacs","interactive","interactive-development","javascript","js","lisp","node","nodejs","repl","repl-driven","repl-driven-development","vscode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anonimitoraf.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}},"created_at":"2021-12-31T04:29:27.000Z","updated_at":"2024-09-05T18:09:00.000Z","dependencies_parsed_at":"2024-01-18T09:58:00.104Z","dependency_job_id":"5b384f89-468f-48bb-9f8a-19b0ee6b1f83","html_url":"https://github.com/anonimitoraf/skerrick","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonimitoraf%2Fskerrick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonimitoraf%2Fskerrick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonimitoraf%2Fskerrick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonimitoraf%2Fskerrick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anonimitoraf","download_url":"https://codeload.github.com/anonimitoraf/skerrick/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230542289,"owners_count":18242332,"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","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":["emacs","interactive","interactive-development","javascript","js","lisp","node","nodejs","repl","repl-driven","repl-driven-development","vscode"],"created_at":"2024-08-04T20:01:28.063Z","updated_at":"2024-12-20T06:07:24.298Z","avatar_url":"https://github.com/anonimitoraf.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Skerrick\n\n\u003e noun: **skerrick**  \n\u003e   the smallest bit.  \n\u003e   _\"there's not a skerrick of food in the house\"_\n\n**REPL-driven development for NodeJS**\n  * Programming in tiny increments - Apply patches to your running program without having to restart it\n  * [Tell me more!](https://purelyfunctional.tv/lesson/what-is-repl-driven-development/)\n\nInspired by (check them out!):\n  * SLIME: The Superior Lisp Interaction Mode for Emacs\n  * CIDER: The Clojure(Script) Interactive Development Environment that Rocks!\n  * Calva: integrated REPL powered environment for enjoyable and productive Clojure and ClojureScript development in Visual Studio Code\n\n## :warning: DISCLAIMERS :warning:\n* THIS PROJECT IS IN ALPHA STATE! I WOULD APPRECIATE IT IF YOU REPORT ANY BUGS/ISSUES YOU FIND. MAYBE EVEN CONTRIBUTE PATCHES/FIXES IF YOU HAVE THE TIME ;)\n* The code is currently very messy and not well-written. I just wanted to get a working prototype out of the door as quickly as I could. I will be improving the implementation over time. Feel free to give me suggestions if you have any!\n\n## VSCode\n\n:sparkles: [Documentation](/vscode/README.md) :sparkles:\n\n## Emacs\n\n[![MELPA](https://melpa.org/packages/skerrick-badge.svg)](https://melpa.org/#/skerrick)\n\n### Demos\n\n#### Basic\n![Basic usage](/demos/emacs/basic.gif)\n\n#### Module support\n![Module support](/demos/emacs/modules.gif)\n\n### Requirements\n* `node`/`npm` installed and accessible by Emacs\n\n### Installation\n`skerrick` is in MELPA\n\nOr, if you're using Quelpa:\n```\n(quelpa '(skerrick :repo \"anonimitoraf/skerrick\" :fetcher github))\n\n;; Needs to be run on the very first install of skerrick. Or when you want to upgrade.\n(unless (equal (shell-command-to-string \"type skerrick\") \"skerrick not found\\n\")\n  (skerrick-install-or-upgrade-server-binary))\n\n;; Should be run in a JS buffer; it is buffer specific.\n;; (skerrick-start-server)\n\n;; Now main function, entry point is:\n;; M-x skerrick-eval-region\n```\n\nIt may also be helpful to provide a quick keyboard shortcut. E.g., `C-x C-e` evaluates ELisp, so let's mimic that for JS buffers:\n```\n;; Evaluate a region, if any is selected; otherwise evaluate the current line.\n(bind-key\n \"C-x C-e\"  (lambda ()\n              (interactive)\n              (if (use-region-p)\n                  (skerrick-eval-region)\n                (beginning-of-line)\n                (set-mark-command nil)\n                (end-of-line)\n                (skerrick-eval-region)\n                (pop-mark)))\n 'js-mode-map)\n```\n\n### Configuration\n| Configuration | Desc | Default |\n|:--|:--|:--|\n| `skerrick-server-port` | Port to run the `skerrick` server on | 4321 |\n| `skerrick-result-overlay-face` | Face used to display evaluation results | |\n| `skerrick-result-overlay-char-count-trunc` | Results with char count longer than this are truncated | 120 |\n| `skerrick-pop-result-buffer-for-stdout` | Show result buffer if stdout is non-empty | t |\n| `skerrick-pop-result-buffer-for-stderr` | Show result buffer if stderr is non-empty | t |\n\n### Usage\n| Command | Desc |\n|:--|:--|\n| `skerrick-install-or-upgrade-server-binary` | Needs to be run on the very first install of skerrick. Or when you want to upgrade. |\n| `skerrick-start-server` | Starts the server. Note that your current buffer will be evaluated, so you probably want to run this command while being on your program's entry point file. |\n| `skerrick-stop-server` | Stops the server. |\n| `skerrick-eval-region` | Evaluates the selected region. Shows the eval result as an overlay. Stdout/stderr get written to the buffer `*skerrick-stdout-stderr*`. |\n\n## Write a plug-in for your editor/IDE!\n\n[![NPM](https://nodei.co/npm/skerrick.png)](https://nodei.co/npm/skerrick/)\n\n* `npm install -g skerrick` - this installs the bin `skerrick`  \n\n  Invoked like so: `skerrick PORT ENTRYPOINT_FULL_FILE_PATH`\n\n* The REST protocol is as simple as it can be:\n  * POST to `/eval` payloads of shape:\n    ```json\n      {\n        \"modulePath\": \"/full/path/to/file/of/code/to/eval\",\n        \"code\": \"const x = 42; console.log(x); x + x;\"\n      }\n    ```\n  * Response shape:\n    ```json\n      {\n        \"result\": \"84\",\n        \"stdout\": \"42\",\n        \"stderr\": \"\"\n      }\n    ```\n\n* :rocket: Tell me about your plug-in so I can add it to this README! :rocket:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonimitoraf%2Fskerrick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanonimitoraf%2Fskerrick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonimitoraf%2Fskerrick/lists"}