What’s not built yet

Read this before choosing star-burxt for something real. It is short, it is honest, and it is more useful to you than a feature list.

Not there yet

Carrying state costs two functions. A component that runs in a browser needs to_text and from_text, because nothing in Burxt holds state between two calls. That is a gap rather than a decision, and it is being worked on.

One event per element, and it is refused by name rather than silently taking the first. A handler is an expression with no end marker, so the first on: takes the rest of the line — STAR-E022 says so and tells you what to do instead. Put the second event on a wrapper, or handle both in the one you keep.

template and svg are not elements star knows, and both are decisions rather than omissions. A template’s children are inert and star renders children as live content, so admitting it would render exactly what the element exists not to render. svg is foreign content — its children are not HTML, so :path: and :circle: need a second vocabulary with its own content model. Everything else in HTML that holds phrasing or flow content is there, including time, abbr, kbd, iframe and audio, which were missing until they were looked for.

The editor does not show BMX’s four lint warnings, and that is a boundary rather than a gap. star’s language server is Burxt — which is what removed node from the extension’s requirements entirely — and BMX’s lint rules live only in its JavaScript reference implementation. The Burxt implementation of the format has bmx_parse, bmx_check and bmx_where, and no lint.

Every way of keeping the warnings is worse than losing them. Spawning node undoes the dependency removal. Reimplementing four rules here puts a second opinion in the one file whose own header says the second opinion is the one that would be wrong — and BMX’s history records two of those four having been too broad once, so a copy would inherit a judgement it cannot maintain. And BMX-W codes are deliberately not conformance: BMX tells a third-party implementer that lints are optional and no fixture requires them, so two implementations obliged to agree would quietly promote them toward conformance — a change to what the format asks of everyone who implements it, in exchange for four warnings in one editor.

So the server says on startup that they are unavailable, and the protocol test asserts that it says so. Nothing degrades silently, and the day BMX chooses to add bmx_lint to its own public surface the warnings come back with no change here.

Publishing a component library needs a compiler newer than any release. star’s side is built: use "mylib/Card.sbmx" resolves through the package, the component is generated into .star/ in your tree, and its props are checked at the call site exactly as a local component’s are. It works by asking the compiler where a package sits — burxt where — because that location is derived from the dependency’s source and is deliberately not something star may re-derive.

That command is not in a Burxt release yet, so on today’s burxt a package-qualified import falls back to being read as a path and is refused, with the compiler’s own message passed through underneath star’s. A third-party Burxt library has always worked and still does — declare it, use "mylib/money.bx" in your ===bx section, and the compiler resolves it the ordinary way.

A block that only wraps something is still worth avoiding. A span holding nothing but a square is three tokens of markup for a shape CSS can draw — ===style.local with a ::before is usually the better answer, and it keeps the document about content.

Deliberately not planned

Two-way binding beyond on:input. A value flows in and an event flows out, and that is the whole path.

Anything that runs on the page but not in your document. No directives, no lifecycle hooks, no plugin system. What the page does is what your document says.

Where it is a good fit today

  • a screen made of data you already have
  • forms, counters, filters, toggles
  • anything with prices on it — this is where star-burxt earns its place
  • a page that must render the same on the server and in the browser

Where it is not, yet

  • a control that needs two different events on the same element

When this changes

This page is kept accurate rather than optimistic. If something moves off the first list, it moves off this page in the same change.