Back to News
Advertisement
dderstruct about 8 hours ago 4 commentsRead Article on github.com

ES version is available. Content is displayed in original English for accuracy.

Doors: Server-driven UI framework + runtime for building stateful, reactive web applications in Go.

Some highlights:

* Front-end framework capabilities in server-side Go. Reactive state primitives, dynamic routing, composable components.

* No public API layer. No endpoint design needed, private temporal transport is handled under the hood.

* Unified control flow. No context switch between back-end/front-end.

* Integrated web stack. Bundle assets, build scripts, serve private files, automate CSP, and ship in one binary.

How it works: Go server is UI runtime: web application runs on a stateful server, while the browser acts as a remote renderer and input layer.

Security model: Every user can interact only with what you render to them. Means you check permissions when your render the button and that's is enough to be sure that related action wont be triggered by anyone else.

Mental model: Link DOM to the data it depends on.

Limitations:

* Does not make sense for static non-iteractive sites, client-first apps with simple routing, and is not suitable for offline PWAs.

* Load balancing and roll-outs without user interruption require different strategies with stateful server (mechanics to make it simpler is included).

Where it fits best: Apps with heavy user flows and complex business logic. Single execution context and no API/endpoint permission management burden makes it easier.

Peculiarities:

* Purposely build [Go language extension](https://github.com/doors-dev/gox) with its own LSP, parser, and editor plugins. Adds HTML as Go expressions and \`elem\` primitives.

* Custom concurrency engine that enables non-blocking event processing, parallel rendering, and tree-aware state propagation

* HTTP/3-ready synchronization protocol (rolling-request + streaming, events via regular post, no WebSockets/SSE)

From the author (me): It took me 1 year and 9 month to get to this stage. I rewrote the framework 6 or 7 times until every part is coherent, every decision feels right or is a reasonable compromise. I am very critical to my own work and I see flaws, but overall it turned out solid, I like developer experience as a user. Mental model requires a bit of thinking upfront, but pays off with explicit code and predictable outcome.

Code Example:

  type Search struct {
    input doors.Source[string] // reactive state
  }

  elem (s Search) Main() {
    <input
      (doors.AInput{
        On: func(ctx context.Context, r doors.RequestInput) bool {
          s.input.Update(ctx, r.Event().Value) // reactive state
          return false
        },
      })
      type="text"
      placeholder="search">

    ~// subscribe results to state changes
    ~(doors.Sub(s.input, s.results))
  }

  elem (s Search) results(input string) {
    ~(for _, user := range Users.Search(input) {
      <card>
        ~(user.Name)
      </card>
    })
  }
Advertisement

⚡ Community Insights

Discussion Sentiment

100% Positive

Analyzed from 109 words in the discussion.

Trending Topics

#looks#interesting#small#apps#code#skills#related#test#internal#tools

Discussion (4 Comments)Read Original on HackerNews

dchukabout 2 hours ago
Looks interesting for small internal tools and apps, especially with go’s simple deployment model. Do you already have a Claude code plugin or skills files for it? That would likely help adoption
derstructabout 1 hour ago
Actually I designed it with complex user flows and business logic in mind, but it's a good fit for small apps also.

I am new to this LLM stuff to be honest. But seems like it's a default way to write code currently in many domains. I would be grateful if you could share framework related plugins/skills that you found great.

starwalknabout 7 hours ago
It looks interesting, I'll wait for it to stand the test of time, maybe I'll get around to using it myself.
derstructabout 6 hours ago
I hope you will find time to test it out and I will be happy to assist. In the current AI hype era, it's difficult to get attention to anything not AI related, regardless of how good it is.