Skip to content

Repository files navigation

🚀 Framework

A minimal yet powerful web framework with builtin support for ssr html pages and SPA microfrontend splits

Features:

  • Simple routing & templating (HTML/Go templates)
  • Automatic microfrontend support for multiple SPAs
  • 1 Go dependency: esbuild
    • Use anything esbuild supports, like TypeScript, JavaScript, JSX, TSX, and CSS
  • NO NodeJS process required - no Webpack, Babel, Vite, Rollup, etc.
  • Clean /templates + /frontend folder structure
  • Autoreload when in development mode
  • Optional Accompanying JavaScript library for frontend development
    • Server Sent Events handler, Router, state management, and elements

🚦 Quickstart

Check out the framework-template starter repository to quickly scaffold your project structure and get started.

1. Project Structure

your-project/
├── templates/ # HTML templates & components
│ ├── base.html # Required: Base layout
│ ├── entry.html # Required: html snippet with js and css imports - autogenerated by esbuild on changes
│ ├── index.html # Required: Default html page
│ ├── other.html # "/other" route auto-registered
│ └── app.subroute.html # "/app/" subroute auto-registered for the app - an easy way to add a new SPA
├── static # bundled js files place here, you can .gitignore this
├── frontend/
│ └── src/
│ └── index.ts # Your frontend entrypoint, customize and codesplit as needed
└── main.go # Your server
  1. Get started with all the defaults:
package main
import (
"net/http""github.com/bencbradshaw/framework"
)
funcmain() {
http.ListenAndServe(":2025", framework.Run(nil))
}
  1. Override the defaults:
package main
import (
"net/http""os""github.com/bencbradshaw/framework""github.com/evanw/esbuild/pkg/api"
)
funcmain() {
mux:=framework.Run(framework.InitParams{
IsDevMode: false,
AutoRegisterTemplateRoutes: false,
EsbuildOpts: api.BuildOptions{
EntryPoints: []string{"./app/src/my-app.tsx"},
},
})
// add your own routes, the same as you would with the default muxmux.Handle("/api/hello-world", http.HandlerFunc(func(w http.ResponseWriter, r*http.Request) {
w.Write([]byte("Hello, World!"))
}))
http.ListenAndServe(":2025", mux)
}

🚧 In Progress Features

  • Support for Multiple Base Templates

    • Allow customization of JavaScript or CSS for different templates.
    • Your home page and about page might need different CSS or JS loaded.
  • Image Hosting

    • Provide built-in support for serving and managing images.
    • This will be simply a folder served with static files
  • Authentication Guard

    • Offer a middleware mechanism to enable developers to implement custom authentication logic for route handlers.
    • Rather than providing an authentication system, this will allow developers to use their own authentication systems that can tie into the framework.
  • Customizable Templates Directory

    • Ensure the /templates directory path can be configured as needed.
  • Template Naming Conventions

    • Clearly define and enforce a consistent naming pattern for templates to improve maintainability.
    • .html and subroute.html, base and entry. What do they mean and how do they work

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages