DigitableCourses
Portal settings
Show me around

Local and account-free. No account, no sign-up: whatever you type into the tools stays in this browser's localStorage and never reaches a server.

Our own counter records page opens and finishes: the address leaves, plus one tenth-of-the-text figure. No cookies, no outside trackers, your IP is not stored, Do Not Track is honoured. How to check that

The portal's own repository is not published, so we do not call it open source. What is open:

The portal lives on donations, paid consultations and requested write-ups, and on Workbench sales.

There are no plans to make the courses paid.

digitdisk

Where the disk space went and how the machine feels. Cleaning goes by plan: to the trash or for good, never unasked.

The live screen, taken from a run

$ digitdisk analyze /home/user --live --lang en

The screen of digitdisk analyze /home/user --live --lang en: 20 lines; as letters, right below.
The walk is running: the numbers climb, the current directory is named, the list is marked PRELIMINARY.
The whole screen as text
 ◇ digitdisk  walking /home/user                                                            Digitable  10:25:51
 ⠧  WALKING   11 s
────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  entries         48,128   files 37,904 · dirs 10,153 · links 71
  size            1.5 GiB
  rate            4,095 entries/s · 131.6 MiB/s
  now at          /home/user/.npm/_cacache/content-v2/sha512/c5/5a   depth 6
  entries/s       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▃▄▄▄▄▄▃▃▃▄▄▄▆▇▆█▇▇▆▆▆▅  peak 7,451/s

  WHAT FILLS IT   PRELIMINARY
     1. ███████████████████████─────    81.6%  project/                                   1.2 GiB    31,859 ent.
     2. █████───────────────────────    18.0%  .npm/                                    278.2 MiB    16,257 ent.
     3. ────────────────────────────     0.4%  Downloads/                                 6.4 MiB         7 ent.
     4. ────────────────────────────     0.0%  .cache/                                        0 B         0 ent.



────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 WALK   48,128 entries · 1.5 GiB                                          ↑ ↓ scroll · l lang · q stop the walk

$ digitdisk analyze /home/user --live --lang en

The screen of digitdisk analyze /home/user --live --lang en: 32 lines; as letters, right below.
The same screen after the walk: «c» builds the plan and asks for the exact number of files — until it is typed, nothing moves.
The whole screen as text
 ◇ digitdisk  walked /home/user                                                             Digitable  10:27:27
  TOTAL    TREE    LARGEST    REMOVABLE    CLASSES    SKIPPED    PLACES    JOURNAL
────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  CLEANING PLAN

  nothing marked — the plan covers the whole walked tree

  to be moved   474 files, 50.9 MiB
  no space is freed: the move is a rename, the bytes stay on the disk.
  only `digitdisk purge <trash> --confirm N` frees them.

  by class:
     Cache          471 files       3.1 MiB
     Build           3 files      47.8 MiB


  trash: /home/user/.digitdisk-trash

  the first of the list:
       47.8 MiB  Build        /home/user/project/node_modules/hugo-bin/vendor/hugo
      332.6 KiB  Cache        …d1a47b1b1/node_modules/mdn-data/css/properties.json
      197.9 KiB  Cache        …3e2bd1a47b1b1/node_modules/css-tree/dist/csstree.js
      197.8 KiB  Cache        …d1a47b1b1/node_modules/css-tree/dist/csstree.esm.js
      187.5 KiB  Cache        …modules/csstree-validator/dist/csstree-validator.js
      187.4 KiB  Cache        …les/csstree-validator/dist/csstree-validator.esm.js
     …and 468 more

  number of files: ▏

────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 DONE   104,219 entries · 6.5 GiB  lines 1–27 of 28                                          Esc cancel, q quit

$ digitdisk analyze /home/user --live --lang en

The screen of digitdisk analyze /home/user --live --lang en: 28 lines; as letters, right below.
The same plan, the other verb: Backspace erases for good, and there will be no trash. The number of files is typed by hand again, and Esc touches nothing.
The whole screen as text
 ◇ digitdisk  walked /home/user                                                             Digitable  10:28:57
  TOTAL    TREE    LARGEST    REMOVABLE    CLASSES    SKIPPED    PLACES    JOURNAL
────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  ERASE FOR GOOD

  erase for good  474 files, 50.9 MiB
  50.9 MiB will be freed — really freed, this time
  there will be no trash: the files leave the disk and nothing can bring them back.

  directories marked: 1

  what will vanish:
       47.8 MiB  Build        /home/user/project/node_modules/hugo-bin/vendor/hugo
      332.6 KiB  Cache        …d1a47b1b1/node_modules/mdn-data/css/properties.json
      197.9 KiB  Cache        …3e2bd1a47b1b1/node_modules/css-tree/dist/csstree.js
      197.8 KiB  Cache        …d1a47b1b1/node_modules/css-tree/dist/csstree.esm.js
      187.5 KiB  Cache        …modules/csstree-validator/dist/csstree-validator.js
      187.4 KiB  Cache        …les/csstree-validator/dist/csstree-validator.esm.js
      177.6 KiB  Cache        …2e3e2bd1a47b1b1/node_modules/mdn-data/l10n/css.json
     …and 467 more

  number of files: ▏

  type the number of files (474) and Enter to erase for good; Ctrl-U clears, Esc cancels

────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 DONE   104,219 entries · 6.5 GiB                                                            Esc cancel, q quit

$ digitdisk status --live --lang en

The screen of digitdisk status --live --lang en: 22 lines; as letters, right below.
The load and all 256 cores one by one are real. The node name demo belongs to the sandbox.
The whole screen as text
 ◇ digitdisk  demo · Ubuntu 26.04 LTS · 7.0.0-29-generic    Digitable  10:29:10
  COMMANDS  ‹  LOAD  ›  4/11
────────────────────────────────────────────────────────────────────────────────────────────────────────────────

  load avg          22.52 / 22.61 / 22.04  (1/5/15 min)
  cores             256
  runnable          21 of 7835

  CPU busy     ██─────────────────────────────  7.5% (sampled 200 ms)
  history      ····························▁▁▁

  by core           measured 256 of 256  (window 200 ms)
  spread            min 0.0% · median 0.0% · max 100.0% (core 2)
  loaded            13 cores of 256 are busy more than half the time

  CORE MAP
     0–95  ▁▁█▁▃▁▁▂▁▁▁▁▁▁█▁▁▂▁▁▃▁▁▁▁▁▁▃▁▁▁█▁▁▁▁▁▁▁▂▁▁▁▂█▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁
   96–191  ▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▂▁▂▁▁█▁▁▁▁▇▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▃▁▁▁▁▁▁▁▁▁▁▁▄▁▁
  192–255  ▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁
  a cell is a core: ▁ idle, █ fully busy
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 LIVE   sampled 1 s ago · took 267 ms · every 2 s  lines 1–17 of 25  ← → · p · r · l lang · 1 COMMANDS · q quit

Taken 2026-09-03, digitdisk 0.8.0, sha256 0c9e5d2122f9, through a pseudo-terminal. Characters, columns and colour come from the run, the typeface is added. Under /home/user lie real directories of this machine. the full status --json, 37989 bytes

Permission to delete

The disk is full and you need to know where it went. du and ncdu will tell you, and then you remove things by hand. A cleaner removes them for you — off a list of well-known paths; that list is its permission to delete, and you take it on trust.

digitdisk grants no permission by list. The verdict comes from a core in flang, and «Removable» is a verdict it cannot pass on anything but caches, logs and build output: a postcondition of the function, not a line of description.

One postcondition is not enough, and the tool’s own tree says so: while the signs were looked up as a substring of the path it held, and the tool was wrong four times on a live machine — on pip’s files under a build directory, on a container image layer with a cache component, on .logseq settings, on a letter under a tmp directory. “We remove only caches” is true; “what is marked a cache is a cache” does not follow. Now the path is cut into components and two postconditions hold the rest: what is addressed by its content is never removed, and without a sign in a component the class is decided by size alone.

The directory of known places knows 102 of them, each with a link to the documentation where the owner of that directory calls it a cache himself. It grants no permission to delete: it names a class, the core judges. The protection list can subtract and cannot add.

Since 0.8.0 the walking screen has Backspace: it erases for good, past the trash. That opens no second road to deletion — the plan is built by the same core and by the same verdict; one thing is new: nothing brings it back. So the question names the number of files first.

Three look, three clean, one remembers, one measures

status

The CPU and every core, memory, disks, network, temperature, video cards.

analyze <path>

A walk over the tree. The screen is not a report: you walk it, mark and clean there.

clean <path>

The plan: what, how much and by which rule. Without --apply nothing is opened for writing.

restore <trash>

Puts a trash back by its journal. No flag needed: flags guard destruction.

purge <trash>

The one irreversible action. It demands --confirm N: as many files as the trash holds.

places

102 known places, and which of them are here.

history <path>

How past cleanups under this root ended.

run <command>

Runs someone else's command and shows its cost: CPU time, peak memory over the process tree, video memory.

Where the tool stops

  • By neither a pattern nor a list of names: only what the core sentenced Removable.
  • It stays inside the root, the trash sits within it, a directory or a symlink it never touches.
  • Linux and macOS, no Windows: on a Mac the snapshot has neither video cards nor temperature. Of an NVIDIA card it knows the name and the bus.

Sources and builds