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.
** simple hassle-free one-liner using curl for every download
*** currently using a prepacked, complete archive of all the files required by quicklisp on Cloudflare to eliminate network issues

Quick Install (Interactive)

Linux/macOS

curl -fsSL https://ql-init.oil6.net/install.py | python3 -

Windows (PowerShell)

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

Non-Interactive Modes

Fresh Install

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

Windows: curl.exe -fsSL https://ql-init.oil6.net/install.py | python.exe - --fresh
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

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)