iris/README.md

469 lines
24 KiB
Markdown
Raw Normal View History

# Iris
<p>
Iris is an <b>efficient</b> and well-designed, <b>cross-platform, web framework</b> with robust set of <b>features</b>.<br/>Build your own <b>high-performance</b> web applications and <b>APIs</b> powered by unlimited <b>potentials and portability</b>.<br/>
<a href="https://travis-ci.org/kataras/iris"><img src="https://api.travis-ci.org/kataras/iris.svg?branch=v6&style=flat-square" alt="Build Status"></a>
<a href="http://goreportcard.com/report/kataras/iris"><img src="https://img.shields.io/badge/report%20card%20-a%2B-F44336.svg?style=flat-square" alt="http://goreportcard.com/report/kataras/iris"></a>
<a href="http://support.iris-go.com"><img src="https://img.shields.io/badge/support-page-ec2eb4.svg?style=flat-square" alt="Iris support forum"></a> <!-- <a href="https://github.com/kataras/iris/blob/v6/HISTORY.md"><img src="https://img.shields.io/badge/codename-Νεxτ%20-blue.svg?style=flat-square" alt="CHANGELOG/HISTORY"></a> --><a href="https://github.com/kataras/iris/tree/v6/_examples#table-of-contents"><img src="https://img.shields.io/badge/examples-%20repository-3362c2.svg?style=flat-square" alt="Examples for new Gophers"></a>
<a href="https://godoc.org/gopkg.in/kataras/iris.v6"><img src="https://img.shields.io/badge/docs-%20reference-5272B4.svg?style=flat-square" alt="Docs"></a>
<a href="https://kataras.rocket.chat/channel/iris"><img src="https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square" alt="Chat"></a>
<a href="https://github.com/kataras/iris#buy-me-a-cup-of-coffee"><img src="https://img.shields.io/badge/support-%20open--source-F4A460.svg?logo=data:image%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIGZpbGw9InJnYigyMjAsMjIwLDIyMCkiIGQ9Ik04ODYuNiwzMDUuM2MtNDUuNywyMDMuMS0xODcsMzEwLjMtNDA5LjYsMzEwLjNoLTc0LjFsLTUxLjUsMzI2LjloLTYybC0zLjIsMjEuMWMtMi4xLDE0LDguNiwyNi40LDIyLjYsMjYuNGgxNTguNWMxOC44LDAsMzQuNy0xMy42LDM3LjctMzIuMmwxLjUtOGwyOS45LTE4OS4zbDEuOS0xMC4zYzIuOS0xOC42LDE4LjktMzIuMiwzNy43LTMyLjJoMjMuNWMxNTMuNSwwLDI3My43LTYyLjQsMzA4LjktMjQyLjdDOTIxLjYsNDA2LjgsOTE2LjcsMzQ4LjYsODg2LjYsMzA1LjN6Ii8%2BPHBhdGggZmlsbD0icmdiKDIyMCwyMjAsMjIwKSIgZD0iTTc5MS45LDgzLjlDNzQ2LjUsMzIuMiw2NjQuNCwxMCw1NTkuNSwxMEgyNTVjLTIxLjQsMC0zOS44LDE1LjUtNDMuMSwzNi44TDg1LDg1MWMtMi41LDE1LjksOS44LDMwLjIsMjUuOCwzMC4ySDI5OWw0Ny4zLTI5OS42bC0xLjUsOS40YzMuMi0yMS4zLDIxLjQtMzYuOCw0Mi45LTM2LjhINDc3YzE3NS41LDAsMzEzLTcxLjIsMzUzLjItMjc3LjVjMS4yLTYuMSwyLjMtMTIuMSwzLjEtMTcuOEM4NDUuMSwxODIuOCw4MzMuMiwxMzAuOCw3OTEuOSw4My45TDc5MS45LDgzLjl6Ii8%2BPC9zdmc%2B" alt="Buy me a cup of coffee"></a>
</p>
What you say about Iris ✌
-----------
<p>
<a href="https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7">
<img width="300" src="http://iris-go.com/comment28.png" />
</a>
<a href="https://twitter.com/gelnior/status/769100480706379776">
<img width="300" src="http://iris-go.com/comment27.png" />
</a>
2016-10-01 09:03:06 +02:00
<br/>
<a href="https://twitter.com/_mgale/status/818591490305761280">
<img width="300" width="630" src="http://iris-go.com/comment25.png" />
</a>
<a href="https://twitter.com/MeAlex07/status/822799954188075008">
<img width="300" width="627" src="http://iris-go.com/comment26.png" />
</a>
<br/>
<a href="https://www.youtube.com/watch?v=jGx0LkuUs4A">
<img width="300"
src="https://github.com/iris-contrib/website/raw/gh-pages/assets/gif_link_to_yt.gif" alt="What people say" />
</a>
<a href="https://www.youtube.com/watch?v=jGx0LkuUs4A">
<img width ="300" src="https://github.com/iris-contrib/website/raw/gh-pages/assets/gif_link_to_yt2.gif" alt="What people say" />
</a>
<br/>
If you're coming from <a href="https://nodejs.org/en/">Node.js</a> world, this is the <a href="https://github.com/expressjs/express">expressjs</a> equivalent for the <a href="https://golang.org">Go Programming Language.</a><br/>
</p>
2016-10-01 09:03:06 +02:00
Legends [](https://github.com/kataras/iris#support)
-----------
[Juan Sebastián Suárez Valencia](https://github.com/Juanses) donated 20 EUR at September 11 of 2016
[Bob Lee](https://github.com/li3p) donated 20 EUR at September 16 of 2016
[Celso Luiz](https://github.com/celsosz) donated 50 EUR at September 29 of 2016
[Ankur Srivastava](https://github.com/ansrivas) donated 20 EUR at October 2 of 2016
[Damon Zhao](https://github.com/se77en) donated 20 EUR at October 21 of 2016
[exponity - consulting & digital transformation](https://github.com/exponity) donated 30 EUR at November 4 of 2016
[Thomas Fritz](https://github.com/thomasfr) donated 25 EUR at Jenuary 8 of 2017
[Thanos V.](http://mykonosbiennale.com/) donated 20 EUR at Jenuary 16 of 2017
[George Opritescu](https://github.com/International) donated 20 EUR at February 7 of 2017
[Lex Tang](https://github.com/lexrus) donated 20 EUR at February 22 of 2017
[Conrad Steenberg](https://github.com/hengestone) donated 25 EUR at March 23 of 2017
<!-- ANONYMOUS[*](https://github.com/kataras/iris#support) donated 356 EUR, last anonymous donation at 22 March of 2017
// No o need to show anonymous donations here, the full list is still shown at DONATIONS.md.
-->
Feature Overview
-----------
- Focus on high performance
- Automatically install and serve certificates from https://letsencrypt.org
- Robust routing and middleware ecosystem
- Build RESTful APIs
- Choose your favorite routes' path syntax between [httprouter](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-httprouter/main.go) and [gorillamux](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-gorillamux/main.go)
- Request-Scoped Transactions
- Group API's and subdomains with wildcard support
- Body binding for JSON, XML, Forms, can be extended to use your own custom binders
- More than 50 handy functions to send HTTP responses
- View system: supporting more than 6+ template engines, with prerenders. You can still use your favorite
- Define virtual hosts and (wildcard) subdomains with path level routing
- Graceful shutdown
- Limit request body
- Localization i18N
- Serve static files
- Cache
- Log requests
- Customizable format and output for the logger
- Customizable HTTP errors
- Compression (Gzip)
- Authentication
- OAuth, OAuth2 supporting 27+ popular websites
- JWT
- Basic Authentication
- HTTP Sessions
- Add / Remove trailing slash from the URL with option to redirect
- Redirect requests
- HTTP to HTTPS
- HTTP to HTTPS WWW
- HTTP to HTTPS non WWW
- Non WWW to WWW
- WWW to non WWW
- Highly scalable rich content render (Markdown, JSON, JSONP, XML...)
- Websocket-only API similar to socket.io
- Hot Reload on source code changes
- Typescript integration + Web IDE
- Checks for updates at startup
- Highly customizable
- Feels like you used iris forever, thanks to its Fluent API
- And many others...
Table of Contents
-----------
<a href="https://github.com/kataras/iris/tree/v6/_examples#table-of-contents"><img align="right" width="265" src="https://raw.githubusercontent.com/iris-contrib/website/gh-pages/assets/book/cover_4.jpg"></a>
* [Level: Beginner](_examples/beginner)
* [Hello World](_examples/beginner/hello-world/main.go)
* [Routes (using httprouter)](_examples/beginner/routes-using-httprouter/main.go)
* [Routes (using gorillamux)](_examples/beginner/routes-using-gorillamux/main.go)
* [Internal Application File Logger](_examples/beginner/file-logger/main.go)
* [Write JSON](_examples/beginner/write-json/main.go)
* [Read JSON](_examples/beginner/read-json/main.go)
* [Read Form](_examples/beginner/read-form/main.go)
* [Favicon](_examples/beginner/favicon/main.go)
* [File Server](_examples/beginner/file-server/main.go)
* [Send Files](_examples/beginner/send-files/main.go)
* [Stream Writer](_examples/beginner/stream-writer/main.go)
* [Listen UNIX Socket](_examples/beginner/listen-unix/main.go)
* [Listen TLS](_examples/beginner/listen-tls/main.go)
* [Listen Letsencrypt (Automatic Certifications)](_examples/beginner/listen-letsencrypt/main.go)
* [Level: Intermediate](_examples/intermediate)
* [Send An E-mail](_examples/intermediate/e-mail/main.go)
* [Upload/Read Files](_examples/intermediate/upload-files/main.go)
* [Request Logger](_examples/intermediate/request-logger/main.go)
* [Profiling (pprof)](_examples/intermediate/pprof/main.go)
* [Basic Authentication](_examples/intermediate/basicauth/main.go)
* [HTTP Access Control](_examples/intermediate/cors/main.go)
* [Cache Markdown](_examples/intermediate/cache-markdown/main.go)
* [Localization and Internationalization](_examples/intermediate/i18n/main.go)
* [Recovery](_examples/intermediate/recover/main.go)
* [Graceful Shutdown](_examples/intermediate/graceful-shutdown/main.go)
* [Custom TCP Listener](_examples/intermediate/custom-listener/main.go)
* [Custom HTTP Server](_examples/intermediate/custom-httpserver/main.go)
* [View Engine](_examples/intermediate/view)
* [Overview](_examples/intermediate/view/overview/main.go)
* [Template HTML: Part Zero](_examples/intermediate/view/template_html_0/main.go)
* [Template HTML: Part One](_examples/intermediate/view/template_html_1/main.go)
* [Template HTML: Part Two](_examples/intermediate/view/template_html_2/main.go)
* [Template HTML: Part Three](_examples/intermediate/view/template_html_3/main.go)
* [Template HTML: Part Four](_examples/intermediate/view/template_html_4/main.go)
* [Inject Data Between Handlers](_examples/intermediate/view/context-view-data/main.go)
* [Embedding Templates Into Executable](_examples/intermediate/view/embedding-templates-into-app)
* [Custom Renderer](_examples/intermediate/view/custom-renderer/main.go)
* [Password Hashing](_examples/intermediate/password-hashing/main.go)
* [Sessions](_examples/intermediate/sessions)
* [Overview](_examples/intermediate/sessions/overview/main.go)
* [Encoding & Decoding the Session ID: Secure Cookie](_examples/intermediate/sessions/securecookie/main.go)
* [Standalone](_examples/intermediate/sessions/standalone/main.go)
* [With A Back-End Database](_examples/intermediate/sessions/database/main.go)
* [Flash Messages](_examples/intermediate/flash-messages/main.go)
* [Websockets](_examples/intermediate/websockets)
* [Ridiculous Simple](_examples/intermediate/websockets/ridiculous-simple/main.go)
* [Overview](_examples/intermediate/websockets/overview/main.go)
* [Connection List](_examples/intermediate/websockets/connectionlist/main.go)
* [Native Messages](_examples/intermediate/websockets/naive-messages/main.go)
* [Secure](_examples/intermediate/websockets/secure/main.go)
* [Custom Go Client](_examples/intermediate/websockets/custom-go-client/main.go)
* [Level: Advanced](_examples/advanced)
* [Transactions](_examples/advanced/transactions/main.go)
* [HTTP Testing](_examples/advanced/httptest/main_test.go)
* [Watch & Compile Typescript source files](_examples/advanced/typescript/main.go)
* [Cloud Editor](_examples/advanced/cloud-editor/main.go)
* [Online Visitors](_examples/advanced/online-visitors/main.go)
* [URL Shortener using BoltDB](_examples/advanced/url-shortener/main.go)
* [Subdomains](_examples/advanced/subdomains)
* [Single](_examples/advanced/subdomains/single/main.go)
* [Multi](_examples/advanced/subdomains/multi/main.go)
* [Wildcard](_examples/advanced/subdomains/wildcard/main.go)
2017-01-25 21:19:06 +01:00
Installation
-----------
2016-10-01 09:03:06 +02:00
The only requirement is the [Go Programming Language](https://golang.org/dl/), at least 1.8
```sh
$ go get gopkg.in/kataras/iris.v6
```
Overview
-----------
```go
package main
import (
"gopkg.in/kataras/iris.v6"
"gopkg.in/kataras/iris.v6/adaptors/cors"
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
"gopkg.in/kataras/iris.v6/adaptors/view"
)
func main() {
// Receives optional iris.Configuration{}, see ./configuration.go
// for more.
app := iris.New()
// Order doesn't matter,
// You can split it to different .Adapt calls.
// See ./adaptors folder for more.
app.Adapt(
// adapt a logger which prints all errors to the os.Stdout
iris.DevLogger(),
// adapt the adaptors/httprouter or adaptors/gorillamux
httprouter.New(),
// 5 template engines are supported out-of-the-box:
//
// - standard html/template
// - amber
// - django
// - handlebars
// - pug(jade)
//
// Use the html standard engine for all files inside "./views" folder with extension ".html"
view.HTML("./views", ".html"),
// Cors wrapper to the entire application, allow all origins.
cors.New(cors.Options{AllowedOrigins: []string{"*"}}))
// http://localhost:6300
// Method: "GET"
// Render ./views/index.html
app.Get("/", func(ctx *iris.Context) {
ctx.Render("index.html", iris.Map{"Title": "Page Title"}, iris.RenderOptions{"gzip": true})
})
// Group routes, optionally: share middleware, template layout and custom http errors.
userAPI := app.Party("/users", userAPIMiddleware).
Layout("layouts/userLayout.html")
{
// Fire userNotFoundHandler when Not Found
// inside http://localhost:6300/users/*anything
userAPI.OnError(404, userNotFoundHandler)
// http://localhost:6300/users
// Method: "GET"
userAPI.Get("/", getAllHandler)
// http://localhost:6300/users/42
// Method: "GET"
userAPI.Get("/:id", getByIDHandler)
// http://localhost:6300/users
// Method: "POST"
userAPI.Post("/", saveUserHandler)
}
// Start the server at 127.0.0.1:6300
app.Listen(":6300")
}
func userAPIMiddleware(ctx *iris.Context) {
// your code here...
println("Request: " + ctx.Path())
ctx.Next() // go to the next handler(s)
}
func userNotFoundHandler(ctx *iris.Context) {
// your code here...
ctx.HTML(iris.StatusNotFound, "<h1> User page not found </h1>")
}
func getAllHandler(ctx *iris.Context) {
// your code here...
}
func getByIDHandler(ctx *iris.Context) {
// take the :id from the path, parse to integer
// and set it to the new userID local variable.
userID, _ := ctx.ParamInt("id")
// userRepo, imaginary database service <- your only job.
user := userRepo.GetByID(userID)
// send back a response to the client,
// .JSON: content type as application/json; charset="utf-8"
// iris.StatusOK: with 200 http status code.
//
// send user as it is or make use of any json valid golang type,
// like the iris.Map{"username" : user.Username}.
ctx.JSON(iris.StatusOK, user)
}
func saveUserHandler(ctx *iris.Context) {
// your code here...
}
```
### Reload on source code changes
```sh
$ go get -u github.com/kataras/rizla
$ cd $GOPATH/src/mywebapp
$ rizla main.go
```
### Reload templates on each incoming request
```go
app.Adapt(view.HTML("./views", ".html").Reload(true))
```
FAQ & Documentation
-----------
<a href="https://github.com/kataras/iris/tree/v6/_examples#table-of-contents"><img align="right" width="125" src="https://raw.githubusercontent.com/iris-contrib/website/gh-pages/assets/book/cover_4.jpg"></a>
1. [Getting Started with Go+Iris](http://gopherbook.iris-go.com)
2. Official small but practical [examples](https://github.com/kataras/iris/tree/v6/_examples#table-of-contents)
3. Navigate through [community examples](https://github.com/iris-contrib/examples) too
4. [Creating A URL Shortener Service Using Go, Iris, and Bolt](https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7)
5. [Godocs](https://godoc.org/gopkg.in/kataras/iris.v6) for deep documentation
6. [HISTORY.md](https://github.com//kataras/iris/tree/v6/HISTORY.md) is your best friend, version migrations are released there
I'll be glad to talk with you about **your awesome feature requests**,
open a new [discussion](http://support.iris-go.com), you will be heard!
Support
------------
- :star: [the project](https://github.com/kataras/iris/stargazers), will help you to follow the upcoming features
- [Donate](https://github.com/kataras/iris#buy-me-a-cup-of-coffee), will help me to continue
- [Post](http://support.iris-go.com) a feature request or report a bug, will help all of us to build a better web, together
- :earth_americas: post [an article](https://dzone.com/articles/a-url-shortener-service-using-go-iris-and-bolt-ger) or [tweet](https://twitter.com/gelnior/status/769100480706379776) and share it with your neighbor
Buy me a cup of coffee?
------------
Iris is free and open source but developing it has taken thousands of hours of my time and a large part of my sanity. If you feel this web framework useful to you, it would go a great way to ensuring that I can afford to take the time to continue to develop it.
I spend all my time in the construction of Iris, therefore I have no income value.
Feel free to send **any** amount through paypal
[![](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kataras2006%40hotmail%2ecom&lc=GR&item_name=Iris%20web%20framework&item_number=iriswebframeworkdonationid2016&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted)
> Please check your e-mail after your donation.
Thanks for your gratitude and finance help ♡
Third Party Middleware
------------
Iris has its own middleware form of `func(ctx *iris.Context)` but it's also compatible with all `net/http` middleware forms using [iris.ToHandler](https://github.com/iris-contrib/middleware/blob/master/cors/cors.go#L33), i.e Negroni's middleware form of `func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)`.
Here is a small list of Iris compatible middleware, I'm sure you can find more:
| Middleware | Author | Description |
| -----------|--------|-------------|
| [binding](https://github.com/mholt/binding) | [Matt Holt](https://github.com/mholt) | Data binding from HTTP requests into structs |
| [cloudwatch](https://github.com/cvillecsteele/negroni-cloudwatch) | [Colin Steele](https://github.com/cvillecsteele) | AWS cloudwatch metrics middleware |
| [csp](https://github.com/awakenetworks/csp) | [Awake Networks](https://github.com/awakenetworks) | [Content Security Policy](https://www.w3.org/TR/CSP2/) (CSP) support |
| [delay](https://github.com/jeffbmartinez/delay) | [Jeff Martinez](https://github.com/jeffbmartinez) | Add delays/latency to endpoints. Useful when testing effects of high latency |
| [New Relic Go Agent](https://github.com/yadvendar/negroni-newrelic-go-agent) | [Yadvendar Champawat](https://github.com/yadvendar) | Official [New Relic Go Agent](https://github.com/newrelic/go-agent) (currently in beta) |
| [gorelic](https://github.com/jingweno/negroni-gorelic) | [Jingwen Owen Ou](https://github.com/jingweno) | New Relic agent for Go runtime |
| [JWT Middleware](https://github.com/auth0/go-jwt-middleware) | [Auth0](https://github.com/auth0) | Middleware checks for a JWT on the `Authorization` header on incoming requests and decodes it|
| [logrus](https://github.com/meatballhat/negroni-logrus) | [Dan Buch](https://github.com/meatballhat) | Logrus-based logger |
| [onthefly](https://github.com/xyproto/onthefly) | [Alexander Rødseth](https://github.com/xyproto) | Generate TinySVG, HTML and CSS on the fly |
| [permissions2](https://github.com/xyproto/permissions2) | [Alexander Rødseth](https://github.com/xyproto) | Cookies, users and permissions |
| [prometheus](https://github.com/zbindenren/negroni-prometheus) | [Rene Zbinden](https://github.com/zbindenren) | Easily create metrics endpoint for the [prometheus](http://prometheus.io) instrumentation tool |
| [render](https://github.com/unrolled/render) | [Cory Jacobsen](https://github.com/unrolled) | Render JSON, XML and HTML templates |
| [RestGate](https://github.com/pjebs/restgate) | [Prasanga Siripala](https://github.com/pjebs) | Secure authentication for REST API endpoints |
| [secure](https://github.com/unrolled/secure) | [Cory Jacobsen](https://github.com/unrolled) | Middleware that implements a few quick security wins |
| [stats](https://github.com/thoas/stats) | [Florent Messa](https://github.com/thoas) | Store information about your web application (response time, etc.) |
| [VanGoH](https://github.com/auroratechnologies/vangoh) | [Taylor Wrobel](https://github.com/twrobel3) | Configurable [AWS-Style](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) HMAC authentication middleware |
| [xrequestid](https://github.com/pilu/xrequestid) | [Andrea Franz](https://github.com/pilu) | Middleware that assigns a random X-Request-Id header to each request |
| [digits](https://github.com/bamarni/digits) | [Bilal Amarni](https://github.com/bamarni) | Middleware that handles [Twitter Digits](https://get.digits.com/) authentication |
Feel free to put up a [PR](https://github.com/iris-contrib/middleware) your middleware!
2017-01-25 21:19:06 +01:00
Testing
------------
The `httptest` package is a simple Iris helper for the httpexpect, a new library for End-to-end HTTP and REST API testing for Go.
You can find tests by navigating to the source code,
i.e:
- [context_test.go](https://github.com/kataras/iris/blob/v6/context_test.go)
- [handler_test.go](https://github.com/kataras/iris/blob/v6/handler_test.go)
- [policy_gorillamux_test.go](https://github.com/kataras/iris/blob/v6/policy_gorillamux_test.go)
- [policy_httprouter_test.go](https://github.com/kataras/iris/blob/v6/policy_httprouter_test.go)
- [policy_nativerouter_test.go](https://github.com/kataras/iris/blob/v6/policy_nativerouter_test.go)
- [policy_routerwrapper_test.go](https://github.com/kataras/iris/blob/v6/policy_routerwrapper_test.go)
- [policy_sessions_test.go](https://github.com/kataras/iris/blob/v6/policy_sessions_test.go)
- [response_writer_test.go](https://github.com/kataras/iris/blob/v6/response_writer_test.go)
- [route_test.go](https://github.com/kataras/iris/blob/v6/route_test.go)
- [status_test.go](https://github.com/kataras/iris/blob/v6/status_test.go)
- [transaction_test.go](https://github.com/kataras/iris/blob/v6/transaction_test.go)
- [serializer_test.go](https://github.com/kataras/iris/blob/v6/serializer_test.go)
A simple test is located to [./_examples/advanced/httptest/main_test.go](https://github.com/kataras/iris/blob/v6/_examples/advanced/httptest/main_test.go)
2016-05-30 16:08:09 +02:00
Philosophy
------------
The Iris philosophy is to provide robust tooling for HTTP, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs. Keep note that, today, iris is faster than nginx itself.
2016-05-30 16:08:09 +02:00
Iris does not force you to use any specific ORM or template engine. Iris is routerless which means you can adapt any router you like, [httprouter](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-httprouter/main.go) is the fastest, [gorillamux](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-gorillamux/main.go) has more features. With support for the most used template engines (5), you can quickly craft the perfect application.
2016-05-30 16:08:09 +02:00
People
2016-05-30 16:08:09 +02:00
------------
2016-10-21 02:06:50 +02:00
The author of Iris is [@kataras](https://github.com/kataras).
However the real Success of Iris belongs to you with your bug reports and feature requests that made this Framework so Unique.
Contact
------------
Besides the fact that we have a [community chat][Chat] for questions or reports and ideas, [stackoverflow](http://stackoverflow.com/) section for generic go+iris questions and the [iris support](http://support.iris-go.com) for bug reports and feature requests, you can also contact with me, as a person who is always open to help you:
- [Twitter](https://twitter.com/MakisMaropoulos)
- [Facebook](https://facebook.com/kataras.gopher)
2017-01-26 08:50:26 +01:00
- [Linkedin](https://www.linkedin.com/in/gerasimos-maropoulos)
2017-01-25 21:19:06 +01:00
Codename: ["√Νεxτ"](https://github.com/kataras/iris/blob/v6/HISTORY.md)
2017-01-25 21:19:06 +01:00
------------
License
------------
2017-01-25 21:19:06 +01:00
Unless otherwise noted, the source files are distributed
under the MIT License found in the [LICENSE file](LICENSE).
Note that some optional components that you may use with Iris requires
different license agreements.
[Chat]: https://kataras.rocket.chat/channel/iris