TermDOM is een JavaScript-bibliotheek die HTML en CSS rendert in de terminal door actuele DOM-nodes te vertalen naar terminaluitvoer. Hiermee kunnen ontwikkelaars TUI's (Terminal User Interfaces) en interactieve CLI's bouwen met vanilla JavaScript of bestaande frontend frameworks.
Belangrijkste kenmerken:
Styling & Layout: Ondersteuning voor CSS-stijlbladen, flexbox en table layout, vertaald naar ANSI-escapecodes.
Interactie: Ondersteuning voor events (toetsen, muis), formulieren (<input>, <textarea>) en tab-navigatie.
Web Standaarden: Implementatie van MutationObserver, ResizeObserver en Web Components via customElements.define().
Tekst & Weergave: Correcte weergave van emoji's, CJK-tekens en RTL-talen (Arabisch/Hebreeuws), inclusief ondersteuning voor selectie en volledig scherm.
De bibliotheek is compatibel met Node, Bun en Deno en bevat diverse voorbeeldapplicaties zoals een Markdown-viewer, een LLM-chatclient en een bestandskiezer.
TermDOM: Bouw terminal-apps met HTML, CSS en de DOM
Stijlbladen: CSS uit <style>-elementen en style-attributen cascadeert en erft op dezelfde manier als in de browser. Dit wordt vertaald naar ANSI-escapecodes voor kleur en tekstdecoratie.
Layout: Het CSS box model, flexbox en table layout worden volledig ondersteund.
Scrollen: Documenten die hoger zijn dan de terminal kunnen worden gescrold met window.scrollTo() en element.scrollIntoView().
Events: Events voor toetsen, muis, focus en plakken (paste) worden getriggerd op elementen, het document en het window, aangestuurd via STDIN.
DOM-hulpprogramma's: document.querySelector(), MutationObserver, ResizeObserver en Element.getBoundingClientRect() zijn gekoppeld aan de layout-engine en viewport, conform de browserstandaarden.
Formulieren: <input>, <textarea>, <select>, checkboxes en radios beschikken over standaardgedrag en een terminal-native uiterlijk, en kunnen worden gestyled met gewoon CSS. Tab-navigatie en :focus-stijlen worden ondersteund.
Web Components: customElements.define(), attachShadow(), <slot>, :host en scoped styles werken zoals in de browser. De ingebouwde formulierbesturingselementen zijn zelf shadow trees.
Tekst: CJK, emoji's en combinerende tekens nemen de correcte breedte in beslag. Hebreeuws en Arabisch worden gerenderd in visuele volgorde met contextuele vormgeving, waarbij de cursor per grafeem beweegt.
Selectie: Sleep om tekst te selecteren, gestyled met ::selection.
Volledig scherm: Element.requestFullscreen() rendert een element naar het alternatieve scherm. Bij het afsluiten worden de shell en de scrollback hersteld.
Voorbeelden
De volgende voorbeelden zijn beschikbaar:
markdown.ts: Een Markdown-viewer die pagina's aanmaakt wanneer het document hoger is dan de terminal.
chat.ts: Een streaming LLM-chatclient aangedreven door ch.at, inclusief een transcript en composer.
todomvc.ts: De officiële TodoMVC met ongewijzigde componentlogica; alleen het stylesheet is vervangen.
fuzzy-finder.ts: Een bestandskiezer die de selectie naar stdout print.
Meer uitvoerbare voorbeelden zijn te vinden in de map examples/.
Runtimes
TermDOM draait op Node, Bun en Deno. De bibliotheek bevat geen native componenten en kan worden gebruikt om binaries te maken met tools zoals bun build --compile.
Compatibiliteit
Het bestand COMPATIBILITY.md wordt gegenereerd door elke functie te testen tegen de engine.
Licentie
MIT
TermDOM is een JavaScript-bibliotheek die HTML en CSS weergeeft in de terminal. De bibliotheek tekent actuele DOM-nodes naar de terminaluitvoer en werkt het scherm bij wanneer deze muteren. Hierdoor kunnen TUI's (Terminal User Interfaces) en interactieve CLI's worden geschreven met vanilla JavaScript of elk frontend webframework.
TermDOM: Bouw terminal-apps met HTML, CSS en de DOM
Stijlbladen: CSS uit <style>-elementen en style-attributen cascadeert en erft op dezelfde manier als in de browser. Dit wordt vertaald naar ANSI-escapecodes voor kleur en tekstdecoratie.
Layout: Het CSS box model, flexbox en table layout worden volledig ondersteund.
Scrollen: Documenten die hoger zijn dan de terminal kunnen worden gescrold met window.scrollTo() en element.scrollIntoView().
Events: Events voor toetsen, muis, focus en plakken (paste) worden getriggerd op elementen, het document en het window, aangestuurd via STDIN.
DOM-hulpprogramma's: document.querySelector(), MutationObserver, ResizeObserver en Element.getBoundingClientRect() zijn gekoppeld aan de layout-engine en viewport, conform de browserstandaarden.
Formulieren: <input>, <textarea>, <select>, checkboxes en radios beschikken over standaardgedrag en een terminal-native uiterlijk, en kunnen worden gestyled met gewoon CSS. Tab-navigatie en :focus-stijlen worden ondersteund.
Web Components: customElements.define(), attachShadow(), <slot>, :host en scoped styles werken zoals in de browser. De ingebouwde formulierbesturingselementen zijn zelf shadow trees.
Tekst: CJK, emoji's en combinerende tekens nemen de correcte breedte in beslag. Hebreeuws en Arabisch worden gerenderd in visuele volgorde met contextuele vormgeving, waarbij de cursor per grafeem beweegt.
Selectie: Sleep om tekst te selecteren, gestyled met ::selection.
Volledig scherm: Element.requestFullscreen() rendert een element naar het alternatieve scherm. Bij het afsluiten worden de shell en de scrollback hersteld.
Voorbeelden
De volgende voorbeelden zijn beschikbaar:
markdown.ts: Een Markdown-viewer die pagina's aanmaakt wanneer het document hoger is dan de terminal.
chat.ts: Een streaming LLM-chatclient aangedreven door ch.at, inclusief een transcript en composer.
todomvc.ts: De officiële TodoMVC met ongewijzigde componentlogica; alleen het stylesheet is vervangen.
fuzzy-finder.ts: Een bestandskiezer die de selectie naar stdout print.
Meer uitvoerbare voorbeelden zijn te vinden in de map examples/.
Runtimes
TermDOM draait op Node, Bun en Deno. De bibliotheek bevat geen native componenten en kan worden gebruikt om binaries te maken met tools zoals bun build --compile.
Compatibiliteit
Het bestand COMPATIBILITY.md wordt gegenereerd door elke functie te testen tegen de engine.
Licentie
MIT
Zichtbare categorieën
Kies welke categorieën je wilt zien.
Over deze site
Waarom Tech-update?
Tech-update is ontstaan omdat ik merkte dat ik dagelijks veel verschillende websites moest bezoeken om interessant technieuws te vinden. Dat kon efficiënter.
Hoe werkt het?
Meerdere keren per etmaal gaat mijn zelfgebouwde AI-agent op zoek naar interessante artikelen op blogs en nieuwssites.
Vindt hij iets relevants, dan wordt het artikel naar het Nederlands vertaald en op Tech-Update geplaatst.
Van ieder artikel maakt de AI ook een korte samenvatting. Zo kun je snel bepalen of het de moeite waard is om het volledige artikel te lezen.
Bij ieder artikel staat altijd een link naar de oorspronkelijke bron (vaak een Engelstalige website).
Artikelen kun je bewaren als favoriet, vastzetten in de zijbalk of terugvinden via de zoekfunctie.
In de instellingen (tandwielikoon rechtsboven) geef je aan in welk soort nieuws je geïnteresseert bent.