Variable Life Search (VLS)
Posted: September 11th, 2026, 7:34 pm
This is a new supercharged version of lifesrc that I wrote in C and TypeScript. I think it is generally faster than all other lifesrc-style programs. (LLS does not count here because it is not really a lifesrc, however I intend to surpass LLS at some point.) It is as general as LLS, the "variable" means that it supports variables like in LLS, making searches much more general. It can for instance search for catalysts like Barrister (however this is currently extremely slow), or do complicated oscillator searches. Source code is available here.
To install on Linux or WSL:
It depends on gcc and NodeJS. The installer will automatically install the best way to install Node on Linux, however do not try this on Macs. I repeat, do not run ./install on Macs until you have installed Node separately from here. If the installer script fails, just try reloading your shell and run it again (it needs to update PATH), if it still fails, ask here, and please provide the error message.
To get some information about how to use it, run ./vls -h.
Here are some example searches:
There is much more functionality than described here, it's in the help text.
There is very advanced duplicate solution detection, however it is still broken in a few places. It also keeps track of and reports max partials.
Search order is an important part of using VLS effectively, it is set via the -o option. For instance, the OT 8x8 (2, 1)c/3 search above would take far too long with f2b search order, but it is very quick with g-f2b. However, some searches are slower with g-f2b. This is explained in more detail in the help text (including fully custom search orders), but the basics is, you can provide "f2b" (front to back, the default), "b2f" (back to front), and "s2s" (side to side), but you can also prefix them with the g- option, which makes it find all generations of the row before going on to the next, this can increase or decrease speed depending on the search.
There are a few options that can increase the speed depending on the search. I don't fully understand what causes them to be faster and not faster. They are -no-cache-trs, --check-times, and -clang.
To install on Linux or WSL:
Code: Select all
git clone https://github.com/speedydelete/lifeweb
cd lifeweb
./install
To get some information about how to use it, run ./vls -h.
Here are some example searches:
Code: Select all
# finds the glider
./vls B3/S23 periodic 'c/4d' 4 4
# does not finds the glider because of how the bounding box works
# generations 0 to <period> must fit in the box
# this is not the same as rlifesrc
./vls B3/S23 periodic 'c/4d' 3 4
# finds the xWSSes
./vls B3/S23 periodic '2c/4o' 7 9
# finds all 3x3 c/2o's in INT
./vls B/S B1e2345678/S012345678 periodic 'c/2o' 3 3
# disproves 8x8 (2, 1)c/3 in OT (outer-totalistic, aka life-like) rules
./vls B2/S B2345678/S012345678 periodic '(2, 1)c/3' 8 8 -rulespace=ot -o='g-f2b'
# find all parents of the glider
./vls B3/S23 parent 'bo$2bo$3o!'
There is very advanced duplicate solution detection, however it is still broken in a few places. It also keeps track of and reports max partials.
Search order is an important part of using VLS effectively, it is set via the -o option. For instance, the OT 8x8 (2, 1)c/3 search above would take far too long with f2b search order, but it is very quick with g-f2b. However, some searches are slower with g-f2b. This is explained in more detail in the help text (including fully custom search orders), but the basics is, you can provide "f2b" (front to back, the default), "b2f" (back to front), and "s2s" (side to side), but you can also prefix them with the g- option, which makes it find all generations of the row before going on to the next, this can increase or decrease speed depending on the search.
There are a few options that can increase the speed depending on the search. I don't fully understand what causes them to be faster and not faster. They are -no-cache-trs, --check-times, and -clang.