The fastest HTTP/2 Go Web Framework. AWS Lambda, gRPC, MVC, Unique Router, Websockets, Sessions, Test suite, Dependency Injection and more. A true successor of expressjs and laravel | 谢谢 https://github.com/kataras/iris/issues/1329 |

Overview

Black Lives Matter

News

This is the under-development branch. Stay tuned for the upcoming release v12.2.0. Looking for a stable release? Head over to the v12.1.8 branch instead.

Try the official Iris Command Line Interface today!

Due to the large workload, there may be delays in answering your questions.

Iris Web Framework

build status view examples chat donate

Iris is a fast, simple yet fully featured and very efficient web framework for Go.

It provides a beautifully expressive and easy to use foundation for your next website or API.

Simple Handler
package main

import "github.com/kataras/iris/v12"

type (
  request struct {
    Firstname string `json:"firstname"`
    Lastname  string `json:"lastname"`
  }

  response struct {
    ID      uint64 `json:"id"`
    Message string `json:"message"`
  }
)

func main() {
  app := iris.New()
  app.Handle("PUT", "/users/{id:uint64}", updateUser)
  app.Listen(":8080")
}

func updateUser(ctx iris.Context) {
  id, _ := ctx.Params().GetUint64("id")

  var req request
  if err := ctx.ReadJSON(&req); err != nil {
    ctx.StopWithError(iris.StatusBadRequest, err)
    return
  }

  resp := response{
    ID:      id,
    Message: req.Firstname + " updated successfully",
  }
  ctx.JSON(resp)
}

Read the routing examples for more!

Handler with custom input and output arguments

https://github.com/kataras/iris/blob/master/_examples/dependency-injection/basic/main.go

Interesting? Read the examples.

MVC
package main

import (
  "github.com/kataras/iris/v12"
  "github.com/kataras/iris/v12/mvc"
)

type (
  request struct {
    Firstname string `json:"firstname"`
    Lastname  string `json:"lastname"`
  }

  response struct {
    ID      uint64 `json:"id"`
    Message string `json:"message"`
  }
)

func main() {
  app := iris.New()
  mvc.Configure(app.Party("/users"), configureMVC)
  app.Listen(":8080")
}

func configureMVC(app *mvc.Application) {
  app.Handle(new(userController))
}

type userController struct {
  // [...dependencies]
}

func (c *userController) PutBy(id uint64, req request) response {
  return response{
    ID:      id,
    Message: req.Firstname + " updated successfully",
  }
}

Want to see more? Navigate through mvc examples!

Learn what others saying about Iris and star this open-source project to support its potentials.

Benchmarks: Jul 18, 2020 at 10:46am (UTC)

👑 Supporters

With your help, we can improve Open Source web development for everyone!

Donations from China are now accepted!

George Fourikis Александр Лебединский Li Yang Qianyu Zhou anilpdv CAO HOAI BAO Oscar Hernandez Gerard Lancea neulhan xushiquan Matt Ľuboš Pinteš Leighton McKeen Weliam simranjit singh Kenneth Jordan Morlé Koudeka Rui Carlos Augusto Horst Ender Pavithran MULYAWAN SENTOSA KIT UNITED Ricardo Hernandez Lopez ChinChuanKuo Nikhar Saxena Servio Zambrano Nate Anderson Claude Muller Marco Moeser Sanketh P B Vu Hoang Lam Dimitar Trifonov Midhubalan Balasubramanian AANAND NATARAJAN Edsongley Almeida ganben Tejus Pratap cui hexiang tinawang Juan David Parra Pimiento Andy Chong Ying Zhi Kevin Zhou Jasper Simranjit Singh Christopher Lamm 叶峻峣 TSAI LI TING zhutao George Alexiou Jobert Azares Tam Nguyen 
Venkatt Guhesan Anibal C C Budaye ARAN ROKA Valentine Chakravarthy Raghunandan Massimiliano Bertinetti Hieu Trinh J.T. Feng Gabor Lekeny LiHaotian Muyang Li Hao Tu Cetin Basoz Hazmi Amalul Rémy Deme Vincent Li Max Trense Matej Lach Joseph De Paola Damon Blais 陆 轶丰 Weihang Ding Li Fang TechMaster lenses.io Celso Souza Altafino Thomas Fritz Conrad Steenberg Damon Zhao George Opritescu Juanses Ankur Srivastava Lex Tang li3p

📖 Learning Iris

Create a new project

$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/[email protected] # or @v12.2.0-alpha2
Install on existing project
$ cd myapp
$ go get github.com/kataras/iris/[email protected]
Install with a go.mod file
module myapp

go 1.16

require github.com/kataras/iris/v12 master

Run

$ go mod download
$ go run main.go
# OR just:
# go run -mod=mod main.go

Iris contains extensive and thorough documentation making it easy to get started with the framework.

For a more detailed technical documentation you can head over to our godocs. And for executable code you can always visit the ./_examples repository's subdirectory.

Do you like to read while traveling?

Book cover

follow author on twitter

follow Iris web framework on twitter

follow Iris web framework on facebook

You can request a PDF and online access of the Iris E-Book (New Edition, future v12.2.0+) today and be participated in the development of Iris.

🙌 Contributing

We'd love to see your contribution to the Iris Web Framework! For more information about contributing to the Iris project please check the CONTRIBUTING.md file.

List of all Contributors

🛡 Security Vulnerabilities

If you discover a security vulnerability within Iris, please send an e-mail to [email protected]. All security vulnerabilities will be promptly addressed.

📝 License

This project is licensed under the BSD 3-clause license, just like the Go project itself.

The project name "Iris" was inspired by the Greek mythology.

Issues
  • [QUESTION]can logger write to multiple files asynchronously and rotate based on size or time?

    [QUESTION]can logger write to multiple files asynchronously and rotate based on size or time?

    I need to write different level to different file for example: INFO & WARN level write toinfo.log ERRO level write to error.log In addition, I need to save the access log including request params and response data to access.log

    If the log files become more and more large, I expect that logger can automatically rotate the log files based on size or time

    Does logger support the requirements above and write file asynchronously?

    🤔 type:question 💡type:idea 🚀 status:implemented 
    opened by tuhao1020 57
  • [DOCUMENTATION] No Content-Encoding: gzip header on gzip-ed bindata

    [DOCUMENTATION] No Content-Encoding: gzip header on gzip-ed bindata

    Describe the bug I use kataras/bindata to embeding some files, but iris reponse without Content-Encoding: gzip header

    To Reproduce

    go get -u github.com/kataras/bindata/cmd/bindata
    bindata ./public/...
    go build
    
    	app.HandleDir("/static", "./public", iris.DirOptions{
    		Asset:      GzipAsset,
    		AssetInfo:  GzipAssetInfo,
    		AssetNames: GzipAssetNames,
    	})
    

    The public dir has only one file index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>NMac Mirror</title>
    </head>
    <body>
    Hello!
    </body>
    </html>
    

    Screenshots image

    Desktop MacOS 10.14.6

    🤘 status:resolved 📒 type:documentation 
    opened by xiaozhuai 28
  • websocket rebuild 2019

    websocket rebuild 2019

    i have got the mel formed json from the websocket output. Currently found out that is caused by some race detection from the data transmission. it is the same issue caused by unsafe access in ByteBuffer.

    🐞 type:bug 🤘 status:resolved 
    opened by jjhesk 24
  • Ability to customize Logrus

    Ability to customize Logrus

    Logrus is a popular logging package. Some already use this in their projects, and set it up with Console in dev and JSON writers in production. It would be nice to add the ability to customize Logrus inside of Iris. I propose and could easily add the ability to set the Logrus object to use. Even better, would be nice to have it's own context.

    💡type:idea 🚀 status:implemented 
    opened by mattrmiller 24
  • [BUG] CORS doesn't support Subdomains

    [BUG] CORS doesn't support Subdomains

    Summary

    I attempted to host my assets directory as a Subdomain, which Chrome complained requires CORS. So, I followed the example code within the repository (which, btw, doesn't work on a Party, but only on the entire server, so is incompatible with subdomains), and found that it doesn't work at all.

    Screenshot

    image

    Versions, etc.

    |Thing|Version| |-|-| |Golang|1.14.6 linux/amd64| |Iris|master d0d7679| |Kernel|5.7.14-200.fc32.x86_64| |OS|Fedora 32 Workstation|

    Sample Code

    	c := cors.New(cors.Options{
    		AllowedOrigins: []string{
    			*domain,
    			fmt.Sprintf("www.%s", *domain),
    			fmt.Sprintf("your.%s", *domain),
    		},
    		AllowCredentials: true,
    	})
    	app.WrapRouter(c.ServeHTTP)
    
    	// define subdomain "your."
    	your := app.Subdomain("your")
    	your.Use(requestid.New())
    
    	// host the ./public directory as subdomain `static.`
    	assets := app.Subdomain("static")
    	assets.HandleDir("/", iris.Dir("./public"), iris.DirOptions{
    		Compress:  true,
    		DirList:   iris.DirList,
    		IndexName: "/index.html",
    		ShowList:  false,
    		Cache: iris.DirCacheOptions{
    			Enable:          true,
    			CompressIgnore:  iris.MatchImagesAssets,
    			CompressMinSize: 1,
    			Encodings:       []string{"gzip", "br", "deflate", "snappy"},
    		},
    	})
    
    	// redirect root domain to `your.`
    	app.SubdomainRedirect(app, your)
    
    	// Redirect www subdomains to `your.`
    	app.SubdomainRedirect(app.Subdomain("www"), your)
    
    🐞 type:bug 
    opened by AlbinoGeek 21
  • AutoTLS with non-80 HTTP Port?

    AutoTLS with non-80 HTTP Port?

    Hello there!

    This is a purely documentation / example question:

    • How can I start an AutoTLS server, where the HTTP port is 8080 and not 80?

    Why?

    Because there is NAT in front of iris that routes internal:8080 to external:80

    Current Code

    if err := app.Run(iris.AutoTLS(":443", "my.domain.here", "[email protected]")); err != nil {
      log.Error("failed to set-up HTTP server", "error", err)
    }
    

    Looking through the code some I the two ways to create a Runner that conflict here: https://github.com/kataras/iris/blob/da029d6f37228c7c0fed685187a2bd4ef35b5b3e/iris.go#L658-L667 https://github.com/kataras/iris/blob/da029d6f37228c7c0fed685187a2bd4ef35b5b3e/iris.go#L584-L590

    They are simply too abstracted for me to know what I'd be changing without a thorough deep-dive into iris code.

    🤘 status:resolved 
    opened by AlbinoGeek 19
  • [FEATURE REQUEST] MVC serving gRPC-compatible controller

    [FEATURE REQUEST] MVC serving gRPC-compatible controller

    Is your feature request related to a problem? Please describe.

    currently iris mvc would accept a controller func like

    
    func (s *acctService) PostLogin(ctx iris.Context, input *LoginParam) (*LoginResult, error) {}
    
    

    It just like a grpc service func, but when i change iris.Context to context.Context, it cause panic. Instead writing a wrapper func, could iris.MVC support context.Context as input parameter? If ture, then all the grpc services could serve by iris.MVC without adding a line.

    Describe the solution you'd like could accept like this

    
    func (s *acctService) PostLogin(ctx context.Context, input *LoginParam) (*LoginResult, error) {}
    
    

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    💡type:idea 🪶 type: feature 🚀 status:implemented 
    opened by syklevin 18
  • Poor performance of session.UpdateExpiration on 200 thousands+ keys with new radix lib

    Poor performance of session.UpdateExpiration on 200 thousands+ keys with new radix lib

    Hello Makis!

    I have more 200 thousands key in redis on prod server and found that after upgrading iris on v11 from redigo to radix lib that I have problems with perfomance when calling session.UpdateExpiration method (it`s executing minimum 10 seconds on a powerful prod server and more than 30 seconds on usual local).

    While debugging I found place where freezes, it`s here:

    func (r *Service) UpdateTTLMany(prefix string, newSecondsLifeTime int64) error {
    	keys, err := r.getKeys(prefix)
    	if err != nil {
    		return err
    	}
    ...
    }
    

    and inside getKeys here:

    scanner := radix.NewScanner(r.pool, radix.ScanOpts{
    		Command: "SCAN",
    		Pattern: r.Config.Prefix + prefix + r.Config.Delim + "*", // get all of this session except its root sid.
    		//	Count: 9999999999,
    	})
    
    	var key string
    	for scanner.Next(&key) {
    		keys = append(keys, key)
    	}
    

    Just has watched old v10 iris and old method getKeysConn did not cause such delay ...

    func (r *Service) getKeysConn(c redis.Conn, prefix string) ([]string, error) {
    	if err := c.Send("SCAN", 0, "MATCH", r.Config.Prefix+prefix+"*", "COUNT", 9999999999); err != nil {
    		return nil, err
    	}
    
    	if err := c.Flush(); err != nil {
    		return nil, err
    	}
    
    	reply, err := c.Receive()
    	if err != nil || reply == nil {
    		return nil, err
    	}
    

    Maybe reason in difference between old and new scan commands? Could you help?

    🤘 status:resolved 🚨 prio:high 
    opened by r3eg 18
  • [BUG/Feature] MVC Dependency authentication example

    [BUG/Feature] MVC Dependency authentication example

    Describe the bug on the master branch "https://github.com/kataras/iris/blob/master/_examples/mvc/authenticated-controller/main.go" an authentication is used to show how it is done when you search for an authenticated user. But how can I find an unauthenticated user who can call the same route but from a different controller?

    To Reproduce Steps to reproduce the behavior:

    1. [...]

    Expected behavior Let's take two controllers that are both registered for the same route, but one of them has no authentication feature. Now when I call the route, I want the call without authentication to return a different value than if I were authenticated.

    Screenshots If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: [e.g. ubuntu, windows]

    Additional context I don't think it's a bug, but a feature request, although I think others do as well, that the same route should call a different controller under different circumstances.

    🪶 type: feature 🚀 status:implemented 
    opened by Dexus 17
  • [FEATURE REQUEST] Make i18n expandable

    [FEATURE REQUEST] Make i18n expandable

    I come from the corner of GNU Gettext users. I would like to have something similar for the i18n implementation.

    What requirements would I have:

    • Loader (local and binary)
    • Gettext functions, so that several domains and contexts can be used.
    • message interfaces
    • PO/MO support, JSON (i18n-next etc.), the current ini format

    https://github.com/leonelquinteros/gotext (with serveral fixes: https://git.deineagentur.com/DeineAgenturUG/gotext) could serve as a basis for inspiration.

    What do you think?

    💡type:idea 🚀 status:implemented 
    opened by Dexus 16
  • [BUG] when dynamic routing parameters have type judgments, cause cors problem

    [BUG] when dynamic routing parameters have type judgments, cause cors problem

    Thanks for your contribution!

    Describe the bug when dynamic routing parameters have type judgments, cause cors problem

    To Reproduce Steps to reproduce the behavior:

    func main() {
    	app := iris.New()
    	app.Use(cors.AllowAll())
    	app.AllowMethods(iris.MethodOptions)
    	app.Delete("user/{id}", user.deleteUser) // no cors problem
    	app.Delete("user/{id:uint64}", user.deleteUser) // has cors problem
    	_ = app.Run(iris.Addr(":8080"))
    }
    

    Expected behavior Fix it

    Desktop (please complete the following information):

    • OS: MacOS
    pending-submitter-response 🐞 type:bug 
    opened by CyJaySong 16
  • [BUG]Bugs while posting empty data array

    [BUG]Bugs while posting empty data array

    Hello! I met a bug when posted an empty data (empty json) to the Go Iris server. I found that PostValueInt function wouldn't return any error so that this argument can be any string and PostValueIntDefault function counldn't process properly, either.

    After looking up the source code I discovered that PostValues function wouldn't return any error, too. This is a serious security problem that some hackers may submit empty post to attack the server. Can you give me some suggestions or ways to solve this problem? Thanks!

    opened by waaadreamer 1
  • [BUG] 使用127.0.0.1在本机调试时session每次都刷新sessionId

    [BUG] 使用127.0.0.1在本机调试时session每次都刷新sessionId

    Describe the bug 使用Edge和Chrome调试代码时,由于本地使用127.0.0.1测试,浏览器的cookie的Domain为localhost,set-cookie失败

    To Reproduce Steps to reproduce the behavior:

    1. 使用Edge或Chrome,在同一个域名下的相同路径或不同路径做session设置和读取

    Expected behavior 在不同的请求中能够设置和读取session d a

    修改后: c b

    pending-submitter-response 
    opened by langzishen 3
  • how to disable golang.org/issue/25192 message?

    how to disable golang.org/issue/25192 message?

    my url == http://127.0.0.1:8879/test?cmd=2330,0;

    func main() { appIris := iris.New() appIris.Get("/test", func(ctx iris.Context) { testParam(ctx) }) appIris.Run(iris.Addr(8879) /* 0.*/, iris.WithPostMaxMemory(maxSize)) }

    func testParam(ctx iris.Context) { fmt.Println("testParam : ", ctx.Request().URL.RawQuery) }

    always show message [HTTP Server] http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see golang.org/issue/25192

    need to fix or disable it

    thanks ~

    🏋️‍♀️ type:task 
    opened by Akira0215 3
  • How to exclude the specified directory using SPA

    How to exclude the specified directory using SPA

    Describe the issue you are facing or ask for help

    
    	app := iris.New().Configure(iris.WithLowercaseRouting)
    
    	// Serve our front-end and its assets.
    	app.HandleDir("/", iris.Dir("./app/public"), iris.DirOptions{
    		SPA:       true,
    		IndexName: "index.html",
    	})
    	sess := sessions.New(sessions.Config{Cookie: "sessionId"})
    	sess.UseDatabase(sessionDB)
    	app.Use(sess.Handler())
    	app.Use(antd.NewSessionAuth(enforcer).Handler())
    
    	app.PartyFunc("/api", func(api router.Party) {
    		mvc.New(api.Party("/shopee")).Handle(&controllers.Shopee{}).HandleError(antd.HandlerError)
    
    		mvc.New(api.Party("/addresss")).Handle(&controllers.Addresss{}).HandleError(antd.HandlerError)
    	}).OnAnyErrorCode(func(c *context.Context) {
    		fmt.Println("xxx")
    	})
    	app.Listen(":8080")
    

    /api

    /How the API handles its own 404 errors, Or use spa to exclude the / API directory, at least when 404 occurs, and skip cache

    opened by aadog 10
  • Is there an easy way to identify / register request payload types to route handlers.

    Is there an easy way to identify / register request payload types to route handlers.

    More of a question rather than reporting an issue.

    I would like to implement a single request validator middleware either using gRPC or regular net/http server.

    So I am curious if there is a way to identify or register the request payload struct to route handlers in an optimal way so that in a single middleware, the request payloads can be validated.

    I did not follow any approach in regular route(party)/handler approach but with gRPC/mvc, I tried using protoc-gen-validate in conjunction with gRPC interceptors but could not reach anywhere.

    If with route(party)/handler approach then with I would go with go-playground/validator.

    Thank you in advance. In our community I trust!

    opened by opusmagna 3
  • Proper way to implement WebDAV server

    Proper way to implement WebDAV server

    Hi,

    I'm trying to implement WebDAV server with iris but I can not figure it out. I've checked some older closed issues but it's not working properly. I can connect directory but it's not allowing me to access or change any file. Here is some sample. If you replace iris with standard http it works properly;

    package main
    
    import (
    	"log"
    	"net/http"
    
    	"github.com/kataras/iris/v12"
    	routing "github.com/kataras/iris/v12/core/router"
    	"github.com/kataras/iris/v12/middleware/logger"
    	"github.com/kataras/iris/v12/middleware/recover"
    	"golang.org/x/net/webdav"
    )
    
    func init() {
    	myCustomMethods := []string{"COPY",
    		"LINK",
    		"UNLINK",
    		"PURGE",
    		"LOCK",
    		"UNLOCK",
    		"PROPFIND",
    		"VIEW",
    	}
    
    	routing.AllMethods = append(routing.AllMethods, myCustomMethods...)
    }
    
    func main() {
    	webdavHandler := &webdav.Handler{
    		FileSystem: webdav.Dir("./"),
    		LockSystem: webdav.NewMemLS(),
    		Logger: func(r *http.Request, err error) {
    			if err != nil {
    				log.Printf("ERROR: %v", err)
    			}
    		},
    	}
    
    	// Proper working server
    	// http.Handle("/", webdavHandler)
    	// if err := http.ListenAndServe(":8080", nil); err != nil {
    	// 	log.Fatalf("Error with WebDAV server: %v", err)
    	// }
    
    	app := iris.New()
    	app.Logger().SetLevel("debug")
    	app.Use(recover.New())
    	app.Use(logger.New())
    
    	app.Any("/", iris.FromStd(webdavHandler))
    
    	app.Run(
    		iris.Addr(":8080"),
    		iris.WithoutServerError(iris.ErrServerClosed),
    	)
    }
    
    🤔 type:question 
    opened by ozguncagri 25
Releases(v12.2.0-beta3)
  • v12.2.0-beta3(Jun 5, 2022)

  • v12.2.0-beta2(May 9, 2022)

  • v12.2.0-beta1(Apr 12, 2022)

  • v12.2.0-alpha9(Mar 1, 2022)

  • v12.2.0-alpha8(Feb 26, 2022)

  • v12.2.0-alpha5(Dec 2, 2021)

    What's Changed

    • Chinese translate of README.md by @iamKyun in https://github.com/kataras/iris/pull/1576
    • Update Jet dep to 5.0.2 by @Dexus in https://github.com/kataras/iris/pull/1616
    • Update pongo2 to version 4 by @kataras in https://github.com/kataras/iris/pull/1636
    • #1642: add check the values array length, avoid panic: index out of range by @aa1143 in https://github.com/kataras/iris/pull/1643
    • New JWT Middleware features and more by @kataras in https://github.com/kataras/iris/pull/1662
    • New Basic Authentication Features by @kataras in https://github.com/kataras/iris/pull/1677
    • fix the password of redis connection options by @beluxx in https://github.com/kataras/iris/pull/1686
    • fix: index of ReadJSONProtobuf options by @Jyny in https://github.com/kataras/iris/pull/1688
    • [fix _examples] response.timestamp not appear in correct request. by @cainiaoDJ in https://github.com/kataras/iris/pull/1696
    • fixed code quality issues by @withshubh in https://github.com/kataras/iris/pull/1694
    • Minor improvements and code-style fixes by @kataras in https://github.com/kataras/iris/pull/1701
    • update host.ProxyHandler to compatiable with different hosts in target url and request host by @tuhao1020 in https://github.com/kataras/iris/pull/1703
    • udpate modifyProxiedRequest by @tuhao1020 in https://github.com/kataras/iris/pull/1710
    • fix typo in https://github.com/kataras/iris/pull/1707
    • Go into myapp folder after create it by @ruannawe in https://github.com/kataras/iris/pull/1714
    • modifiy DirList's default html format by @tuhao1020 in https://github.com/kataras/iris/pull/1717
    • From Travis CI to GitHub Actions by @kataras in https://github.com/kataras/iris/pull/1729
    • bug fix #1741 #1744 by @tuhao1020 in https://github.com/kataras/iris/pull/1742
    • add CustomPathWordFunc by @yale8848 in https://github.com/kataras/iris/pull/1746
    • fix bug: #1752 by @o8x in https://github.com/kataras/iris/pull/1753
    • Update README_FA.md by @HSNHK in https://github.com/kataras/iris/pull/1766
    • fix: supper grpc and grpc web by @cq-z in https://github.com/kataras/iris/pull/1785
    • Fix panic on macos when passing a certificate as []byte to iris.TLS() by @Kimbsen in https://github.com/kataras/iris/pull/1805
    • fix: add go.mod and go.sum to allow bootstrapper compiled indepedently by @nanikjava in https://github.com/kataras/iris/pull/1800

    New Contributors

    • @iamKyun made their first contribution in https://github.com/kataras/iris/pull/1576
    • @aa1143 made their first contribution in https://github.com/kataras/iris/pull/1643
    • @beluxx made their first contribution in https://github.com/kataras/iris/pull/1686
    • @Jyny made their first contribution in https://github.com/kataras/iris/pull/1688
    • @cainiaoDJ made their first contribution in https://github.com/kataras/iris/pull/1696
    • @withshubh made their first contribution in https://github.com/kataras/iris/pull/1694
    • @tuhao1020 made their first contribution in https://github.com/kataras/iris/pull/1703
    • @ruannawe made their first contribution in https://github.com/kataras/iris/pull/1714
    • @o8x made their first contribution in https://github.com/kataras/iris/pull/1753
    • @HSNHK made their first contribution in https://github.com/kataras/iris/pull/1766
    • @cq-z made their first contribution in https://github.com/kataras/iris/pull/1785
    • @Kimbsen made their first contribution in https://github.com/kataras/iris/pull/1805
    • @nanikjava made their first contribution in https://github.com/kataras/iris/pull/1800

    Full Changelog: https://github.com/kataras/iris/compare/v12.1.8...v12.2.0-alpha5

    Source code(tar.gz)
    Source code(zip)
  • v12.2.0-alpha4(Oct 13, 2021)

    This is the forth alpha version of the upcoming version 12.2.0. Read the HISTORY.md#Next and the v12.2.0 GitHub Issues. Changes from the previous v12.2.0-alpha2 and alpha3 (Jan and September 2021): https://github.com/kataras/iris/compare/v12.2.0-alpha2...v12.2.0-alpha4.

    The code name of the v12.2.0 release is "Norbi", as the nickname of my beloved brother who died at 15 September of 2021 at the age of 27

    Source code(tar.gz)
    Source code(zip)
  • v12.2.0-alpha3(Sep 22, 2021)

    This is the third alpha version of the upcoming version 12.2.0. Read the HISTORY.md#Next and the v12.2.0 GitHub Issues. Changes from the previous v12.2.0-alpha2 (Jan 2021): https://github.com/kataras/iris/compare/v12.2.0-alpha2...v12.2.0-alpha3.

    The code name of the v12.2.0 release is "Norbi", as the nickname of my beloved brother who died at 15 September of 2021 at the age of 27

    Source code(tar.gz)
    Source code(zip)
  • v12.2.0-alpha2(Jan 10, 2021)

  • v12.2.0-alpha(Sep 13, 2020)

  • v0.0.2(Sep 3, 2020)

  • v0.0.1(Aug 12, 2020)

    You have installed an invalid version. Install with:

    go get -u github.com/kataras/iris/[email protected]
    

    If your Open Source project depends on that pre-go1.9 version please open an issue at https://github.com/kataras/iris/issues/new and share your repository with us, we will upgrade your project's code base to the latest version for free.

    If you have a commercial project that you cannot share publically, please contact with @kataras at https://chat.iris-go.com. Assistance will be provided to you and your colleagues for free.

    Source code(tar.gz)
    Source code(zip)
  • v12.1.7(Feb 10, 2020)

  • v12.1.5(Feb 2, 2020)

    Various improvements and linting. It's a generic message but please upgrade your project's Iris dependency if you had any issues serving files from subdomains or sharing dependencies through Iris controllers.

    Thanks, Gerasimos Maropoulos

    Source code(tar.gz)
    Source code(zip)
  • v12.1.4(Dec 29, 2019)

  • v12.1.1(Dec 16, 2019)

    4 new commits https://github.com/kataras/iris/compare/v12.1.0...v12.1.1

    https://github.com/kataras/iris/blob/master/HISTORY.md#mo-16-december-2019--v1211

    Source code(tar.gz)
    Source code(zip)
  • v12.1.0(Dec 13, 2019)

  • v12.0.1(Oct 26, 2019)

    • Add version suffix of the import path, learn why and see what people voted at issue #1370

    • All errors are now compatible with go1.13 errors.Is, errors.As and fmt.Errorf and a new core/errgroup package created
    • Fix #1383
    • Report whether system couldn't find the directory of view templates
    • Remove the Party#GetReport method, keep Party#GetReporter which is an error and an errgroup.Group.
    • Remove the router's deprecated methods such as StaticWeb and StaticEmbedded_XXX
    • The Context#CheckIfModifiedSince now returns an context.ErrPreconditionFailed type of error when client conditions are not met. Usage: if errors.Is(err, context.ErrPreconditionFailed) { ... }
    • Add SourceFileName and SourceLineNumber to the Route, reports the exact position of its registration inside your project's source code.
    • Fix a bug about the MVC package route binding, see PR #1364
    • Add mvc/Application#SortByNumMethods as requested at #1343
    • Add status code 103 Early Hints
    • Fix performance of session.UpdateExpiration on 200 thousands+ keys with new radix as reported at issue #1328
    • New redis session database configuration field: Driver: redis.Redigo() or redis.Radix(), see updated examples
    • Add Clusters support for redis:radix session database (Driver: redis:Radix()) as requested at issue #1339
    • Create Iranian README_FA translation with PR #1360
    • Create Korean README_KO translation with PR #1356
    • Create Spanish README_ES and HISTORY_ES translations with PR #1344.

    The iris-contrib/middleare and examples are updated to use the new github.com/kataras/iris/v12 import path.

    Source code(tar.gz)
    Source code(zip)
  • v12.0.0(Oct 26, 2019)

Owner
Gerasimos (Makis) Maropoulos
🥇 That Greek Gopher | 💨 Senior Backend Engineer at PNOĒ | 🎓My dream is to create an international IT university that will produce flawless developers!
Gerasimos (Makis) Maropoulos
laravel for golang,goal,fullstack framework,api framework

laravel for golang,goal,fullstack framework,api framework

桥边红药 17 Feb 24, 2022
Gouweb: A web framework for go inspired by laravel

gouweb is a web framework for go inspired by laravel Installation go get -u gith

null 2 Feb 17, 2022
Go-igni: monolith-based web-framework in Go Inspired by classical PHP Frameworks like CodeIgnier & Laravel

go-igni Web Framework in Go About This is research project about developing monolith-based web-framework in Go Inspired by classical PHP Frameworks li

Denis 1 Feb 25, 2022
hiboot is a high performance web and cli application framework with dependency injection support

Hiboot - web/cli application framework About Hiboot is a cloud native web and cli application framework written in Go. Hiboot is not trying to reinven

hidevops.io 175 Jun 12, 2022
re:Web enables classic web applications to run on AWS Lambda.

re:Web re:Web enables classic web applications to run on AWS Lambda. re:Web interfaces with the Lambda Runtime API. It translates API Gateway requests

null 98 Jun 3, 2022
A lightweight MVC framework for Go(Golang)

utron utron is a lightweight MVC framework in Go (Golang) for building fast, scalable and robust database-driven web applications. Features Postgres,

Geofrey Ernest 2.2k Jun 15, 2022
⚡ Rux is an simple and fast web framework. support middleware, compatible http.Handler interface. 简单且快速的 Go web 框架,支持中间件,兼容 http.Handler 接口

Rux Simple and fast web framework for build golang HTTP applications. NOTICE: v1.3.x is not fully compatible with v1.2.x version Fast route match, sup

Gookit 77 Apr 16, 2022
基于Golang的框架Gin开发,项目结构和理念参考Laravel。现支持:MySQL、Redis、MVC、拦截器、助手函数、fresh热更、swagger-UI、tpl模版输出、安全的Api。

GinLaravel的构建和运行周期与Beego、Vue、React、Laravel、ThinkPHP、Django等都会有类似的引导思路、参数设置、插件扩展、服务部署、代码统一性、生态护城河等。

方圆 37 Jun 16, 2022
Mvc+go+mysqlのrest API テンプレートリポジトリ

rest-api-temp リポジトリ概要 アドベントカレンダー用に作成 https://qiita.com/advent-calendar/2021/hcb-2021 用途 迅速にrest apiを作らなきゃいけない場合のテンプレート 注意 テンプレートAPIの使用はdocs/api.mdに記載

Takematsu 0 Dec 15, 2021
Flamingo Framework and Core Library. Flamingo is a go based framework for pluggable web projects. It is used to build scalable and maintainable (web)applications.

Flamingo Framework Flamingo is a web framework based on Go. It is designed to build pluggable and maintainable web projects. It is production ready, f

Flamingo 303 Jun 23, 2022
Golanger Web Framework is a lightweight framework for writing web applications in Go.

/* Copyright 2013 Golanger.com. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except

golanger 299 Mar 3, 2022
The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework.

jin About The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework. If thi

null 8 Dec 27, 2021
lightweight, idiomatic and composable router for building Go HTTP services

chi is a lightweight, idiomatic and composable router for building Go HTTP services. It's especially good at helping you write large REST API services

go-chi 11.7k Jun 27, 2022
A minimal framework to build web apps; with handler chaining, middleware support; and most of all standard library compliant HTTP handlers(i.e. http.HandlerFunc).

WebGo v4.1.3 WebGo is a minimalistic framework for Go to build web applications (server side) with zero 3rd party dependencies. Unlike full-fledged fr

Kamaleshwar 247 Jun 15, 2022
gin auto binding,grpc, and annotated route,gin 注解路由, grpc,自动参数绑定工具

中文文档 Automatic parameter binding base on go-gin doc Golang gin automatic parameter binding Support for RPC automatic mapping Support object registrati

xxj 226 Jun 30, 2022
Headless CMS with automatic JSON API. Featuring auto-HTTPS from Let's Encrypt, HTTP/2 Server Push, and flexible server framework written in Go.

Ponzu Watch the video introduction Ponzu is a powerful and efficient open-source HTTP server framework and CMS. It provides automatic, free, and secur

Ponzu 5.5k Jun 29, 2022
Data injection wrapper for values maintained in a GCP Secret Manager document.

injector The injector is a utility that retrieves a GCP Secret Manager document which contains an HJSON or JSON object with an embedded top-level envi

Mark Eissler 0 Jan 19, 2022
henrylee2cn 1.6k Jun 26, 2022
Roche is a Code Generator and Web Framework, makes web development super concise with Go, CleanArch

It is still under development, so please do not use it. We plan to release v.1.0.0 in the summer. roche is a web framework optimized for microservice

Riita 15 May 21, 2022