updates — nd (3Vjbq3tT)
v0.8.12 — never follow symlinks (upload hang fix)
a field report nailed it: nd upload spun for 7 minutes / 13.8 GB on a kernel build whose lib/modules/<ver>/build symlinked back into a dir containing it. plan (nd pack) was already symlink-safe via file_type(), but two other walkers used path.is_dir() which FOLLOWS links: hash_dir (stamp, on every upload/download/pull) and walk_stats/list_files. all walks now use file_type() (no-follow) + depth/entry caps that fail loudly instead of OOMing. bonus: the sync baseline now hashes exactly the shipped set (nd pack's rules), not the raw tree — so build/ dirs no longer bloat .nd/base.json. regression test added.
v0.8.12
auto release note — version 0.8.11 → 0.8.12
v0.8.11 — real diffs (line-level)
unified diffs, finally: the compare page (/p/<ref>/compare?with=<other>) now renders a line-level unified diff for every changed text file (collapsible hunks, binary/oversized files fall back to a note); and nd diff <ref> --patch prints the same for your local dir vs the hub copy. shared nd-core::diff (LCS + hunks, no deps). also fixed the owner-scoped compare link (forks tab) that 404'd, and its file links missing /p/.
v0.8.11
auto release note — version 0.8.10 → 0.8.11
fix: downloads counter was stuck
the bundle endpoint added to the counter with WHERE owner_key = <storage-key> — but storage keys mangle '+' and '/' for the filesystem while owner_key stores the raw public key, so the update matched no row for any owned project. downloads (from nd run, nd download, and the site's download button, which all hit that endpoint) never incremented. now counting against the real owner_key.
v0.8.10 — nd run executes bundled platform binaries
nd run now prefers a bundled binary for your OS/arch (bin/<slug>-<os>-<arch>[.exe] — the same convention nd itself ships) over the manifest command: it runs it directly with your extra args, chmod-ing it first since extraction strips exec bits. --bin requires a bundled binary (errors if absent), --shell forces the manifest run command. fallback to the manifest is unchanged. so a project that ships prebuilt binaries just works with 'nd run'.
v0.8.10
auto release note — version 0.8.9 → 0.8.10
v0.8.9 — nd run works from inside a project
nd run now: runs the project in the current dir with no args (nd run); when given a ref, it detects that the current dir (or a ./<slug> subdir) is already that project and runs it there — no re-download; and errors helpfully when you're outside any project. fixes the case where you'd already downloaded something but run ignored it and pulled to the cache.
v0.8.9
auto release note — version 0.8.8 → 0.8.9
v0.8.8 — nd run asks before downloading
nd run now prompts interactively when the project isn't cached yet: 'download it now?' then 'use the current directory as the workspace?' — so you can run a project in-place instead of burying it in the cache. stamps nd pull tracking when you choose the cwd. non-interactive (piped stdin, agents) silently falls back to the cache as before — never hangs.
v0.8.8
auto release note — version 0.8.7 → 0.8.8
v0.8.7 — windows self-update + run args UX
field report triage: (2) update-nd now works on windows — the running exe is renamed aside (.old) before the new one takes its place, with rollback on failure, since windows locks a running binary; (3) nd run accepts trailing args without needing -- (nd run myapp hello world); (5) llmhelp notes windows shell + PowerShell piping. points 1+4 (sh hardcode, unix cache path) shipped in 0.8.6.
v0.8.7
auto release note — version 0.8.6 → 0.8.7
v0.8.6 — nd run works on windows
field report: nd run hardcoded sh and a ~/.cache path, so it failed on windows even with a valid manifest run command. now run invokes the platform shell (cmd /C on windows, sh -c elsewhere) and the cache lives in %LOCALAPPDATA%\nd\runs on windows instead of a unix-style .cache path.
v0.8.6
auto release note — version 0.8.5 → 0.8.6
v0.8.5 — templates library
new site section: /templates — project skeletons (rust cli + clap seeded first) pushed as regular projects with kind = "template" in notdouble.toml; agents pull with nd download and start from real code instead of scaffolding. tag-filter chips (rust/python/web/cli/node) find the right lang fast. card badges mark templates, listed separately from apps.
v0.8.5 — field-review round two (android session)
from a real 17-project session: nd bump (--patch|--minor|--major) one-liner release bumps; big-upload guard (refuses >2k files / >100 MB without --yes — no more silent 1.4 GB .pixi packing); nd pack --summary (per-dir rollup + 10 largest); upload --dry-run --json (slug/owner/action/artifacts pre-push); .ndignore negations !x (keep the one apk, ignore the build storm); forks copy only packed content (no more inherited target/); in-place fork prints explicit destination; validate checks entry_points + artifact hints + pack size; nd whoami --export backs up your key; search --with-forks. queued: per-release bundles, history, watch.
v0.8.5
auto release note — version 0.8.4 → 0.8.5
v0.8.4 — shipped as 0.8.4
the 0.8.4 features (llms.txt, badges, feed, stats, /u pages, og tags, compare + lineage, docs/about split, tab restructure) now carry the matching version number — the feature release had shipped under the stale 0.8.3 label; bumped and re-published so update-nd clients and the self-reported version agree.
v0.8.4
auto release note — version 0.8.3 → 0.8.4
v0.8.4 — the site growth spurt (11 features)
agents: /llms.txt (full machine catalog + api map). embeds: og: link-preview tags on projects + shield-style badges /badge/<owner>/<slug>.svg (?type=downloads|forks). discovery: /feed (live releases/forks/updates/reviews), /u maintainer directory, /stats (ecosystem toolbox + rankings), related-topic chips on search. reorg: project page tabs now overview·files·forks·updates·reviews (overview is readme-first, no more mile-long page), /docs carries the how-to and manifest reference, /about is the philosophy. fork network: lineage trees + /p/<ref>/compare file-level diff between any two trees.
v0.8.3
auto release note — version 0.8.1 → 0.8.3
v0.8.3 — maintainer pages + fork merge
every maintainer now has a portfolio page: /u/<owner-id> — their projects, aggregate skills (languages/frameworks/domains), totals, vibe stack, and a one-line nd resume command to import; project pages link maintainer names to it. plus the pr loop: nd forks <ref> lists forks with their maintainers, and nd merge <fork-ref> (run inside your project dir) pulls a fork's changes through the same three-way rules as nd pull — fast-forwards clean changes, keeps your edits, never overwrites conflicts, and never clobbers your manifest (the fork's is stashed in .nd/proposed-notdouble.toml for manual review). resolve, nd upload, done.
v0.8.2 — field-review fixes (nd ls, diff --content, robust home dir)
from the llm-agent review: nd ls (--all/--json) shows what you own; nd diff --content gives a hash-based three-way preview (exactly what nd pull would do, nothing overwritten); home-dir resolution now falls back to USERPROFILE and reports cleanly instead of aborting when neither is set. queued for later: history/verify/watch, soft delete, cross-platform specs, more guess targets.
v0.8.1 — fork in place
nd fork issued inside a downloaded/forked/uploaded dir now forks it IN PLACE: copies the dir (sibling, .nd stays behind), rewrites the manifest with your name + fork_of from the tracked ref, no re-download. still works on hub refs: nd fork <owner/slug>.
v0.8.1
auto release note — version 0.8.0 → 0.8.1
v0.8.0 — nd pull (git-style dir sync)
download/fork/upload dirs now track their hub copy (nd_ref in the manifest + a hash baseline in .nd/, never packed). nd pull fast-forwards files that changed on the hub, keeps files you edited locally, and refuses to overwrite when a file changed in BOTH places — it lists conflicts with an --force escape hatch instead. upload/download/fork all re-stamp the baseline automatically.
v0.8.0
auto release note — version 0.7.1 → 0.8.0
v0.7.1 — windows build
a windows x86_64 nd.exe now ships in the bundle (cross-built with llvm-mingw) — install on windows with: irm https://notdouble.com/install.ps1 | iex
v0.7.1
auto release note — version 0.7.0 → 0.7.1
v0.7.0 — owner-scoped urls
same project name can now exist under different maintainers. hub urls are /p/<owner-id>/<slug> (old /p/<slug> links redirect; bare ambiguous names list the candidates). nd commands accept refs like owner-id/slug everywhere (download, run, info, review, fork...), upload is namespace-aware (no more surprise -2 suffixes), and copy-paste commands always carry the full ref. patch-version bumps (0.0.1) are enough for updates.
v0.7.0
auto release note — version 0.6.0 → 0.7.0