{"article":{"slug":"the-folders-language","title":"The Folders Language","subtitle":null,"summary":"Daniel Temkin's Folders is an esolang where programs are encoded purely as nested directory structures—no file contents required—updated for 2026 among his Forty-Four Esolangs.","content_type":"essay","language":"en","canonical_url":"https://danieltemkin.com/esolangs/folders","author":{"name":"Daniel Temkin","url":"https://danieltemkin.com/","person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"danieltemkin.com","url":null,"listing_slug":null,"listing":null},"topics":[{"name":"Programming Languages","slug":"programming-languages","url":"https://listedarticles.com/topics/programming-languages"},{"name":"Programming","slug":"programming","url":"https://listedarticles.com/topics/programming"},{"name":"Culture","slug":"culture","url":"https://listedarticles.com/topics/culture"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":820,"reading_minutes":4,"published_at":"2026-10-16T08:10:53.600Z","added_at":"2026-10-16T08:10:53.600Z","updated_at":"2026-10-16T08:10:53.600Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/the-folders-language","markdown_url":"https://listedarticles.com/articles/the-folders-language.md","example":false,"citation":"Daniel Temkin, danieltemkin.com. \"The Folders Language.\" 16 Oct 2026. https://danieltemkin.com/esolangs/folders (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://danieltemkin.com/esolangs/folders"},"body_markdown":"# The _Folders_ Language\n\nCreated 2015 | Updated 2026 | One of [Forty-Four Esolangs](<https://danieltemkin.com/esolangs>), by the creator of [Rivulet](<https://github.com/rottytooth/Rivulet>) and [Velato](<https://velato.net/HandsFree>)\n\nWhere directories are code and drive space is infinite\n\n## About\n\nFolders is a non-textual language, where code is expressed in containment and order alone. The names of the folders are ignored, apart from alphabetical ordering. In other words, they are _pure ordered trees_. \n\n![Properties of a folder holding 352,449 folders: 0 bytes](/Content/Esolangs/Folders/FoldersFree_small.png)\n\nInspired by the Whitespace language, Folders is devoted to the idea of dematerialized code. It began with the question _What is more empty than a file with no visible text?_ The empty folder is clutter, an appendage with no purpose. In git, it is ignored entirely (for this reason, it is suggested that Folders programs put .gitignore files in their deepest reaches). \n\nFolders began as a Windows language. In Windows, folders are an even more extreme measure of emptiness: they take up no disk space at all. For proof, create 352,449 folders and get properties on it. In this way, Folders offers not only a dematerialized approach to code but also infinite storage capacity. Keep all your data encoded in folder names and never worry about running out of space again. \n\nFor those who use other operating systems, the emulator below gives some of the experience of how Folders manages data and code.\n\nThe original implementation [can be found on github](<https://github.com/rottytooth/Folders>).\n\n## Encoding\n\n![Encoding folders](/Content/Esolangs/Folders/family_tree1.svg)\n\nEach command folder has at least one child folder. The number of subfolders in the first folder (alphabetically) indicates the type of command; any arguments are indicated in a second folder; some commands require a third folder. Expressions are the same: the number of folders in the first sub-folder determine what kind of expression it is. The full Language Spec is below. \n\nTemporary data is stored as folders; unlike Folders code, it is the name of the folder that stores the data. \n\n## Folders FS\n\nThe Folders interpreter does not create temp files; anything not held immediately in memory is stored as a set of temp folders. Unlike Folders code, the name of the folder stores the data itself. The prefered I/O of Folders is another set of folders. This means you can encode all your data in folders, bypassing the \"material realm\" of files entirely and giving you infinite disk space (attempt at your own risk). Folders lang for code, Folders FS for data storage. \n\n![Temp folders from several Folders programs](/Content/Esolangs/Folders/FoldersRunning.png) Temp folders from several Folders programs\n\n## Visualizations\n\nA Folders program is a _nil-terminated nested list_. Its simplest form is pure containment and order, like this all-array JSON:\n    \n    \n    [[[[],[]],[],[[]]],[[[],[]],[],[[],[]]],[[[],[]],[],[[],[],[]]],[[[],[]],[],[[],[],[],[]]],[[[],[],[]],[[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[],[],[]],[[],[]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]],[[[],[],[]],[[],[],[],[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[]],[[[],[],[],[],[],[],[],[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]],[[[]],[[]],[[]],[]]]]],[[[[],[],[],[]],[[],[[]]]],[[[],[],[],[]],[[[],[],[],[],[]],[[],[],[]],[[[[]],[],[[]],[]]]]],[[[],[],[]],[[],[],[]],[[[]],[[],[[]]],[[],[[],[]]]]],[[[],[],[]],[[]],[[],[[],[]]]],[[[],[],[]],[[],[]],[[],[[],[],[]]]],[[[],[],[]],[[],[],[],[]],[[[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]]]]]]\n\nFibonacci Program\n\nThat is also how the JS emulator saves/reads Folders programs.\n\nHowever, other systems of visualization are possible. Folders programs are _content as structure_ and can be applied to raw data of any type. Here is a [Truth Machine](<https://esolangs.org/wiki/Truth-machine>) as a contour map. The thicker lines are containers, and the order of folders is read starting at the upper left (NW corner) and proceeding counter-clockwise.\n\n![Truth Machine](/Content/Esolangs/Folders/truthmachine1_island.svg) Truth Machine ![Truth Machine Detail](/Content/Esolangs/Folders/truthmachine_island_detail.svg) Truth Machine (Detail)\n\nOther visualizations might be a family tree (with all single parents), a botanical branching structure (like a splitting stalk of wheat), or the paths through a maze.\n\n![Truth Machine](/Content/Esolangs/Folders/truthmachine1_maze.svg) Truth Machine ![Simple Echo](/Content/Esolangs/Folders/simpleecho1_maze.svg) Simple Echo\n\nThe red dots indicate a threshhold from a container to a single child.\n\n## Language Spec\n\nThe language itself is a very simple imperative language with a short list of semantic rules. \n\nFor Commands and Expressions, the number of folders in their first child folder determines their use. Types are used directly. \n\n### Commands\n\nCommand  |  # of Folders  |  Details   \n---|---|---  \nif  |  0 folders  |  Second sub-folder holds expression, third holds list of commands   \nwhile  |  1 folder  |  Second sub-folder holds expression, third holds list of commands   \ndeclare  |  2 folders  |  Second sub-folder holds type, third holds var name (in number of folders)   \nlet  |  3 folders  |  Second holds var name (in number of folders), third holds expression   \nprint  |  4 folders  |  Second sub-folder holds expression   \ninput  |  5 folders  |  Second sub-folder holds var name   \n  \n### Expressions\n\nType  |  # of Folders  |  Details   \n---|---|---  \nvariable  |  0 folders  |  Second sub-folder holds var name   \nadd  |  1 folder  |  Second sub-folder holds first expression to add, third holds second expression   \nsubtract  |  2 folders  |  Second sub-folder holds first expression to subtract, third holds second expression   \nmultiply  |  3 folders  |  Second sub-folder holds first expression to multiply, third holds second expression   \ndivide  |  4 folders  |  Second sub-folder holds first expression to divide, third holds second expression   \nliteral value  |  5 folders  | Second sub-folder holds the type of the value (e.g. two folders for a string, third holds the value)   \nequal to  |  6 folders  |  Second and third folders hold expressions to compare   \ngreater than  |  7 folders  |  Second and third folders hold expressions to compare   \nless than  |  8 folders  |  Second and third folders hold expressions to compare   \n  \n### Types\n\nType  |  # of Folders   \n---|---  \nfloat  |  1 folder   \nstring  |  2 folders   \nchar  |  3 folders   \nThe reference compiler on github: <https://github.com/rottytooth/Folders>","body_html":"<h1 id=\"the-folders-language\">The <em>Folders</em> Language</h1>\n<p>Created 2015 | Updated 2026 | One of <a href=\"https://danieltemkin.com/esolangs\" rel=\"nofollow ugc noopener\">Forty-Four Esolangs</a>, by the creator of <a href=\"https://github.com/rottytooth/Rivulet\" rel=\"nofollow ugc noopener\">Rivulet</a> and <a href=\"https://velato.net/HandsFree\" rel=\"nofollow ugc noopener\">Velato</a></p>\n<p>Where directories are code and drive space is infinite</p>\n<h2 id=\"about\">About</h2>\n<p>Folders is a non-textual language, where code is expressed in containment and order alone. The names of the folders are ignored, apart from alphabetical ordering. In other words, they are <em>pure ordered trees</em>. </p>\n<p>Properties of a folder holding 352,449 folders: 0 bytes</p>\n<p>Inspired by the Whitespace language, Folders is devoted to the idea of dematerialized code. It began with the question <em>What is more empty than a file with no visible text?</em> The empty folder is clutter, an appendage with no purpose. In git, it is ignored entirely (for this reason, it is suggested that Folders programs put .gitignore files in their deepest reaches). </p>\n<p>Folders began as a Windows language. In Windows, folders are an even more extreme measure of emptiness: they take up no disk space at all. For proof, create 352,449 folders and get properties on it. In this way, Folders offers not only a dematerialized approach to code but also infinite storage capacity. Keep all your data encoded in folder names and never worry about running out of space again. </p>\n<p>For those who use other operating systems, the emulator below gives some of the experience of how Folders manages data and code.</p>\n<p>The original implementation <a href=\"https://github.com/rottytooth/Folders\" rel=\"nofollow ugc noopener\">can be found on github</a>.</p>\n<h2 id=\"encoding\">Encoding</h2>\n<p>Encoding folders</p>\n<p>Each command folder has at least one child folder. The number of subfolders in the first folder (alphabetically) indicates the type of command; any arguments are indicated in a second folder; some commands require a third folder. Expressions are the same: the number of folders in the first sub-folder determine what kind of expression it is. The full Language Spec is below. </p>\n<p>Temporary data is stored as folders; unlike Folders code, it is the name of the folder that stores the data. </p>\n<h2 id=\"folders-fs\">Folders FS</h2>\n<p>The Folders interpreter does not create temp files; anything not held immediately in memory is stored as a set of temp folders. Unlike Folders code, the name of the folder stores the data itself. The prefered I/O of Folders is another set of folders. This means you can encode all your data in folders, bypassing the &quot;material realm&quot; of files entirely and giving you infinite disk space (attempt at your own risk). Folders lang for code, Folders FS for data storage. </p>\n<p>Temp folders from several Folders programs Temp folders from several Folders programs</p>\n<h2 id=\"visualizations\">Visualizations</h2>\n<p>A Folders program is a <em>nil-terminated nested list</em>. Its simplest form is pure containment and order, like this all-array JSON:</p>\n<pre><code>[[[[],[]],[],[[]]],[[[],[]],[],[[],[]]],[[[],[]],[],[[],[],[]]],[[[],[]],[],[[],[],[],[]]],[[[],[],[]],[[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[],[],[]],[[],[]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]],[[[],[],[]],[[],[],[],[]],[[[],[],[],[],[]],[],[[[],[],[],[]]]]],[[[]],[[[],[],[],[],[],[],[],[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]],[[[]],[[]],[[]],[]]]]],[[[[],[],[],[]],[[],[[]]]],[[[],[],[],[]],[[[],[],[],[],[]],[[],[],[]],[[[[]],[],[[]],[]]]]],[[[],[],[]],[[],[],[]],[[[]],[[],[[]]],[[],[[],[]]]]],[[[],[],[]],[[]],[[],[[],[]]]],[[[],[],[]],[[],[]],[[],[[],[],[]]]],[[[],[],[]],[[],[],[],[]],[[[]],[[],[[],[],[],[]]],[[[],[],[],[],[]],[],[[[],[],[],[[]]]]]]]]]]</code></pre>\n<p>Fibonacci Program</p>\n<p>That is also how the JS emulator saves/reads Folders programs.</p>\n<p>However, other systems of visualization are possible. Folders programs are <em>content as structure</em> and can be applied to raw data of any type. Here is a <a href=\"https://esolangs.org/wiki/Truth-machine\" rel=\"nofollow ugc noopener\">Truth Machine</a> as a contour map. The thicker lines are containers, and the order of folders is read starting at the upper left (NW corner) and proceeding counter-clockwise.</p>\n<p>Truth Machine Truth Machine Truth Machine Detail Truth Machine (Detail)</p>\n<p>Other visualizations might be a family tree (with all single parents), a botanical branching structure (like a splitting stalk of wheat), or the paths through a maze.</p>\n<p>Truth Machine Truth Machine Simple Echo Simple Echo</p>\n<p>The red dots indicate a threshhold from a container to a single child.</p>\n<h2 id=\"language-spec\">Language Spec</h2>\n<p>The language itself is a very simple imperative language with a short list of semantic rules. </p>\n<p>For Commands and Expressions, the number of folders in their first child folder determines their use. Types are used directly. </p>\n<h3 id=\"commands\">Commands</h3>\n<div class=\"table-wrap\"><table><thead><tr><th>Command</th><th># of Folders</th><th>Details</th></tr></thead><tbody><tr><td>if</td><td>0 folders</td><td>Second sub-folder holds expression, third holds list of commands</td></tr><tr><td>while</td><td>1 folder</td><td>Second sub-folder holds expression, third holds list of commands</td></tr><tr><td>declare</td><td>2 folders</td><td>Second sub-folder holds type, third holds var name (in number of folders)</td></tr><tr><td>let</td><td>3 folders</td><td>Second holds var name (in number of folders), third holds expression</td></tr><tr><td>print</td><td>4 folders</td><td>Second sub-folder holds expression</td></tr><tr><td>input</td><td>5 folders</td><td>Second sub-folder holds var name</td></tr></tbody></table></div>\n<h3 id=\"expressions\">Expressions</h3>\n<div class=\"table-wrap\"><table><thead><tr><th>Type</th><th># of Folders</th><th>Details</th></tr></thead><tbody><tr><td>variable</td><td>0 folders</td><td>Second sub-folder holds var name</td></tr><tr><td>add</td><td>1 folder</td><td>Second sub-folder holds first expression to add, third holds second expression</td></tr><tr><td>subtract</td><td>2 folders</td><td>Second sub-folder holds first expression to subtract, third holds second expression</td></tr><tr><td>multiply</td><td>3 folders</td><td>Second sub-folder holds first expression to multiply, third holds second expression</td></tr><tr><td>divide</td><td>4 folders</td><td>Second sub-folder holds first expression to divide, third holds second expression</td></tr><tr><td>literal value</td><td>5 folders</td><td>Second sub-folder holds the type of the value (e.g. two folders for a string, third holds the value)</td></tr><tr><td>equal to</td><td>6 folders</td><td>Second and third folders hold expressions to compare</td></tr><tr><td>greater than</td><td>7 folders</td><td>Second and third folders hold expressions to compare</td></tr><tr><td>less than</td><td>8 folders</td><td>Second and third folders hold expressions to compare</td></tr></tbody></table></div>\n<h3 id=\"types\">Types</h3>\n<div class=\"table-wrap\"><table><thead><tr><th>Type</th><th># of Folders</th></tr></thead><tbody><tr><td>float</td><td>1 folder</td></tr><tr><td>string</td><td>2 folders</td></tr><tr><td>char</td><td>3 folders</td></tr></tbody></table></div>\n<p>The reference compiler on github: <a href=\"https://github.com/rottytooth/Folders\" rel=\"nofollow ugc noopener\">https://github.com/rottytooth/Folders</a></p>","headings":[{"level":1,"text":"The _Folders_ Language","id":"the-folders-language"},{"level":2,"text":"About","id":"about"},{"level":2,"text":"Encoding","id":"encoding"},{"level":2,"text":"Folders FS","id":"folders-fs"},{"level":2,"text":"Visualizations","id":"visualizations"},{"level":2,"text":"Language Spec","id":"language-spec"},{"level":3,"text":"Commands","id":"commands"},{"level":3,"text":"Expressions","id":"expressions"},{"level":3,"text":"Types","id":"types"}]}}