Add 40 more links to SX Manifesto, author: Markdown & Anglebrackets

Link HTML, CSS, JavaScript, framework, separation of concerns, markup,
weak typing, prototype chains, declarative, Turing-complete, DOM,
homoiconicity, validate forms, server-side execution, signals, hooks,
reconciler, tree-shaking, code-splitting, HMR, transpilation, scoping,
composition model, template literals, inline styles, node_modules,
structured data, dependency tree, breaking changes, developer experience,
angle bracket, and "designed in ten days". Remove original source link.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-04 13:27:43 +00:00
parent 7325bb9ecf
commit ccd9b969ea

View File

@@ -2457,7 +2457,7 @@ def _essay_sx_manifesto() -> str:
return (
'(~doc-page :title "The SX Manifesto"'
' (p :class "text-stone-500 text-sm italic mb-8"'
f' "After " {x("https://www.marxists.org/archive/marx/works/1848/communist-manifesto/", "Marx & Engels")} ", loosely")'
' "Carl Markdown and Friedrich Anglebrackets")'
# --- I. A spectre is haunting the web ---
@@ -2491,7 +2491,7 @@ def _essay_sx_manifesto() -> str:
' "The history of all hitherto existing web development '
'is the history of language struggles.")'
f' {p}'
' "Markup and logic, template and script, structure and style — '
f' " " {x("https://en.wikipedia.org/wiki/Markup_language", "Markup")} " and logic, template and script, structure and style — '
'in a word, oppressor and oppressed — stood in constant opposition to one another, '
'carried on an uninterrupted, now hidden, now open fight, '
f'a fight that each time ended in a laborious reconfiguration of " {x("https://webpack.js.org", "webpack")} ".")'
@@ -2499,7 +2499,7 @@ def _essay_sx_manifesto() -> str:
' "In the earlier epochs of web development we find almost everywhere '
'a complicated arrangement of separate languages into various orders, '
'a manifold gradation of technical rank: '
f'HTML, CSS, JavaScript, " {x("https://www.w3.org/XML/", "XML")} ", "'
f'" {x("https://html.spec.whatwg.org", "HTML")} ", " {x("https://www.w3.org/Style/CSS/", "CSS")} ", " {x("https://developer.mozilla.org/en-US/docs/Web/JavaScript", "JavaScript")} ", " {x("https://www.w3.org/XML/", "XML")} ", "'
f' {x("https://www.w3.org/TR/xslt/", "XSLT")} ", "'
f' {x("https://www.json.org", "JSON")} ", "'
f' {x("https://yaml.org", "YAML")} ", "'
@@ -2514,7 +2514,7 @@ def _essay_sx_manifesto() -> str:
'has not done away with language antagonisms. It has but established new languages, '
'new conditions of oppression, new forms of struggle in place of the old ones.")'
f' {p}'
' "Our epoch, the epoch of the framework, possesses, however, this distinctive feature: '
f' "Our epoch, the epoch of the " {x("https://en.wikipedia.org/wiki/Web_framework", "framework")} ", possesses, however, this distinctive feature: '
'it has simplified the language antagonisms. The whole of web society is more and more '
'splitting into two great hostile camps, into two great classes directly facing each other: '
'the server and the client."))'
@@ -2523,27 +2523,27 @@ def _essay_sx_manifesto() -> str:
' (~doc-section :title "III. The ruling languages" :id "ruling-languages"'
f' {p}'
' "HTML, the most ancient of the ruling languages, '
'established itself through the divine right of the angle bracket. '
f' " " {x("https://html.spec.whatwg.org", "HTML")} ", the most ancient of the ruling languages, '
f'established itself through the divine right of the " {x("https://en.wikipedia.org/wiki/Bracket#Angle_brackets", "angle bracket")} ". '
'It was born inert — a document format, not a programming language — '
'and it has spent three decades insisting this is a feature, not a limitation.")'
f' {p}'
' "JavaScript, originally a servant hired for a fortnight to validate forms, '
f' " " {x("https://developer.mozilla.org/en-US/docs/Web/JavaScript", "JavaScript")} ", originally a servant hired for a fortnight to " {x("https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation", "validate forms")} ", '
'staged a palace coup. It seized the means of interaction, '
'then the means of rendering, then the means of server-side execution, '
f'then the means of rendering, then the means of " {x("https://nodejs.org", "server-side execution")} ", '
'and finally declared itself the universal language of computation. '
'Like every revolutionary who becomes a tyrant, '
'it kept the worst habits of the regime it overthrew: '
'weak typing, prototype chains, and the "'
f'" {x("https://en.wikipedia.org/wiki/Strong_and_weak_typing", "weak typing")} ", " {x("https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain", "prototype chains")} ", and the "'
f' {em} "\\"this\\"")'
' " keyword.")'
f' {p}'
' "CSS, the third estate, controls all visual presentation '
'while pretending to be declarative. '
f' " " {x("https://www.w3.org/Style/CSS/", "CSS")} ", the third estate, controls all visual presentation '
f'while pretending to be " {x("https://en.wikipedia.org/wiki/Declarative_programming", "declarative")} ". '
'It has no functions. Then it had functions. '
'It has no variables. Then it had variables. '
'It has no nesting. Then it had nesting. '
'It is not a programming language. Then it was Turing-complete. '
f'It is not a programming language. Then it was " {x("https://en.wikipedia.org/wiki/Turing_completeness", "Turing-complete")} ". '
f'CSS is the " {x("https://en.wikipedia.org/wiki/The_Vicar_of_Bray", "Vicar of Bray")} " of web technologies — '
'loyal to whichever paradigm currently holds power.")'
f' {p}'
@@ -2552,7 +2552,7 @@ def _essay_sx_manifesto() -> str:
'The developer — the proletarian — must learn all three, '
'must context-switch between all three, '
'must maintain the fragile peace between all three. '
'The separation of concerns has become the separation of the developer\'s sanity."))'
f'The " {x("https://en.wikipedia.org/wiki/Separation_of_concerns", "separation of concerns")} " has become the separation of the developer\'s sanity."))'
# --- IV. The petty-bourgeois frameworks ---
@@ -2579,17 +2579,17 @@ def _essay_sx_manifesto() -> str:
'extracting rent in the form of configuration files, '
'build pipelines, and breaking changes.")'
f' {p}'
f' "Each framework promises liberation. Each framework delivers a new dependency tree. "'
f' {x("https://react.dev", "React")} " freed us from manual DOM manipulation and gave us a "'
f' "Each framework promises liberation. Each framework delivers a new " {x("https://en.wikipedia.org/wiki/Dependency_graph", "dependency tree")} ". "'
f' {x("https://react.dev", "React")} " freed us from manual " {x("https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model", "DOM")} " manipulation and gave us a "'
f' {x("https://legacy.reactjs.org/docs/faq-internals.html", "virtual DOM")} ", '
'a reconciler, hooks with seventeen rules, '
f'a " {x("https://legacy.reactjs.org/docs/reconciliation.html", "reconciler")} ", " {x("https://react.dev/reference/react/hooks", "hooks")} " with seventeen rules, '
f'and a conference circuit. "'
f' {x("https://vuejs.org", "Vue")} " freed us from React\'s complexity and gave us the Options API, '
f'then the Composition API, then told us the Options API was fine actually. "'
f' {x("https://angular.dev", "Angular")} " freed us from choice and gave us a CLI that generates eleven files '
f'to display \\\"Hello World.\\\" "'
f' {x("https://svelte.dev", "Svelte")} " freed us from the virtual DOM and gave us a compiler. "'
f' {x("https://www.solidjs.com", "SolidJS")} " freed us from React\'s re-rendering and gave us signals, '
f' {x("https://www.solidjs.com", "SolidJS")} " freed us from React\'s re-rendering and gave us " {x("https://github.com/tc39/proposal-signals", "signals")} ", '
'which React then adopted, completing the circle.")'
f' {p}'
' "The frameworks reproduce the very conditions they claim to abolish. '
@@ -2607,7 +2607,7 @@ def _essay_sx_manifesto() -> str:
f' {x("https://www.npmjs.com/package/left-pad", "left-pad")} ". '
'They attach themselves to whichever framework currently holds power, '
'contributing nothing original, merely wrapping what already exists, '
'adding weight to the node_modules directory until it exceeds the mass of the sun."))'
f'adding weight to the " {x("https://docs.npmjs.com/cli/v10/configuring-npm/folders#node-modules", "node_modules")} " directory until it exceeds the mass of the sun."))'
# --- V. The build step ---
@@ -2617,7 +2617,7 @@ def _essay_sx_manifesto() -> str:
f'It enforces the class structure. It compiles " {x("https://react.dev/learn/writing-markup-with-jsx", "JSX")} " into createElement calls. '
f'It transforms " {x("https://www.typescriptlang.org", "TypeScript")} " into JavaScript. '
f'It processes " {x("https://sass-lang.com", "Sass")} " into CSS. '
'It tree-shakes. It code-splits. It hot-module-replaces. '
f'It " {x("https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking", "tree-shakes")} ". It " {x("https://developer.mozilla.org/en-US/docs/Glossary/Code_splitting", "code-splits")} ". It " {x("https://webpack.js.org/concepts/hot-module-replacement/", "hot-module-replaces")} ". '
'It does everything except let you write code and run it.")'
f' {p}'
f' " " {x("https://webpack.js.org", "webpack")} " begat " {x("https://rollupjs.org", "Rollup")} ". '
@@ -2631,9 +2631,11 @@ def _essay_sx_manifesto() -> str:
f' {p}'
' "The build step exists because the ruling languages cannot express '
f'" {i("/docs/components", "components")} ". '
'HTML has no composition model. CSS has no scoping. JavaScript has no template syntax. '
'The build step papers over these failures with transpilation, '
'and calls it developer experience."))'
f'" {x("https://html.spec.whatwg.org", "HTML")} " has no " {x("https://developer.mozilla.org/en-US/docs/Web/API/Web_components", "composition model")} ". '
f'" {x("https://www.w3.org/Style/CSS/", "CSS")} " has no " {x("https://developer.mozilla.org/en-US/docs/Web/CSS/@scope", "scoping")} ". '
f'" {x("https://developer.mozilla.org/en-US/docs/Web/JavaScript", "JavaScript")} " has no template syntax. '
f'The build step papers over these failures with " {x("https://en.wikipedia.org/wiki/Source-to-source_compiler", "transpilation")} ", '
f'and calls it " {x("https://en.wikipedia.org/wiki/User_experience#Developer_experience", "developer experience")} "."))'
# --- VI. The s-expressionist revolution ---
@@ -2644,7 +2646,7 @@ def _essay_sx_manifesto() -> str:
'There is no CSS-as-a-separate-language. '
'There is only the expression.")'
f' {p}'
' "Code is data. Data is DOM. DOM is code. '
f' " " {x("https://en.wikipedia.org/wiki/Homoiconicity", "Code is data")} ". Data is DOM. DOM is code. '
'The dialectical unity that HTML, JavaScript, and CSS '
'could never achieve — because they are three languages pretending to be one system — '
f'is the natural state of the s-expression, '
@@ -2665,15 +2667,15 @@ def _essay_sx_manifesto() -> str:
f'" {i("/docs/components", "defcomp")} " replaces the component model. defmacro replaces the plugin system. '
f'The " {i("/docs/evaluator", "evaluator")} " replaces the runtime. '
'What remains is not a framework but a language — '
'and languages do not have breaking changes between minor versions."))'
f'and languages do not have " {x("https://semver.org", "breaking changes")} " between minor versions."))'
# --- VII. Objections ---
' (~doc-section :title "VII. Objections from the bourgeoisie" :id "objections"'
f' {p}'
' "\\\"You would destroy the separation of concerns!\\\" they cry. '
f'The separation of concerns was destroyed long ago. "'
f' {x("https://react.dev", "React")} " components contain markup, logic, and inline styles. "'
f' "\\\"You would destroy the " {x("https://en.wikipedia.org/wiki/Separation_of_concerns", "separation of concerns")} "!\\\" they cry. '
f'The " {x("https://en.wikipedia.org/wiki/Separation_of_concerns", "separation of concerns")} " was destroyed long ago. "'
f' {x("https://react.dev", "React")} " components contain " {x("https://en.wikipedia.org/wiki/Markup_language", "markup")} ", logic, and " {x("https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/style", "inline styles")} ". "'
f' {x("https://vuejs.org/guide/scaling-up/sfc.html", "Vue single-file components")} " put template, script, and style in one file. "'
f' {x("https://tailwindcss.com", "Tailwind")} " puts styling in the markup. '
'The separation of concerns has been dead for years; '
@@ -2683,7 +2685,7 @@ def _essay_sx_manifesto() -> str:
f' {x("https://www.gnu.org/software/emacs/", "Emacs")} " has been running on s-expressions since 1976. "'
f' {x("https://clojure.org", "Clojure")} " runs Fortune 500 backends on s-expressions. '
f'Every " {x("https://en.wikipedia.org/wiki/Lisp_(programming_language)", "Lisp")} " programmer who ever lived has known what the web refuses to admit: '
'that the parenthesis is not a bug but the minimal syntax for structured data.")'
f'that the parenthesis is not a bug but the minimal syntax for " {x("https://en.wikipedia.org/wiki/S-expression", "structured data")} ".")'
f' {p}'
' "\\\"Where is the ecosystem?\\\" they cry. '
f'The ecosystem is the problem. Two million " {x("https://www.npmjs.com", "npm")} " packages, '
@@ -2693,7 +2695,7 @@ def _essay_sx_manifesto() -> str:
'composition, abstraction, and code-as-data.")'
f' {p}'
f' "\\\"But " {x("https://www.typescriptlang.org", "TypeScript")} "!\\\" they cry. TypeScript is a type system '
f'bolted onto a language that was designed in ten days '
f'bolted onto a language that was " {x("https://en.wikipedia.org/wiki/JavaScript#History", "designed in ten days")} " '
f'by " {x("https://en.wikipedia.org/wiki/Brendan_Eich", "a man")} " who wanted to write " {x("https://en.wikipedia.org/wiki/Scheme_(programming_language)", "Scheme")} ". '
'We have simply completed his original vision.")'
f' {p}'
@@ -2713,7 +2715,7 @@ def _essay_sx_manifesto() -> str:
'to whichever regime currently holds power.")'
f' {p}'
f' " " {x("https://en.wikipedia.org/wiki/CSS-in-JS", "CSS-in-JS")} " was the first attempt at annexation: '
'JavaScript consuming CSS entirely, reducing it to template literals '
f'JavaScript consuming CSS entirely, reducing it to " {x("https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals", "template literals")} " '
'and runtime overhead. '
'This provocation produced the counter-revolution of utility classes — '
f'" {x("https://tailwindcss.com", "Tailwind")} " — which reasserted CSS\'s independence '
@@ -2740,7 +2742,7 @@ def _essay_sx_manifesto() -> str:
'They openly declare that their ends can be attained only by the forcible overthrow '
'of all existing rendering conditions. '
'Let the ruling languages tremble at a parenthetical revolution. '
'The developers have nothing to lose but their node_modules.")'
f'The developers have nothing to lose but their " {x("https://docs.npmjs.com/cli/v10/configuring-npm/folders#node-modules", "node_modules")} ".")'
f' {p}'
' "The immediate aims of the s-expressionists are:")'
' (ol :class "space-y-2 text-stone-600 mt-2 list-decimal list-inside"'