# quartzgun A lightweight web framework for Go ![Quartz Gun effect from Eureka Seven AO, showing a tree of light spanning down to the earth with its root in low orbit](./quartzgun.png) ## philosophy/design `quartzgun` is designed to enable speedy development of efficient web sites and APIs in Go. There are no dependencies outside of the standard library except for `bcrypt`, and the library is modular -- you can use any part of it independently. The router uses the `func(http.Handler) http.Handler` middleware pattern so that you can plug and play existing middleware. There are pre-made `renderers` which are designed as plug and play endpoints in your middleware chains. They are used for providing the basic functionality of the route, rendering an HTML template in the case of a normal page, or JSON or XML for API endpoints. The `auth` system is designed from scratch to provide a modular system where new authentication/authorization backends can be added easily by satisfying the `auth.UserStore` interface. ### about the name Thinking about URL routes reminded me of the tree of light the fictional [Quartz Gun](https://eurekaseven.fandom.com/wiki/Quartz_Gun) emits when fired, so I named the library `quartzgun`. ## usage A more complete usage guide will be forthcoming, but for now you can check out the [quartzgun_test.go](https://nilfm.cc/git/quartzgun/tree/quartzgun_test.go) file for an overview of how to use it. ## roadmap/features Features may be added here at any time as things are in early stages right now: ### core functionality * [x] router (static service trees, paramaterized routes, and per-method handlers on routes) * [x] basic renderers (HTML template, JSON, XML) ### auth * [x] top-level wrapper for attaching `UserStore` backends to cookie handler * [x] POC [indental](https://wiki.xxiivv.com/site/indental.html) `UserStore` implementation ### etc * [x] middleware for easing auth flow: - [x] `Protected`: require login - [x] `Authorize`: login and redirect - [x] `Bunt`: logout and redirect - [x] `Fortify`: setup CSRF protection (use on the form) - [x] `Defend`: enact CSRF protection (use on the endpoint) * [ ] generic DAL wrapper? might be unneccessary ## license `quartzgun` is licensed under the MIT license -- see the [LICENSE](./LICENSE) file for details but the long and short of it is you can use/modify it for any reason, but give me (and other authors where applicable) credit for writing it. ## contributing Send patches to [nilix@nilfm.cc](mailto:nilix@nilfm.cc) using `git format-patch -s HEAD~`. The `-s` flag ensures that your name makes it into the commit log.