License

Full license (BUSL-1.1 with parameters)
Commercial summary
Commercial EULA (binding terms)

The summaries on this page are for convenience. The binding terms are in the files above.


doors is source-available under the Business Source License (BUSL-1.1) with a clear commercial path from doors dev LLC.

  • Free for development (non-production)
  • Free for non-commercial production (personal, education, research, non-profit) — pay-what-you-want optional
  • Commercial production requires a paid license (Startup, Business, or Enterprise)

After 4 years, each version of doors automatically converts to AGPL-3.0.

Tiers

Free (Development)

Anyone may use doors free of charge for development, testing, evaluation, or other non-production activities.

Free (Non-Commercial Production)

Use in production is also free for personal projects, educational use, academic research, or non-profit activities. Support the project optionally with a pay-what-you-want contribution.

Startup License

  • Eligibility — all must be true:
    • Annual revenue < USD $1,000,000
    • Incorporated < 2 years
    • Fewer than 10 employees
  • Scope: Internal production use on your own domain(s)
  • Excludes: Client work or deployments on third-party domains

Business License

  • For established companies and agencies
  • Scope: Internal production use and client projects
  • Licensed per production domain (internal) and per client domain (for client work)

Enterprise License

  • Custom terms for large organizations or special use cases
  • Scope may be domain-linked, company-wide, or enterprise-wide as defined in the Order Form
v0.5.7 beta
Back-end UI Framework

for feature-rich, secure, and fast web apps in Go

← Click

type Counter struct {
	// dynamic component
	door doors.Door
	// local state
	count int
}

// fragment render function
templ (c *Counter) Render() {
	// attach click handler to the next element
	@doors.AClick{
		On: func(ctx context.Context, _ doors.REvent[doors.PointerEvent]) bool {
			c.increment(ctx)
			// not done, keep hook active
			return false
		},
	}
	<button class="contrast">Click Me</button>
	// render dynamic component 
	@c.door {
		// initial content
		← Click
	}
}

func (c *Counter) increment(ctx context.Context) {
	c.count += 1
	// update dynamic component with the new content
	c.door.Update(ctx, doors.Text(c.count))
}

Features

Modern like SPA
  • Live updates & UI event handling
  • Composable components
  • Reactive state when needed
  • Built with UX in mind
API-Free Architecture
  • What’s visible is all that’s accessible
  • No REST/GraphQL APIs required
  • Browser acts as human I/O
Explicit & Type-Safe
  • Direct connection from event to DOM update
  • State as dependency
  • Route as data
Straight like MPA
  • Server owns the control flow
  • Natural server-side rendering
  • Fast loads and functional href links
  • Form handling via FormData requests
NPM-Free Development
  • No Node.js required to build or run
  • Front-end JS/TS integration when needed
  • JS/TS builder and bundler included
Performant & Lightweight
  • Non-blocking event handling & parallel rendering
  • Extra-thin client side (<10KB gzipped)
  • Minimal server RAM footprint (~40KB average page)

Perfect For

SaaS Products

Iterate fast with only server-side code; integrate external systems directly within the server environment.

Business Process Automation (ERP, CRM, etc.)

Control UI flow from the server; forget the pain of API permissions.

Customer Portals

Keep sophisticated business logic and sensitive operations in a secure, type-safe environment.

Administrative and Internal Tools

Get the job done with zero JavaScript.

Tutorial

License

doors is source-available under the BUSL-1.1 from doors dev LLC. It’s designed to be generous for builders and clear for businesses. This is a quick overview — see license for the binding terms.
Free while you build

Use doors at no cost for development, testing, and evaluation.

Free for non-commercial production

Personal, education, research, and non-profit projects can run in production for free.

Clear commercial path

Commercial production use is covered by simple lifetime licenses — no subscriptions, no surprises.

Future open source

Each version automatically converts to AGPL-3.0 after 4 years.

See pricing & plans