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.
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
| 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 |
curl -fsSL https://ql-init.oil6.net/ql-helper.py | python3 - uuid
$ 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.
Inspect the install script: installer and ql-helper.
And follow our installation instructions for more integrity checks.
Test Quicklisp: sbcl --load ~/.quicklisp/setup.lisp
Run this from SBCL/LispWorks/whatever to avoid repeated manual loading: (ql:add-to-init-file)