{"id":14779841,"url":"https://github.com/ciel-lang/CIEL","last_synced_at":"2025-09-14T22:31:10.954Z","repository":{"id":53899688,"uuid":"302637827","full_name":"ciel-lang/CIEL","owner":"ciel-lang","description":"CIEL Is an Extended Lisp. Scripting with batteries included.","archived":false,"fork":false,"pushed_at":"2024-09-16T15:27:04.000Z","size":631,"stargazers_count":333,"open_issues_count":22,"forks_count":16,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-09-22T07:02:40.661Z","etag":null,"topics":["batteries-included","common-lisp","repl","scripting"],"latest_commit_sha":null,"homepage":"http://ciel-lang.org","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ciel-lang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.markdown","funding":".github/FUNDING.yml","license":null,"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},"funding":{"github":["vindarel"],"ko_fi":"vindarel","liberapay":"vindarel"}},"created_at":"2020-10-09T12:41:32.000Z","updated_at":"2024-09-16T15:27:08.000Z","dependencies_parsed_at":"2023-09-26T12:59:15.936Z","dependency_job_id":"54cbca2f-d5a8-4068-8135-b6a1e69341d6","html_url":"https://github.com/ciel-lang/CIEL","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciel-lang%2FCIEL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciel-lang%2FCIEL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciel-lang%2FCIEL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciel-lang%2FCIEL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ciel-lang","download_url":"https://codeload.github.com/ciel-lang/CIEL/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233035247,"owners_count":18614974,"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":["batteries-included","common-lisp","repl","scripting"],"created_at":"2024-09-17T01:01:01.124Z","updated_at":"2025-09-14T22:31:10.937Z","avatar_url":"https://github.com/ciel-lang.png","language":"Common Lisp","funding_links":["https://github.com/sponsors/vindarel","https://ko-fi.com/vindarel","https://liberapay.com/vindarel"],"categories":["Recently Updated"],"sub_categories":["[Sep 15, 2024](/content/2024/09/15/README.md)"],"readme":"\n\u003cp\u003e\n  \u003ch2 align=\"center\"\u003e CIEL \u003c/h2\u003e\n  \u003ch3 align=\"center\"\u003e Common Lisp, batteries included. \u003c/h3\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ciel-lang.github.io/CIEL/#/\"\u003e\u003cb\u003e Home page \u003c/b\u003e\u003c/a\u003e |\n  \u003ca href=\"https://github.com/ciel-lang/CIEL/issues\"\u003e\u003cb\u003eIssues\u003c/b\u003e\u003c/a\u003e |\n  \u003ca href=\"https://github.com/ciel-lang/CIEL/discussions\"\u003e\u003cb\u003e Discussions\u003c/b\u003e\u003c/a\u003e |\n  \u003ca href=\"https://github.com/sponsors/vindarel\"\u003e Support us! \u003c/a\u003e |\n  \u003ca href=\"https://ko-fi.com/vindarel\"\u003e Buy me a coffee! \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/72611034?s=48\u0026v=4\" /\u003e\u003c/p\u003e\n\n# CIEL Is an Extended Lisp\n\nSTATUS: ~~highly~~ WIP, the API WILL change, but it is usable.\n\nI am dogfooding it in public and private projects.\n\n\n## What is this ?\n\nCIEL is a ready-to-use collection of libraries.\n\nIt's Common Lisp, batteries included.\n\nIt comes in 3 forms:\n\n- a binary, to run CIEL **scripts**: fast start-up times, standalone image, built-in utilities.\n- a simple full-featured **REPL** for the terminal.\n- a **Lisp library** and a **core image**.\n\nQuestions, doubts? See the [FAQ](docs/FAQ.md).\n\nNEW: we now have a Docker file.\n\n```lisp\n#!/usr/bin/env ciel\n\n(-\u003e \"https://fakestoreapi.com/products?limit=5\"\n  http:get\n  json:read-json\n  (elt 0)\n  (access \"title\"))\n```\n\n```bash\n$ chmod +x getproduct.lisp\n$ time ./getproduct.lisp\n\"Fjallraven - Foldsack No…ckpack, Fits 15 Laptops\"\n./getproduct.lisp  0.10s user 0.02s system 24% cpu 0.466 total\n```\n\n\n## Rationale\n\nOne of our goals is to make Common Lisp useful out of the box for\nmundane tasks -by today standards. As such, we ship libraries to handle\n**JSON** or **CSV**, as well as others to ease string\nmanipulation, to do pattern matching, to bring regular expressions, for\nthreads and jobs scheduling, for **HTTP** and URI handling,\nand so on. You can of course do all this\nwithout CIEL, but then you have to install the library manager first and\nload these libraries into your Lisp image every time you start it. Now,\nyou have them at your fingertips whenever you start CIEL.\n\nWe also aim to soften the irritating parts of standard Common Lisp. A\nfamous one, puzzling for beginners and non-optimal for seasoned lispers,\nis the creation of hash-tables. We include the `dict` function from the\nSerapeum library (which we enhanced further with a pull request):\n\n    CIEL-USER\u003e (dict :a 1 :b 2 :c 3)\n\nwhich prints:\n\n``` txt\n(dict\n :A 1\n :B 2\n :C 3\n)\n```\n\nIn standard Common Lisp, the equivalent is more convoluted:\n\n``` commonlisp\n  (let ((ht (make-hash-table :test 'equal)))\n    (setf (gethash :a ht) 1)\n    (setf (gethash :b ht) 2)\n    (setf (gethash :c ht) 3)\n    ht)\n;; #\u003cHASH-TABLE :TEST EQUAL :COUNT 3 {1006CE5613}\u003e\n;; (and we don't get a readable representation, so our example is not even equivalent)\n```\n\nMoreover, we bring:\n\n-   a **full featured REPL on the terminal** and\n-   **scripting capabilities**, see more below.\n\nSee *the documentation*.\n\n\u003c!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc --\u003e\n**Table of Contents**\n\n- [CIEL Is an Extended Lisp](#ciel-is-an-extended-lisp)\n    - [What is this ?](#what-is-this-)\n    - [Rationale](#rationale)\n- [Install](#install)\n    - [Download a binary. For scripting and the custom REPL.](#download-a-binary-for-scripting-and-the-custom-repl)\n- [Build](#build)\n    - [Dependencies](#dependencies)\n        - [System dependencies](#system-dependencies)\n        - [ASDF \u003e= 3.3.4 (local-nicknames)](#asdf--334-local-nicknames)\n        - [Install Quicklisp](#install-quicklisp)\n        - [Install our Lisp dependencies [depends on your Quicklisp version]](#install-our-lisp-dependencies-depends-on-your-quicklisp-version)\n    - [How to load CIEL with Quicklisp](#how-to-load-ciel-with-quicklisp)\n    - [How to build a CIEL binary and a core image](#how-to-build-a-ciel-binary-and-a-core-image)\n    - [Docker](#docker)\n- [Usage](#usage)\n    - [Scripting](#scripting)\n    - [Terminal REPL](#terminal-repl)\n    - [CIEL as a library: \"use\" :ciel in your Lisp systems](#ciel-as-a-library-use-ciel-in-your-lisp-systems)\n    - [Core image: configure your editor](#core-image-configure-your-editor)\n- [Libraries](#libraries)\n- [Language extensions](#language-extensions)\n- [Final words](#final-words)\n- [Misc: how to generate the documentation](#misc-how-to-generate-the-documentation)\n- [Contributors](#contributors)\n- [Lisp?!](#lisp)\n\n\u003c!-- markdown-toc end --\u003e\n\n\n# Install\n\n## Download a binary. For scripting and the custom REPL.\n\nGetting a binary allows you to run scripts, to play around in its\nterminal readline REPL. A binary doesn't allow you to use CIEL in your\nexisting Common Lisp editor (which still offers the most interactive\nand fast development experience).\n\nTo download a CIEL binary:\n\n- check our releases on https://github.com/ciel-lang/CIEL/releases/\n- we provide a binary from a CI for some systems: go to\n  \u003chttps://gitlab.com/vindarel/ciel/-/pipelines\u003e, download the latest\n  artifacts, unzip the `ciel-v0-{platform}.zip` archive and run `ciel-v0-{platform}/ciel`.\n\nCIEL is currently built for the following platforms:\n\n| Platform | System Version (release date) |\n|----------|-------------------------------|\n| Debian x86-64   | Debian Buster (2019)          |\n| void     | Void Linux glibc (2023-05), using [cinerion's Docker image](https://github.com/cinerion/sbcl-voidlinux-docker)  |\n\n\nStart it with `./ciel`.\n\nWith no arguments, you enter CIEL's terminal REPL.\n\nYou can give a CIEL script as first argument, or call a built-in one. See the scripting section.\n\n# Build\n\nTo build CIEL, both the binary and the core image, you need a couple\nsystem dependencies and you have to check a couple things on the side\nof lisp before proceeding.\n\nImplementations support:\n\n- CIEL is primarily developed and tested with SBCL.\n- it was reported (thanks fosskers) to compile on CCL.\n- ECL, ABCL and Allegro got issues.\n- LispWorks: cannot test due to the free version limitations. You're welcome to offer me a licence :)\n\n\n## Dependencies\n\n### System dependencies\n\nYou will probably need the following system dependencies (names for a\nDebian Bullseye system):\n\n    zlib1g-dev # from deploy for SBCL \u003c 2.2.6\n\nIf your SBCL version is \u003e= 2.2.6 you might want to use the more\nperformant `libzstd-dev` library instead of `zlib1g-dev`.\n\n    libzstd-dev # from deploy for SBCL \u003e= 2.2.6\n\nOn Linux:\n\n    inotify-tools\n\nOn MacOS:\n\n    fsevent\n\nYou can run: `make debian-deps` or `make macos-deps`.\n\n\n### ASDF \u003e= 3.3.4 (local-nicknames)\n\nASDF is the de-facto system definition facility of Common Lisp, that\nlets you define your system's metadata (author, dependencies, sources,\nmodules…).\n\nPlease ensure that you have ASDF \u003e= 3.3.4. It is for instance not the case with SBCL 2.2.9.\n\nAsk the version with our script:\n\n    $ make check-asdf-version\n\nor yourself with`(asdf:asdf-version)` on a Lisp REPL, or with\nthis one-liner from a terminal:\n\n    $ sbcl  --eval '(and (print (asdf:asdf-version)) (quit))'\n\nHere's a one-liner to update ASDF:\n\n    $ mkdir ~/common-lisp/\n    $ ( cd ~/common-lisp/ \u0026\u0026 wget https://asdf.common-lisp.dev/archives/asdf-3.3.5.tar.gz  \u0026\u0026 tar -xvf asdf-3.3.5.tar.gz \u0026\u0026 mv asdf-3.3.5 asdf )\n\n\n### Install Quicklisp\n\nTo build CIEL on your machine, you need the [Quicklisp library\nmanager](https://quicklisp.org/beta/). Quicklisp downloads and\ninstalls a library and its dependencies on your machine. It's very\nslick, we can install everything from the REPL without restarting our\nLisp process. It follows a \"distrubution\" approach, think Debian\nreleases, where libraries are tested to load.\n\nIt isn't the only library manager nowadays. See [https://github.com/CodyReichert/awesome-cl#library-manager](https://github.com/CodyReichert/awesome-cl#library-manager).\n\nInstall it:\n\n```sh\ncurl -O https://beta.quicklisp.org/quicklisp.lisp\nsbcl --load quicklisp.lisp --eval \"(quicklisp-quickstart:install)\" --quit\nsbcl --load ~/quicklisp/setup.lisp --eval \"(ql:add-to-init-file)\" --quit\n```\n\nIt creates a `~/quicklisp/` directory. Read its installation instructions to know more.\n\n### Install our Lisp dependencies [MANDATORY]\n\nOne library that we use is not included in Quicklisp (as of\n\u003c2025-02-03\u003e), [termp](https://github.com/vindarel/termp). It is a\nsmall and trivial library, you can clone it into your\n~/quicklisp/local-projects:\n\n    git clone https://github.com/vindarel/termp/ ~/quicklisp/local-projects/termp\n\nFor a number of other libraries we need the Quicklisp version of August, 2024, or later.\n\nFor those, you should either:\n* ensure that your Quicklisp version is recent enough (with `(ql:dist-version \"quicklisp\")`) and maybe update it (with `(ql:update-dist \"quicklisp\")`)\n* clone our dependencies locally with the command below.\n\nIf you need it, clone all the required dependencies into your `~/quicklisp/local-projects/` with this command:\n\n    make ql-deps\n\nNB: other tools exist for this (Qlot, ocicl…), we are just not using them yet.\n\n\n## How to load CIEL with Quicklisp\n\nYou need the dependencies above: Quicklisp, a good ASDF version, our up-to-date Lisp dependencies.\n\nThis shows you how to load CIEL and all its goodies, in order to use it in your current editor.\n\nCIEL is not on Quicklisp yet, but it is on [Ultralisp](https://ultralisp.org).\n\nSo, either clone this repository:\n\n    git clone https://github.com/ciel-lang/CIEL ~/quicklisp/local-projects/CIEL\n\nor install the Ultralisp distribution and pull the library from there:\n\n~~~lisp\n(ql-dist:install-dist \"http://dist.ultralisp.org/\" :prompt nil)\n~~~\n\nNow, in both cases, you can load the `ciel.asd` file (with `asdf:load-asd`\nor `C-c C-k` in Slime) and quickload \"ciel\":\n\n```lisp\nCL-USER\u003e (ql:quickload \"ciel\")\n```\n\nbe sure to enter the `ciel-user` package:\n\n```lisp\n(in-package :ciel-user)\n```\nyou now have access to all CIEL's packages and functions.\n\n\n## How to build a CIEL binary and a core image\n\nYou need the dependencies above: Quicklisp, a good ASDF version, our up-to-date Lisp dependencies.\n\nTo build CIEL's binary, use:\n\n    $ make build\n\nThis creates a `ciel` binary in the current directory.\n\nTo create a Lisp image:\n\n    $ make image\n    # or\n    $ sbcl --load build-image.lisp\n\nThis creates the `ciel-core` Lisp image.\n\nUnlike a binary, we can not distribute core images. It is dependent on the machine it was built on.\n\nThe way we use a core image is to load it at startup like this:\n\n    sbcl --core ciel-core --eval '(in-package :ciel-user)'\n\nIt loads fast and you have all CIEL libraries and goodies at your disposal.\n\nThen you have to configure your editor, like Slime, to have the choice of the Lisp image to\nstart. See below.\n\n\n## Docker\n\nWe have a Dockerfile. It uses SBCL 2.3.8. It works on Apple Silicon.\n\nBuild your CIEL image:\n\n    docker build -t ciel .\n\nThe executable is built in `/usr/local/bin/ciel` of the Docker image.\n\nGet a CIEL REPL:\n\n    docker run --rm -it ciel /usr/local/bin/ciel\n\nRun a script on your filesystem:\n\n    docker run --rm -it ciel /usr/local/bin/ciel path/to/your/lisp/script.lisp\n\nRun a built-in script:\n\n    docker run --rm -it ciel /usr/local/bin/ciel -s simpleHTTPserver\n\nSo, save you some typing with a shell alias:\n\n    alias ciel=\"sudo docker run --rm -it ciel /usr/local/bin/ciel\"\n\n\n# Usage\n\n## Scripting\n\n\u003e [!NOTE]\n\u003e this is brand new! Expect limitations and changes.\n\nGet the `ciel` binary and call it with your .lisp script:\n\n    $ ciel script.lisp\n\nUse the `#!/usr/bin/env ciel` shebang line to directly call your files:\n\n    $ ./script\n\nCall built-in scripts:\n\n    $ ciel -s simpleHTTPserver 9000\n\nSee available built-in scripts with `--scripts`.\n\nSee [the scripts documentation](https://ciel-lang.github.io/CIEL/#/scripting).\n\n## Terminal REPL\n\nCIEL ships a terminal REPL for the terminal which is more user friendly than the default SBCL one:\n\n- it has readline capabilities, meaning that the arrow keys work by\n  default (woohoo!) and there is a persistent history, like in any\n  shell.\n- it has **multiline input**.\n- it has **TAB completion**.\n  - including for files (after a bracket) and binaries in the PATH.\n- it handles errors gracefully: you are not dropped into the debugger\n  and its sub-REPL, you simply see the error message.\n- it has optional **syntax highlighting**.\n- it has a **shell pass-through**: try `!ls`.\n  - it runs **interactive commands**: try `!htop`, `!vim test.lisp`, `!emacs -nw test.lisp` or `!env FOO=BAR sudo -i top`.\n- it has **documentation lookup** shorthands: use `:doc symbol` or `?`\n  after a symbol to get its documentation: `ciel-user\u003e (dict ?`.\n- it has **developer friendly** macros: use `(printv code)` for an\n  annotated trace output.\n- it has an optional **lisp critic** that scans the code you enter at\n  the REPL for instances of bad practices.\n- and it defines some more helper commands.\n- it works on Slime (to a certain extent)\n\nThe CIEL terminal REPL loads the `~/.cielrc` init file at start-up if present. Don't load it with `--no-userinit`.\n\nSee more in [*the documentation*](https://ciel-lang.github.io/CIEL/#/repl).\n\n\u003e [!NOTE]\n\u003e Our terminal readline REPL does NOT replace a good Common Lisp editor. You have more choices than Emacs. Check them out! https://lispcookbook.github.io/cl-cookbook/editor-support.html\n\n\nRun `ciel` with no arguments:\n\n```bash\n$ ciel\n\nCIEL's REPL version 0.1.5\nRead more on packages with readme or summary. For example: (summary :str)\nSpecial commands:\n  %help =\u003e Prints this general help message\n  %doc =\u003e Print the available documentation for this symbol.\n  %? =\u003e Gets help on a symbol \u003csym\u003e: :? str\n  %w =\u003e Writes the current session to a file \u003cfilename\u003e\n  %d =\u003e Dumps the disassembly of a symbol \u003csym\u003e\n  %t =\u003e Prints the type of a expression \u003cexpr\u003e\n  %q =\u003e Ends the session.\n  %lisp-critic =\u003e Enable or disable the lisp critic. He critizes the code you type before compiling it.\n  %edit =\u003e Edit a file with EDITOR and evaluate it.\nPress CTRL-D or type :q to exit\n\nciel-user\u003e\n```\n\nIt is freely based on [sbcli](https://github.com/hellerve/sbcli).\n\n\n## CIEL as a library: \"use\" :ciel in your Lisp systems\n\nYou can install and `quickload` CIEL like any other Common Lisp library.\n\nTo use it in your project, create a package and \"use\" `ciel` in addition\nof `cl`:\n\n```lisp\n(defpackage yourpackage\n  (:use :cl :ciel))\n```\n\nYou can also use `generic-ciel`, based on\n[generic-cl](https://github.com/alex-gutev/generic-cl/) (warn:\ngeneric-ciel is less tested at the moment).\n\n~~~lisp\n    (defpackage yourpackage\n      (:use :cl :generic-ciel))\n~~~\n\ngeneric-cl allows us to define our `+` or `equalp` methods for our own\nobjects (and more).\n\n## Core image: configure your editor\n\nThe advantage of a core image is that it loads instantly, faster than\na `(ql:quickload \"ciel\")`. We'll ask our editor to start SBCL with our\nCIEL core image.\n\nWe'll configure SLIME for [multiple Lisps](https://common-lisp.net/project/slime/doc/html/Multiple-Lisps.html#Multiple-Lisps).\n\nYou need to add this to your Emacs init file:\n\n```lisp\n(setq slime-lisp-implementations\n      `((sbcl    (\"sbcl\" \"--dynamic-space-size\" \"2000\"))  ;; default. Adapt if needed.\n        (ciel-sbcl  (\"sbcl\" \"--core\" \"/path/to/ciel/ciel-core\" \"--eval\" \"(in-package :ciel-user)\"))))\n(setq slime-default-lisp 'ciel-sbcl)\n```\n\nand start a Lisp process with `M-x slime`.\n\nIf you didn't set `ciel-sbcl` as the default, then start the Lisp\nprocess with `M-- M-x slime` (alt-minus prefix), and choose\n`ciel-sbcl`. You can start more than one Lisp process from SLIME.\n\nThe Lisp process should start instantly, as fast as the default SBCL,\nyou won't wait for the quicklisp libraries to load.\n\n\n# Libraries\n\nWe import, use and document libraries to fill various use cases: generic\naccess to data structures, functional data structures, string\nmanipulation, JSON, database access, web, URI handling, iteration\nhelpers, type checking helpers, syntax extensions, developer utilities,\netc.\n\nSee the documentation.\n\nTo see the full list of dependencies, see the `ciel.asd` project\ndefinition or this [dependencies list](docs/dependencies.md).\n\n# Language extensions\n\nWe provide arrow macros, easy type declaratons in the function lambda\nlist, macros for exhaustiveness type checking, pattern matching, etc.\n\nSee [the documentation](https://ciel-lang.github.io/CIEL/#/language-extensions).\n\n# Final words\n\nThat was your life in CL:\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/before.jpeg\" /\u003e\u003c/p\u003e\n\nand now:\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/after-plus.jpeg\" /\u003e\u003c/p\u003e\n\n# Misc: how to generate the documentation\n\nSee `src/ciel.lisp` and run `(generate-dependencies-page-reference)`.\n\n# Contributors\n\nSpecial big thanks to @cinerion, [@themarcelor](https://github.com/themarcelor) and everyone who helped (@agam, @patrixl, @bo-tato…).\n\n\n# Lisp?!\n\n- [awesome-cl](https://github.com/CodyReichert/awesome-cl)\n- [the Common Lisp Cookbook](https://lispcookbook.github.io/cl-cookbook/)\n  - [editor support](https://lispcookbook.github.io/cl-cookbook/editor-support.html) (Emacs, Vim, VSCode, Atom, Pulsar, Jetbrains, Sublime, Jupyter notebooks…)\n- [Lisp companies](https://github.com/azzamsa/awesome-lisp-companies/)\n- blog posts:\n  - [these years in Lisp: 2022 in review](https://lisp-journey.gitlab.io/blog/these-years-in-common-lisp-2022-in-review/)\n  - [Python VS Common Lisp, workflow and ecosystem](https://lisp-journey.gitlab.io/pythonvslisp/)\n  - [A road to Common Lisp](https://stevelosh.com/blog/2018/08/a-road-to-common-lisp/)\n- 🎥 [Youtube showcases](https://www.youtube.com/@vindarel):\n  - [Debugging Lisp: fix and resume a program from any point in the stack](https://www.youtube.com/watch?v=jBBS4FeY7XM)\n  - [How to call a REST API in Common Lisp: HTTP requests, JSON parsing, CLI arguments, binaries](https://www.youtube.com/watch?v=TAtwcBh1QLg)\n- 🎥 my [Common Lisp course in videos: from novice to efficient programmer](https://www.udemy.com/course/common-lisp-programming/?referralCode=2F3D698BBC4326F94358), on the Udemy platform.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciel-lang%2FCIEL","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fciel-lang%2FCIEL","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciel-lang%2FCIEL/lists"}