{"id":23785022,"url":"https://github.com/spy16/slurp","last_synced_at":"2025-09-06T02:32:45.023Z","repository":{"id":49202986,"uuid":"303425128","full_name":"spy16/slurp","owner":"spy16","description":"Slurp is a highly customisable LISP toolkit for Go applications. 💻","archived":false,"fork":false,"pushed_at":"2023-05-07T02:37:52.000Z","size":168,"stargazers_count":33,"open_issues_count":8,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-06-18T21:30:33.634Z","etag":null,"topics":["embedded-scripting-language","go","golang","lisp","scripting-engine"],"latest_commit_sha":null,"homepage":"","language":"Go","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/spy16.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2020-10-12T14:55:12.000Z","updated_at":"2023-10-31T22:20:47.000Z","dependencies_parsed_at":"2024-06-18T21:11:32.916Z","dependency_job_id":"f4a385e6-e7fb-43fc-b8db-058c147e8322","html_url":"https://github.com/spy16/slurp","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy16%2Fslurp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy16%2Fslurp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy16%2Fslurp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy16%2Fslurp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spy16","download_url":"https://codeload.github.com/spy16/slurp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232081602,"owners_count":18469913,"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":["embedded-scripting-language","go","golang","lisp","scripting-engine"],"created_at":"2025-01-01T13:13:50.343Z","updated_at":"2025-01-01T13:13:50.969Z","avatar_url":"https://github.com/spy16.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Slurp\n\n\n[![GoDoc](https://godoc.org/github.com/spy16/slurp?status.svg)](https://godoc.org/github.com/spy16/slurp)\n[![Go Report Card](https://goreportcard.com/badge/github.com/spy16/slurp)](https://goreportcard.com/report/github.com/spy16/slurp)\n[![Code Change](https://github.com/spy16/slurp/actions/workflows/code_change.yml/badge.svg)](https://github.com/spy16/slurp/actions/workflows/code_change.yml)\n\nSlurp is a highly customisable, embeddable LISP toolkit for `Go` applications.\n\n- [Slurp](#slurp)\n  - [Why Slurp](#why-slurp)\n  - [Features](#features)\n  - [Usage](#usage)\n  - [Documentation](#documentation)\n\n## Why Slurp\n\n![I've just received word that the Emperor has dissolved the MIT computer science program permanently.](https://imgs.xkcd.com/comics/lisp_cycles.png)\n\nSlurp is for developers who want to design and embed an interpreted language inside of a Go program.\n\nSlurp provides composable building-blocks that make it easy to design a custom lisp, even if you've never written an interpreter before.  Since Slurp is written in pure Go, your new language can be embedded into any Go program by importing it — just like any other library.\n\n\u003e **NOTE:**  Slurp is _NOT_ an implementation of a particular LISP dialect.\n\u003e \n\u003e It provides pieces that can be used to build a LISP dialect or can be used as a scripting layer.\n\nSlurp is designed around three core values:\n\n1. **Simplicity:**  The library is small and has few moving parts.\n2. **Batteries Included:**  There are no external dependencies and little configuration required.\n3. **Go Interoperability:**  Slurp can call Go code and fully supports Go's concurrency features.\n\nWe hope that you will find Slurp to be powerful, useful and fun to use.  We look forward to seeing what you build with it!\n\n\n## Features\n\n* Highly customizable, safe and powerful reader/parser through\n  a read table (Inspired by [Clojure](https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java)) (See [Reader](#reader))\n* Immutable datatypes including: nil, bool, string, int \u0026 float,\n  character, keyword, symbol, list, vector \u0026 map.\n* Multiple number formats supported: decimal, octal, hexadecimal,\n  radix and scientific notations.\n* Full unicode support. Symbols, keywords etc. can include unicode\n  characters (Example: `find-δ`, `π` etc.) and `🧠`, `🏃` etc. (yes,\n  smileys too).\n* Character Literals with support for:\n  1. simple literals  (e.g., `\\a` for `a`)\n  2. special literals (e.g., `\\newline`, `\\tab` etc.)\n  3. unicode literals (e.g., `\\u00A5` for `¥` etc.)\n* Full interoperability with Go:  call native Go functions/libraries, and manipulate native Go datatypes from your language.\n* Support for macros.\n* Easy to extend. See [Wiki](https://github.com/spy16/slurp/wiki/Customizing-Syntax).\n* Tiny \u0026 powerful REPL package.\n* Zero dependencies (outside of tests).\n\n## Usage\n\nSlurp requires Go 1.14 or higher.  It can be installed using `go get`:\n\n```bash\ngo get -u github.com/spy16/slurp\n```\n\nWhat can you use it for?\n\n1. Embedded script engine to provide dynamic behavior without requiring re-compilation of your application ([example](./examples/simple/main.go)).\n2. Business rule engine exposing specific, composable rules ([example](./examples/rule-engine/main.go)).\n3. To build DSLs.\n4. To build your own LISP dialect ([example](https://github.com/wetware/ww)).\n\nRefer [./examples](./examples) for more usage examples.\n\n## Documentation\n\nIn addition to the GoDocs, we maintain in-depth tutorials on the GitHub wiki.  The following\npages are good starting points:\n\n1. [Getting Started](https://github.com/spy16/slurp/wiki/Getting-Started)\n2. [Customizing Syntax](https://github.com/spy16/slurp/wiki/Customizing-Syntax#Custom-Parsing)\n3. [Customizing Evaluation](https://github.com/spy16/slurp/wiki/Customizing-Syntax#Custom-Evaluation)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspy16%2Fslurp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspy16%2Fslurp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspy16%2Fslurp/lists"}