Atomic Quicklisp Installer

A simple, atomic* script to install or update Quicklisp easily.
Archive** updated daily at 12:00 AM UTC.
* meaning installation would not just finish incomplete like (quicklisp-quickstart:install) does.
** currently using a prepacked archive of quicklisp on Cloudflare to eliminate network issues
** but now with --origin you can download directly from offcial sources with curl and HTTPS.

Quick Install (Non-Interactive)

Fresh Install

Linux/macOS: curl -fsSL https://ql-init.oil6.net/install.py | python3 - --fresh --origin

Windows: curl.exe -fsSL https://ql-init.oil6.net/install.py | python.exe - --fresh --origin

# NOTE: without --origin, you will download from a private Cloudflare backup/archive
More Options
Flag Description Example (Piped)
--fresh Fresh install (overwrites everything, including downloaded packages) curl ... | python3 - --fresh
--update Update core Quicklisp files only (keeps installed packages) curl ... | python3 - --update
--download-only Download zip file only for manual extraction curl ... | python3 - --download-only
--origin Download everything from Quicklisp offcial sources, but with curl and https curl ... | python3 - --download-only

Need help with system/package installation too?

curl -fsSL https://ql-init.oil6.net/ql-helper.py | python3 - uuid
How it works?


$ curl -fsSL https://ql-init.oil6.net/ql-helper.py | python3 - uuid
+--- ============================ ---+
| Parsing Quicklisp Metadata |
+--- ============================ ---+

 ✓ Metadata parsed successfully

+--- ======================== ---+
| Resolving Dependencies |
+--- ======================== ---+

Round 1: Expanding 1 systems...
Round 2: Expanding 2 systems...
Round 3: Expanding 2 systems...
Round 4: Expanding 6 systems...
Round 5: Expanding 1 systems...
 ✓ Dependency resolution complete after 5 rounds

 ✓ Found 9 unique projects: alexandria, bordeaux-threads, global-vars, ironclad, mgl-pax, trivial-features, trivial-garbage, trivial-utf-8, uuid

+--- ====================== ---+
| Downloading Archives |
+--- ====================== ---+

[1/9] Downloading mgl-pax (mgl-pax-20250622-git.tgz)...
[2/9] Downloading bordeaux-threads (bordeaux-threads-v0.9.4.tgz)...
[3/9] Downloading ironclad (ironclad-v0.61.tgz)...
[4/9] Downloading trivial-garbage (trivial-garbage-20231021-git.tgz)...
[5/9] Downloading uuid (uuid-20200715-git.tgz)...
[6/9] Downloading global-vars (global-vars-20141106-git.tgz)...
[7/9] Downloading alexandria (alexandria-20241012-git.tgz)...
[8/9] Downloading trivial-features (trivial-features-20250622-git.tgz)...
[9/9] Downloading trivial-utf-8 (trivial-utf-8-20250622-git.tgz)...
+--- ===================== ---+
| Verifying Downloads |
+--- ===================== ---+

 ✓ mgl-pax (archive: mgl-pax-20250622-git.tgz) size and md5 verified

 ✓ bordeaux-threads (archive: bordeaux-threads-v0.9.4.tgz) size and md5 verified

 ✓ ironclad (archive: ironclad-v0.61.tgz) size and md5 verified

 ✓ trivial-garbage (archive: trivial-garbage-20231021-git.tgz) size and md5 verified

 ✓ uuid (archive: uuid-20200715-git.tgz) size and md5 verified

 ✓ global-vars (archive: global-vars-20141106-git.tgz) size and md5 verified

 ✓ alexandria (archive: alexandria-20241012-git.tgz) size and md5 verified

 ✓ trivial-features (archive: trivial-features-20250622-git.tgz) size and md5 verified

 ✓ trivial-utf-8 (archive: trivial-utf-8-20250622-git.tgz) size and md5 verified

+--- ========================== ---+
| Moving Verified Archives |
+--- ========================== ---+

 ✓ Moved mgl-pax (archive: mgl-pax-20250622-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved bordeaux-threads (archive: bordeaux-threads-v0.9.4.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved ironclad (archive: ironclad-v0.61.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved trivial-garbage (archive: trivial-garbage-20231021-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved uuid (archive: uuid-20200715-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved global-vars (archive: global-vars-20141106-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved alexandria (archive: alexandria-20241012-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved trivial-features (archive: trivial-features-20250622-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

 ✓ Moved trivial-utf-8 (archive: trivial-utf-8-20250622-git.tgz) to /home/lab01/.quicklisp/dists/quicklisp/archives

+--- ============ ---+
| Next Steps |
+--- ============ ---+

 ✓ To make it easier to use this script next time, consider installing it to a PATH location:

  1. Move the script to ~/.local/bin/ (recommended for user access):
     $ mv ql-helper.py ~/.local/bin/ql-helper
  2. Make it executable:
     $ chmod +x ~/.local/bin/ql-helper
  3. Ensure ~/.local/bin/ is in your PATH. Add to ~/.bashrc or ~/.zshrc if needed:
     $ echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
  4. Then run it as:
     $ ql-helper system1 system2 system3
  Alternatively, if you have root access, install to /usr/local/bin/:
     $ sudo mv ql-helper.py /usr/local/bin/ql-helper
     $ sudo chmod +x /usr/local/bin/ql-helper
 ✓ Successfully processed 9 archives

+--- =============== ---+
| **IMPORTANT** |
+--- =============== ---+

!!DO NOT extract archives manually!!
!!DO NOT extract archives manually!!
!!DO NOT extract archives manually!!
Do (ql:quickload "your-system") as usual and let quicklisp do its job!
        

Replace uuid with what you really want to download.

This sript will use curl to download archives and put them where they are expected by quicklisp.

DO NOT extract archives yourself. Run (ql:quickload "system-name") and let quicklisp do it.

If you need this script a lot, follow the instructions to install it.

Security and Integrity

Inspect the install script: installer and ql-helper.
And follow our installation instructions for more integrity checks.

After Install

Test Quicklisp: sbcl --load ~/.quicklisp/setup.lisp
Run this from SBCL/LispWorks/whatever to avoid repeated manual loading: (ql:add-to-init-file)