Install
- One file. The compiler, the formatter, the test runner and the - language server are all in it, and there is nothing else to install. + One file. The compiler, the test runner, the formatter, the + WebAssembly backend, the language server, the debugger and the agent + server are all in it, and there is nothing else to install.
+What else is in it
+
+ The same file with a different first word each time. None of them
+ needs anything else on the machine, and
+ deed --help is the longer version of this table.
+
| Command | +What it is | +
|---|---|
deed check |
+ The compiler. Silence is the answer. | +
deed test |
+ + The test blocks, and the properties a contract generates. It + refuses to run anything that does not check. + | +
deed run |
+
+ Calls main, handing it the one
+ System capability there is.
+ |
+
deed build |
+
+ Compiles to WebAssembly. With --component, writes
+ the .wit world the effect rows add up to, which is
+ the one clause page.
+ |
+
deed doc |
+ + A module's API reference, as Markdown. No visibility modifiers + here, so there is nothing to decide about what belongs on it. + | +
deed fmt |
+ One canonical form, and no options for the output. | +
deed fix |
+ + Applies the repairs that are certain and leaves the guesses + alone. + | +
deed explain |
+ + The page for one diagnostic code. + Every code has one. + | +
deed lsp |
+ A language server, for an editor to start rather than you. | +
deed debug |
+ + A debug adapter: breakpoints, stepping, and the stack and + bindings of every active call. + | +
deed mcp |
+ + A Model Context Protocol server, so an agent can ask the + compiler the questions an editor asks. + | +
+ The last one is worth a second sentence, because the argument this
+ language is built on is that most code is no longer typed out by a
+ person. deed mcp holds no capability: a program arrives
+ as text and the answer leaves as text, and nothing it runs can reach
+ a file. What it hands back is not only the diagnostics but which tier
+ each obligation landed in, so the thing writing the code can see the
+ difference between a contract that was proved and one that was left
+ to a runtime check.
+
From source
Needs Rust 1.85 or newer, and nothing else:
$ git clone https://github.com/deed-lang/deed
diff --git a/tools/artifact.mjs b/tools/artifact.mjs
index a1baef2..d90f413 100644
--- a/tools/artifact.mjs
+++ b/tools/artifact.mjs
@@ -13,12 +13,18 @@ import { readFile } from "node:fs/promises";
// one language feature at a time, written so the compiler's own tests have
// something to read, and a visitor scrolling past `sink`, `names` and
// `diverge` is being shown the inside of a test suite. So the picker is
-// thirteen programs a person would recognise, and the rest stay on disk, still
+// fourteen programs a person would recognise, and the rest stay on disk, still
// asked about here and still reachable by name.
//
// `hello` is first because it is the only one this page can start. The others
// have tests, which is the button that works for them.
//
+// `transfer` is late rather than absent, which it was for four releases. It is
+// the program every design document works through and the one the README
+// opens with, and it is not a feature written down on its own: it is a ledger
+// with an effect, a handler, a contract and a refinement in it. Leaving it out
+// while offering `counter` was an oversight rather than a judgement.
+//
// It lives beside the code that asks the compiler because both tools need it:
// one writes the order into the index and the other checks it is still there.
export const SHOWN = [
@@ -34,6 +40,7 @@ export const SHOWN = [
"logs.deed",
"todo.deed",
"tasks.deed",
+ "transfer.deed",
"proven.deed",
];