41554 blogs · [ { "id": "01a0879f-d68e-70df-8ea8-c9011ea6e58d", "title": "Collaborative Editing in Wordgard", "url": "http://marijnhaverbeke.nl/blog/collaborative-editing-wordgard.html", "published_at": "2026-07-08T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9011efa7467", "title": "Wordgard Release 0.1", "url": "http://marijnhaverbeke.nl/blog/wordgard-0.1.html", "published_at": "2026-07-01T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9011f48a17f", "title": "TypeScript's unknown type and type variance", "url": "http://marijnhaverbeke.nl/blog/unknown-type-variance.html", "published_at": "2026-01-02T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90120068f3b", "title": "Addressing Editor Content", "url": "http://marijnhaverbeke.nl/blog/addressing-editor-content.html", "published_at": "2025-09-29T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90120088ed6", "title": "Reference Semantics and Value Semantics", "url": "http://marijnhaverbeke.nl/blog/value-reference-semantics.html", "published_at": "2024-10-24T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90120c726ba", "title": "CodeMirror 6.0", "url": "http://marijnhaverbeke.nl/blog/codemirror-6.html", "published_at": "2022-06-07T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c901213f8e96", "title": "Facets as Composable Extension Points", "url": "http://marijnhaverbeke.nl/blog/facets.html", "published_at": "2022-06-06T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90121ec2fa6", "title": "CodeMirror 6 Enters Beta", "url": "http://marijnhaverbeke.nl/blog/codemirror-6-beta.html", "published_at": "2020-06-28T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90122ce689e", "title": "Collaborative Editing in CodeMirror", "url": "http://marijnhaverbeke.nl/blog/collaborative-editing-cm.html", "published_at": "2020-05-13T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90122e01cab", "title": "CodeMirror MOSS project report", "url": "http://marijnhaverbeke.nl/blog/codemirror-moss.html", "published_at": "2019-11-28T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012324bfbc", "title": "Lezer", "url": "http://marijnhaverbeke.nl/blog/lezer.html", "published_at": "2019-09-02T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90124157e24", "title": "CodeMirror 6 Status Update", "url": "http://marijnhaverbeke.nl/blog/codemirror-6-progress.html", "published_at": "2019-08-29T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90125078991", "title": "Computing Indentation from Syntax Trees", "url": "http://marijnhaverbeke.nl/blog/indent-from-tree.html", "published_at": "2019-08-28T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012554776d", "title": "Extensible Extension Mechanisms", "url": "http://marijnhaverbeke.nl/blog/extensibility.html", "published_at": "2019-08-26T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c901261e63bd", "title": "ProseMirror 1.0", "url": "http://marijnhaverbeke.nl/blog/prosemirror-1.html", "published_at": "2017-10-12T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012688b006", "title": "My JavaScript Build Setup", "url": "http://marijnhaverbeke.nl/blog/my-babel-setup.html", "published_at": "2016-03-22T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90127291465", "title": "Being a Resident at the Recurse Center", "url": "http://marijnhaverbeke.nl/blog/recurse-center.html", "published_at": "2015-12-02T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012736cc79", "title": "Collaborative Editing in ProseMirror", "url": "http://marijnhaverbeke.nl/blog/collaborative-editing.html", "published_at": "2015-07-27T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90127a8dd9e", "title": "ProseMirror", "url": "http://marijnhaverbeke.nl/blog/prosemirror.html", "published_at": "2015-07-06T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012883be6e", "title": "More Money For Better Open-Source Software", "url": "http://marijnhaverbeke.nl/blog/sustainable-maintenance.html", "published_at": "2015-06-21T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90128a577a9", "title": "Display Updates in CodeMirror", "url": "http://marijnhaverbeke.nl/blog/display-updates-in-codemirror.html", "published_at": "2014-10-01T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90128d6d28a", "title": "Eloquent JavaScript's Build System", "url": "http://marijnhaverbeke.nl/blog/eloquent-javascipts-build-system.html", "published_at": "2014-09-07T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012913d1c2", "title": "Review: If Hemingway Wrote JavaScript", "url": "http://marijnhaverbeke.nl/blog/if-hemingway-wrote-javascript.html", "published_at": "2014-09-07T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90129b63f97", "title": "On null and undefined in JavaScript", "url": "http://marijnhaverbeke.nl/blog/null-and-undefined.html", "published_at": "2013-07-24T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012a0cd76d", "title": "Tern", "url": "http://marijnhaverbeke.nl/blog/tern.html", "published_at": "2013-04-18T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012ac9ecbc", "title": "Shared documents in CodeMirror", "url": "http://marijnhaverbeke.nl/blog/codemirror-shared-documents.html", "published_at": "2013-01-21T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012b59e7cc", "title": "Parsing line noise as JavaScript", "url": "http://marijnhaverbeke.nl/blog/parse-dammit.html", "published_at": "2013-01-20T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012c2eec36", "title": "Postmodern 1.19 released", "url": "http://marijnhaverbeke.nl/blog/postmodern-1.19.html", "published_at": "2012-11-27T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012d0b6763", "title": "A tale of a pathological scrolling model", "url": "http://marijnhaverbeke.nl/blog/a-pathological-scrolling-model.html", "published_at": "2012-10-30T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012dec82ff", "title": "Overloading plain text: CodeMirror marked ranges", "url": "http://marijnhaverbeke.nl/blog/codemirror-marked-ranges.html", "published_at": "2012-10-29T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012e4f725e", "title": "Acorn: yet another JavaScript parser", "url": "http://marijnhaverbeke.nl/blog/acorn.html", "published_at": "2012-10-01T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012f345731", "title": "CodeMirror's mode system", "url": "http://marijnhaverbeke.nl/blog/codemirror-mode-system.html", "published_at": "2012-09-19T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9012fe289ef", "title": "CodeMirror 2.34 and 3.0beta1 released", "url": "http://marijnhaverbeke.nl/blog/codemirror-2.34-and-3beta1.html", "published_at": "2012-09-18T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90130e18bf3", "title": "Faking an editable control in browser JavaScript", "url": "http://marijnhaverbeke.nl/blog/browser-input-reading.html", "published_at": "2012-09-17T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c901312cffcb", "title": "JavaScript closure vs. object look-up performance", "url": "http://marijnhaverbeke.nl/blog/closure-vs-object-performance.html", "published_at": "2012-09-12T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c901312db53a", "title": "CodeMirror's document representation", "url": "http://marijnhaverbeke.nl/blog/codemirror-line-tree.html", "published_at": "2012-09-09T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c9013203218b", "title": "Heckle, or how I shall try to blog again", "url": "http://marijnhaverbeke.nl/blog/heckle.html", "published_at": "2012-09-05T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90132173dbc", "title": "Cursor motion & bi-directional text", "url": "http://marijnhaverbeke.nl/blog/cursor-in-bidi-text.html", "published_at": "2012-09-04T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c90132bd2a24", "title": "A Gentle Introduction to Machine Fundamentals", "url": "http://marijnhaverbeke.nl/turtle/", "published_at": "2011-01-17T23:00:00+00:00" }, { "id": "01a0879f-d68e-70df-8ea8-c901332a9ffd", "title": "Announcing: CL-TK", "url": "http://marijnhaverbeke.nl/blog/cl-tk.html", "published_at": "2009-03-15T23:00:00+00:00" } ] posts Claim your blog
Back to marijnhaverbeke.nl
Blog · corpus.blog/blogs/marijnhaverbeke.nl/posts

marijnhaverbeke.nl

marijnhaverbeke.nl

2026

2025

2024

2022

2020

2019

2017

2016

2015

2014

2013

18 Apr 2013

2012

2011

2009