{"id":24600796,"url":"https://github.com/fosskers/vend","last_synced_at":"2026-04-05T17:36:31.020Z","repository":{"id":271049500,"uuid":"911956340","full_name":"fosskers/vend","owner":"fosskers","description":"Manage your Common Lisp project dependencies.","archived":false,"fork":false,"pushed_at":"2025-09-06T23:05:50.000Z","size":324,"stargazers_count":90,"open_issues_count":5,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-09-26T16:38:14.833Z","etag":null,"topics":["common-lisp","dependency-management"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fosskers.png","metadata":{"files":{"readme":"README.org","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-04T09:53:39.000Z","updated_at":"2025-09-22T14:21:50.000Z","dependencies_parsed_at":"2025-01-05T04:25:33.935Z","dependency_job_id":"ff185cbb-e6fd-4ff4-aef8-03226038f988","html_url":"https://github.com/fosskers/vend","commit_stats":null,"previous_names":["fosskers/vend"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/fosskers/vend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fosskers%2Fvend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fosskers%2Fvend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fosskers%2Fvend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fosskers%2Fvend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fosskers","download_url":"https://codeload.github.com/fosskers/vend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fosskers%2Fvend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278525595,"owners_count":26001321,"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-10-05T02:00:06.059Z","response_time":54,"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":["common-lisp","dependency-management"],"created_at":"2025-01-24T14:01:33.791Z","updated_at":"2025-10-05T21:32:07.433Z","avatar_url":"https://github.com/fosskers.png","language":"Common Lisp","readme":"#+title: Vend\n\n=vend= is a dependency management tool for Common Lisp. The concept is simple:\n\n#+begin_quote\nJust vendor your dependencies!\n#+end_quote\n\n=vend='s focus is first and foremost on *simplicity*.\n\n- =vend get= to fetch dependencies directly into your project.\n- =vend repl= to open an isolated Lisp session.\n- =vend test= to run all your test suites.\n- =vend= only has 3 dependencies itself and compiles to a 400kb binary.\n- Neither Quicklisp (the tool) nor Quicklisp (the repository) are used.\n- Trivial integration with Sly / Slime / Lem / Slimv.\n\nIt's time for some peace of mind.\n\n* Table of Contents :TOC_5_gh:noexport:\n- [[#why-vendor-dependencies][Why vendor dependencies?]]\n  - [[#why-vend][Why vend?]]\n  - [[#best-practices][Best Practices]]\n- [[#installation][Installation]]\n  - [[#from-source][From Source]]\n  - [[#linux][Linux]]\n    - [[#arch][Arch]]\n- [[#editor-integration][Editor Integration]]\n  - [[#emacs][Emacs]]\n    - [[#doom-emacs][Doom Emacs]]\n  - [[#lem][Lem]]\n  - [[#vim][Vim]]\n- [[#usage][Usage]]\n  - [[#vend-get][vend get]]\n  - [[#vend-repl][vend repl]]\n  - [[#vend-check][vend check]]\n  - [[#vend-eval][vend eval]]\n  - [[#vend-graph][vend graph]]\n  - [[#vend-init][vend init]]\n  - [[#vend-search][vend search]]\n  - [[#vend-test][vend test]]\n    - [[#setup][Setup]]\n    - [[#integrations][Integrations]]\n- [[#ci-integration][CI Integration]]\n- [[#coverage][Coverage]]\n- [[#compiler-compatibility][Compiler Compatibility]]\n- [[#faq][FAQ]]\n  - [[#how-do-i-update-dependencies][How do I update dependencies?]]\n  - [[#how-can-i-build-executables-of-my-application][How can I build executables of my application?]]\n  - [[#how-do-i-refer-to-local-dependencies][How do I refer to local dependencies?]]\n  - [[#can-i-install-new-dependencies-while-vend-repl-is-running][Can I install new dependencies while =vend repl= is running?]]\n  - [[#does-this-use-git-submodules][Does this use git submodules?]]\n  - [[#why-ecl][Why ECL?]]\n\n* Why vendor dependencies?\n\nFast internet connections and centralised repositories have gotten us used to\nthe idea that dependencies are free; things we can pluck off a shelf and employ\nwith no risk. In languages like Javascript and Rust, it's not uncommon to have\nprojects with several hundred dependencies.\n\nBut are these really free? Have you inspected each one? Do you know and trust\nthe authors, as well as the pipeline that feeds you updates? Is your project\nstill guaranteed to compile in 5-10 years with no extra intervention? Can you\nwrite code on a plane? Can users reliably build your project after little more\nthan a =git clone=?\n\nThe truth is that your dependencies are your code. And quite literally so - they\nmight make up the majority of your final compiled artifact. By vendoring your\ndependencies directly into your project, you're taking responsibility for its\ntrue form.\n\n** Why vend?\n\nDependency management in Common Lisp has traditionally centred around [[https://www.quicklisp.org/beta/][Quicklisp]].\nA desire for access to more rapid package updates spawned [[https://ultralisp.org/][Ultralisp]]. The need\nfor version pinning and isolation birthed [[https://github.com/fukamachi/qlot][Qlot]]. The want for a better\ndistribution system brought us [[https://github.com/ocicl/ocicl][ocicl]].\n\nBut, could there be a simpler paradigm than just /downloading the code and\nputting it right there/?\n\nWith =vend=:\n\n- We need not perform bespoke installation scripts to get started.\n- We need not wait for Quicklisp to update.\n- We need not relegate all our systems to =~/common-lisp/=.\n- We need not worry about where ASDF is looking for systems.\n- We need not fret over tools performing strange internal overrides.\n- We need not manage extra config files or lockfiles.\n\nPlus, =vend= is actually an external tool with extra commands to help you inspect\nand manage your dependencies.\n\n** Best Practices\n\nFor library development, you are encouraged to:\n\n1. =vend get= to fetch dependencies.\n2. Add =vendored/*= to your =.gitignore=.\n\nAs this allows downstream users the most freedom when consuming your library.\n\nFor application development, you are encouraged to:\n\n1. =vend get= to fetch dependencies.\n2. =rm -rf vendored/**/.git/=\n3. Actively commit =vendored/= to git.\n\nBy committing these dependencies directly, it is never a mystery to your users\nhow your software should be provisioned.\n\n* Installation\n\nIn all cases, =vend= requires [[https://ecl.common-lisp.dev/][ECL]] to build and run. However, it can be used to\nmanage projects of any underlying compiler (see =vend repl=).\n\n** From Source\n\n=vend='s dependencies are all vendored, so it is enough to run:\n\n#+begin_example\nmake\nmake install\n#+end_example\n\nor manually:\n\n#+begin_example\necl --load build.lisp\nmv vend ~/.local/bin/\n#+end_example\n\n** Linux\n\n*** Arch\n\n=vend= is [[https://aur.archlinux.org/packages/vend][available on the AUR]] and can be installed with tools like [[https://github.com/fosskers/aura][Aura]]:\n\n#+begin_example\naura -A vend\n#+end_example\n\n* Editor Integration\n\nIf rough order of support / integration quality.\n\n#+begin_quote\n⚠ In all cases below, when starting a Lisp session, you must do so from the\ntop-level of the repository. Doing this from the =.asd= file makes it easy.\n#+end_quote\n\n** Emacs\n\n[[https://github.com/joaotavora/sly][Sly]] and [[https://github.com/slime/slime][Slime]] have variables for setting how Lisp REPLs should be launched:\n\n#+begin_src emacs-lisp\n(setq sly-default-lisp 'sbcl\n      sly-lisp-implementations '((sbcl  (\"vend\" \"repl\" \"sbcl\")  :coding-system utf-8-unix)\n                                 (ecl   (\"vend\" \"repl\" \"ecl\")   :coding-system utf-8-unix)\n                                 (abcl  (\"vend\" \"repl\" \"abcl\")  :coding-system utf-8-unix)\n                                 (clasp (\"vend\" \"repl\" \"clasp\") :coding-system utf-8-unix)))\n#+end_src\n\nAdjust as necessary for Slime.\n\nNote that adding =\"--dynamic-space-size\" \"4GB\"= to the =sbcl= list is useful for\nhungry projects like [[https://github.com/Shirakumo/trial][Trial]].\n\n*** Doom Emacs\n\nAs of 2025 January, you also need to manually disable =sly-stepper= and\n=sly-quicklisp= or they will interfere with the REPL starting:\n\n#+begin_src emacs-lisp\n(package! sly-stepper :disable t)\n(package! sly-quicklisp :disable t)\n#+end_src\n\n** Lem\n\n[[https://lem-project.github.io/][Lem]] is built and configured in Common Lisp and so offers excellent support for\nit. To start a REPL with =vend=:\n\n#+begin_example\nC-u M-x slime \u003cRET\u003e vend repl\n#+end_example\n\nAnd all your local systems will be available for loading.\n\n** Vim\n\n[[https://github.com/kovisoft/slimv][Slimv]] is a port of Slime from Emacs that utilises Slime's Swank backend server\nfor a very similar experience to Emacs. However, unlike Emacs which supports\nmultiple running Lisps, Slimv requires one standalone server that persists\nthrough Vim restarts.\n\nIf we want our dependencies in =vendored/= to be visible to Slimv, we must start\nits server manually from our project directory:\n\n#+begin_example\n\u003e cd project/\n\u003e vend repl ecl --load /home/YOU/.vim/pack/common-lisp/start/slimv/slime/start-swank.lisp\n#+end_example\n\nNow, =,c= (REPL Connect) within Vim will automatically find the running server,\nand you can load any system available in your project and in =vendored/=.\n\nIf you want to switch projects, you would need to quit the REPL server manually\nand restart it as above. You may also wish to set a shell alias or create a\nwrapper script for the long invocation shown above.\n\n* Usage\n** vend get\n\nFrom the top-level directory of your project, simply =vend get= to fetch all\ndependencies. They will be stored in =vendored/=. From here, they are yours. You\nare free to inspect, edit, and remove them as you please.\n\n#+begin_example\n\u003e vend get\n[vend] Downloading dependencies.\n[vend] Fetching FN-MACRO\n[vend] Fetching ARROW-MACROS\n[vend] Fetching TRANSDUCERS\n...\n[vend] Done.\n#+end_example\n\nIf during your usage of =vend= you discover a project that fails to resolve,\nplease [[https://github.com/fosskers/vend/issues][open an Issue]].\n\n** vend repl\n\nFrom the top-level directory of your project, =vend repl= opens a Lisp REPL while\ninstructing ASDF to only look within this directory tree for =.asd= files.\n\n#+begin_example\n\u003e vend repl\nThis is SBCL 2.4.9, an implementation of ANSI Common Lisp.\n\u003e (asdf:load-system :transducers)\n; Lots of compilation here.\nT\n\u003e\n#+end_example\n\nBy default, =vend repl= starts SBCL. You can easily override this:\n\n#+begin_example\n\u003e vend repl ecl\nECL (Embeddable Common-Lisp) 24.5.10\n\u003e (+ 1 1)\n#+end_example\n\n=vend repl= actually accepts any number of arguments, which is useful for adding\nadditional settings for hungry projects like [[https://github.com/Shirakumo/trial][Trial]]:\n\n#+begin_example\n\u003e vend repl sbcl --dynamic-space-size 4GB\n#+end_example\n\n** vend check\n\nSince your dependencies are your code, you should care about what's in there.\n\n#+begin_example\n\u003e vend check\nDYNAMIC-CLASSES is deprecated.\n  PGLOADER -\u003e CL-MARKDOWN -\u003e DYNAMIC-CLASSES\nTRIVIAL-BACKTRACE is deprecated.\n  PGLOADER -\u003e TRIVIAL-BACKTRACE\n#+end_example\n\nWoops! And while Common Lisp has a culture of \"done means done, not dead\", it's\nstill important to know what you're getting yourself into.\n\n** vend eval\n\nRun arbitrary Lisp code with all your dependencies available.\n\n#+begin_example\n\u003e vend eval \"(asdf:load-system :transducers) (in-package :transducers) (princ (transduce #'pass #'first '(1)))\"\n#+end_example\n\nYou can pass as many s-expressions as you want within the argument string.\nUseful also for scripting; you can load a known system and run any function\nwithin it.\n\n** vend graph\n\nAfter running =vend get=, you can inspect your full dependency graph via =vend graph=:\n\n#+begin_example\n\u003e vend graph\n#+end_example\n\nThis produces a =deps.dot= file, which can be viewed directly with =xdot=:\n\n#+begin_example\n\u003e xdot deps.dot\n#+end_example\n\nOr you can render it into a static PNG to send around to your friends to brag\nabout how few dependencies you're using:\n\n#+begin_example\n\u003e cat deps.dot | dot -Tpng -o deps.png\n#+end_example\n\nIn the case of =vend=, this produces an image like:\n\n[[file:deps.png]]\n\nIf the graph is too messy, you can \"focus\" it with an extra argument to =vend graph=:\n\n#+begin_example\nvend graph lem\n#+end_example\n\nIn the case of the large [[https://github.com/lem-project/lem][Lem]] project, this would display a graph of only the\ncore application and not its test suites, etc.\n\n** vend init\n\nIf you don't even have a project yet, =vend init= will create a simple skeleton\nfor you.\n\n#+begin_example\n\u003e vend init foo\n#+end_example\n\nThis generates:\n\n#+begin_example\nfoo\n├── foo.asd\n└── src\n    └── package.lisp\n#+end_example\n\n** vend search\n\nSearch the known systems via some term.\n\n#+begin_example\n\u003e vend search woo\nwoo    https://github.com/fukamachi/woo.git\nwookie https://github.com/orthecreedence/wookie.git\n#+end_example\n\n** vend test\n\nDetect and run testable systems. Yields a proper error code to the terminal if\nfailures are detected (good for CI!).\n\n#+begin_example\n\u003e vend test\n[vend] Running tests.\n...\n;; Summary:\nPassed:    68\nFailed:     0\nSkipped:    0\n#+end_example\n\nPass an additional arg to switch compilers:\n\n#+begin_example\n\u003e vend test ecl\n#+end_example\n\n*** Setup\n\nIn order for the test suite to be detected properly, your systems must look\nsomething like this:\n\n#+begin_src lisp\n(defsystem \"foo\"\n  :components ((:module \"src\" :components ((:file \"package\"))))\n  :in-order-to ((test-op (test-op :foo/tests))))\n\n(defsystem \"foo/tests\"\n  :depends-on (:foo :parachute)\n  :components ((:module \"tests\" :components ((:file \"tests\"))))\n  :perform (test-op (op c) (symbol-call :parachute :test :foo/tests)))\n#+end_src\n\n*** Integrations\n\n| Library   | Compatibility | Notes                                      |\n|-----------+---------------+--------------------------------------------|\n| [[https://github.com/Shinmera/parachute][Parachute]] | ✅           |                                            |\n| [[https://codeberg.org/cage/clunit2][Clunit2]]   | ✅           |                                            |\n| [[https://github.com/lispci/fiveam][FiveAM]]    | ✅*          | Test system must export =all-tests= function |\n| [[https://github.com/fukamachi/rove][Rove]]      | ❌           | Usage of =package-inferred-system=           |\n\nIf no specific (or an unknown) testing library is used, =vend= will fall back to a\nnaive =(asdf:test-system :foo)= call. However, this will not yield the correct\nerror code to the terminal in the event of test failures.\n\nIf you desire integration with libraries not listed here, please [[https://github.com/fosskers/vend/issues][open an Issue]].\n* CI Integration\n\nA [[https://github.com/marketplace/actions/common-lisp-testing][Github Action]] is available that utilises =vend=. In the simplest case:\n\n#+begin_src yaml\non:\n  push:\n    branches: [master]\n  pull_request:\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    name: Unit Tests\n    steps:\n      - name: Clone the Project\n        uses: actions/checkout@v4\n\n      - name: Set up Common Lisp\n        uses: fosskers/common-lisp@v1\n\n      - name: Test\n        run: |\n          vend test\n#+end_src\n\nSee its README for more information.\n\n* Coverage\n\n=vend= does not cover all of what's available on Quicklisp, but it does have\nsignificant enough coverage to resolve and compile a number of large, modern\nprojects:\n\n- Resolves: Does =vend get= complete?\n- Compiles: Does =(asdf:load-system :foo)= within =vend repl= complete?\n- Tests: Does =vend test= or =(asdf:test-system :foo)= within =vend repl= pass?\n\n| Project    | Resolves? | Compiles? | Tests? | Category       | Notes                               |\n|------------+-----------+-----------+--------+----------------+-------------------------------------|\n| [[https://github.com/Shirakumo/alloy][Alloy]]      | ✅       | ✅       | ✅    | UI             |                                     |\n| [[https://github.com/phantomics/april][April]]      | ✅       | ✅       | -      | Language       |                                     |\n| [[https://chiselapp.com/user/MistressRemilia/repository/benben/home][Benben]]     | ❌       | -         | -      | Music          | =vend= can't pull Fossil repos        |\n| [[https://github.com/ciel-lang/CIEL][CIEL]]       | ✅       | ✅*      | -      | Dev tool       | CCL only                            |\n| [[https://github.com/rabbibotton/clog][Clog]]       | ✅       | ✅       | -      | GUI            |                                     |\n| [[https://github.com/coalton-lang/coalton][Coalton]]    | ✅       | ✅       | ✅    | Language       |                                     |\n| [[https://github.com/bohonghuang/cl-gtk4][GTK4]]       | ✅       | ✅       | -      | GUI            |                                     |\n| [[https://github.com/Shirakumo/kandria][Kandria]]    | ✅       | ✅       | -      | Game           |                                     |\n| [[https://github.com/lem-project/lem][Lem]]        | ✅       | ❌       | -      | Editor         | Usage of =package-inferred-system=    |\n| [[https://github.com/Lisp-Stat/lisp-stat][Lisp-stat]]  | ✅       | ✅       | -      | Math           |                                     |\n| [[https://codeberg.org/McCLIM/McCLIM][McCLIM]]     | ✅       | ✅       | ✅    | GUI            |                                     |\n| [[https://github.com/fukamachi/mito][Mito]]       | ✅       | ✅       | ✅    | Database       |                                     |\n| [[https://codeberg.org/cage/nodgui][Nodgui]]     | ✅       | ✅       | ✅    | GUI            |                                     |\n| [[https://github.com/atlas-engineer/nyxt][Nyxt]]       | ✅       | ✅       | ✅    | Browser        |                                     |\n| [[https://github.com/ocicl/ocicl][OCICL]]      | ✅       | ✅       | -      | Dev tool       |                                     |\n| [[https://github.com/marijnh/Postmodern][Postmodern]] | ✅       | ✅       | ✅    | Database       |                                     |\n| [[https://github.com/fukamachi/qlot][Qlot]]       | ❌       | -         | -      | Dev tool       | Usage of =package-inferred-system=    |\n| [[https://github.com/quicklisp/quicklisp-client][Quicklisp]]  | ✅       | ❌       | -      | Dev tool       | System is unloadable: [[https://github.com/quicklisp/quicklisp-client/issues/125][(1)​]] [[https://github.com/quicklisp/quicklisp-client/issues/140][(2)​]]      |\n| [[https://github.com/Shirakumo/radiance][Radiance]]   | ✅       | ✅       | ✅    | Web            |                                     |\n| [[https://github.com/roswell/roswell][Roswell]]    | ✅       | ❌       | -      | Dev tool       | Requires =quicklisp= internally       |\n| [[https://github.com/stumpwm/stumpwm][StumpWM]]    | ✅       | ✅       | ✅    | Window Manager | SBCL-only                           |\n| [[https://codeberg.org/cage/tinmop][Tinmop]]     | ✅       | ✅       | -      | Chat           |                                     |\n| [[https://github.com/Shirakumo/trial][Trial]]      | ✅       | ✅       | ✅    | Gamedev        | [[https://github.com/Shirakumo/trial-assets/][trial-assets]] manual setup for demos |\n| [[https://github.com/fukamachi/woo][Woo]]        | ✅       | ✅       | ❌    | Web            | Usage of =package-inferred-system=    |\n\nIf during your usage of =vend= you discover a project that fails to resolve,\nplease [[https://github.com/fosskers/vend/issues][open an Issue]].\n\n* Compiler Compatibility\n\n=vend repl= and =eval= work with the following compilers:\n\n| Compiler  | Status | Notes                 |\n|-----------+--------+-----------------------|\n| SBCL      | ✅    |                       |\n| ECL       | ✅    |                       |\n| ABCL      | ✅    |                       |\n| CMUCL     | ✅    | From 2025-07 Snapshot |\n| Clasp     | ✅    |                       |\n| CCL       | ✅    |                       |\n| [[https://gitlab.com/gnu-clisp/clisp][Clisp]]     | ✅    | Doesn't support [[https://gitlab.com/gnu-clisp/clisp/-/merge_requests/3][PLN]]   |\n|-----------+--------+-----------------------|\n| Allegro   | ✅    |                       |\n| LispWorks | ❓    |                       |\n\n[[https://wiki.archlinux.org/title/Common_Lisp#Historical][Historical implementations]] are not considered.\n\n* FAQ\n\n** How do I update dependencies?\n\nThe intent is that by vendoring, you're taking responsibility for the \"true\nshape\" of your program. So, upgrading dependencies should always be a conscious\nchoice, done for a specific reason. Therefore there is no \"bulk update\" button.\n\nTo update a single dependency, you can =git pull= it specifically. If you've\nalready committed that dependency to your repo (as in the application case),\nyou're still able to:\n\n#+begin_example\nrm -rf vendored/old-dep\nvend get\nrm -rf vendored/old-dep/.git/\n#+end_example\n\nBut you're discouraged from doing this habitually.\n\n** How can I build executables of my application?\n\nSee [[file:build.lisp][build.lisp]] for how =vend= is built, which uses ECL. For SBCL, consider adding:\n\n#+begin_src lisp\n(sb-ext:save-lisp-and-die #p\"foobar\"\n                          :toplevel #'foobar:launch\n                          :executable t\n                          :compression t)\n#+end_src\n\nConsider also =vend eval=. For projects that have sufficient build commands\nalready set in their =.asd= files, this may be enough:\n\n#+begin_example\nvend eval \"(asdf:load-system :waytemp) (asdf:make :waytemp)\"\n#+end_example\n\n** How do I refer to local dependencies?\n\n=vend get= fetches dependencies it knows about via =git=, but sometimes you want to\nrefer to a dependency that already exists somewhere else on your local machine.\nTo trick =vend=, you can either:\n\n- Make a copy of the local project within =vendored/=.\n- Create a symlink inside =vendored/= that refers to the local project.\n\nThen, when running =vend get= it will see the folder you added and assume it had\nalready fetched it via a previous call to =vend get=. Likewise, =vend repl= should\n\"just work\".\n\n** Can I install new dependencies while =vend repl= is running?\n\nProbably not. At least, =vend= assumes that Quicklisp doesn't exist, and it tells\nASDF to only look for systems in the current directory tree. It's not clear what\na call to =(ql:quickload ...)= would do in that case.\n\nIf you want new packages available to =vend repl=, you can:\n\n- Manually clone them into =vendored/= (discouraged).\n- Add them to your =.asd= explicitly and call =vend get=.\n\nEither way, it's expected that you ensure that when a user freshly clones your\nrepository, runs =vend get=, and then loads your system, everything should work.\n\n** Does this use git submodules?\n\nNo. Submodules need to be recloned by your users, which is a weaker long-term\nguarantee than true vendoring. Submodules are also a pain in the neck to manage.\nWith =vend=, if you want to change and make new commits to vendored dependencies,\nyou're still free to do so.\n\n** Why ECL?\n\nTo avoid dependencies, =vend= uses a number of [[https://gitlab.com/embeddable-common-lisp/ecl][ECL]]-specific extensions. However,\nyou're free to use it to manage Lisp projects of any (modern) compiler. ECL\ntypically produces very small binaries; in the case of =vend= it's only a few\nhundred kilobytes, which eases distribution.\n","funding_links":[],"categories":["Recently Updated","Offline ##"],"sub_categories":["[Who Wants to Be a Millionare](https://www.boardgamecapital.com/who-wants-to-be-a-millionaire-rules.htm)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffosskers%2Fvend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffosskers%2Fvend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffosskers%2Fvend/lists"}