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.

Overview

Flamingo Framework

Go Report Card GoDoc Tests Release TODOs Join the chat at https://gitter.im/i-love-flamingo/community

Flamingo is a web framework based on Go.
It is designed to build pluggable and maintainable web projects. It is production ready, field tested and has a growing ecosystem.

Quick start

See "examples/hello-world"

Initialize an empty project:

mkdir helloworld
cd helloworld
go mod init helloworld

Create your project main file:

cat main.go
package main

import (
	"flamingo.me/dingo"
	"flamingo.me/flamingo/v3"
)

func main() {
	flamingo.App([]dingo.Module{
	})
}

If you then start your project you will see a list of registered commands:

go run main.go

It will print something like:

Flamingo main

Usage:
  main [command]

Examples:
Run with -h or -help to see global debug flags

Available Commands:
  config      Config dump
  handler     Dump the Handlers and its registered methods
  help        Help about any command
  routes      Routes dump
  serve       Default serve command - starts on Port 3322

Flags:
  -h, --help   help for main

Use "main [command] --help" for more information about a command.

To start the server use the following sub command:

go run main.go serve

And open http://localhost:3322

Hello World Example:

To extend this empty flamingo project with a "Hello World" output please create a new module "helloworld" like this:

mkdir helloworld
cat helloworld/module.go

With the following code in module.go:

package helloworld

import (
        "context"
        "net/http"
        "strings"
        
        "flamingo.me/dingo"
        "flamingo.me/flamingo/v3/framework/web"
)

type Module struct{}

func (*Module) Configure(injector *dingo.Injector) {
        web.BindRoutes(injector, new(routes))
}

type routes struct{}

func (*routes) Routes(registry *web.RouterRegistry) {
        registry.Route("/", "home")
        registry.HandleAny("home", indexHandler)
}

func indexHandler(ctx context.Context, req *web.Request) web.Result {
        return &web.Response{
            Status: http.StatusOK,
            Body:   strings.NewReader("Hello World!"),
        }
}

This file now defines a very simple module, that can be used in the Flamingo bootstrap. In this case it registers a new handler that renders a simple "Hello World" message and binds the route "/" to this handler. Now please include this new module in your existing main.go file:

package main

import (
	"flamingo.me/dingo"
	"flamingo.me/flamingo/v3"
	"helloworld/helloworld"
)

func main() {
	flamingo.App([]dingo.Module{
        new(helloworld.Module),
	})
}

If you now run the server again

go run main.go serve

And open http://localhost:3322 you will see your "Hello World!" output.

Getting started

To learn more about Flamingo you can check out the full hello-world example tutorial and read the documentation under docs.flamingo.me

Getting Help

If you need help you can:

Framework Details

Feature List

  • dependency injection with Dingo
  • Flexible templating engines. (gotemplates and pugtemplates)
  • configuration concepts using cue with support for multiple config areas and additional config contexts
  • A module concept for building modular and pluggable applications based on Dingo
  • Authentication concepts and security middleware
  • Flexible routing with support for prefix routes and reverse routing
  • Web controller concept with request/response abstraction; form handling etc
  • Operational readiness: logging, (distributed) tracing, metrics and healthchecks with separate endpoint
  • Localisation support
  • Commands using Cobra
  • Event handling
  • Sessionhandling and Management (By default uses Gorilla)

Ecosystem

  • GraphQL Module (and therefore support to build SPA and PWAs on top of it)
  • Caching modules providing resilience and caching for external APIs calls.
  • pugtemplate template engine for server side rendering with the related frontend tooling Flamingo Carotene
  • Flamingo Commerce is an active projects that offer rich and flexible features to build modern e-commerce applications.
Comments
  • Focus items in RESTful API

    Focus items in RESTful API

    hello. Whether optimization of the REST API project will be considered later?

    I intend to use this for RESTful projects that do not require the functionality of templates

    opened by xserve98 8
  • Multilevel/Redis cache backend

    Multilevel/Redis cache backend

    A simple implementation of an MultiLevel-Cache-Backends and an Redis-Cache-Backend.

    The redisBackend can be used as a second-level cache together with the inMemoryBackend to reduced the pressure to http-backends in case of large traffic-increase in a short time-period.

    The RedisBackend has a simple Lock-Mechanism which prevents parallel writes of the same cache-key.

    Another idea is to creata an awsS3 Backend. This will remove the need of manage an additional redis-instance. It is a little slower than redis, but scales really well.

    Additional i created a common backend test case, which can tests the basic functionality of all implemented backends.

    This is a first concept. Implementation to be discussed. I will add some documentation the next days.

    opened by jochen42 8
  • Version endpoint

    Version endpoint

    Some projects want build time informations returned by a path.

    Typically this is done by writing a version.json file during build time.

    This Feature provides an endpoint to return the content of that file, if given.

    opened by danielpoe 7
  • Commands not stopping

    Commands not stopping

    Currently all commands are not stopping unless you hit STRG-C

    This is because the rootcommand inherits the PersistentPostRun which always blocks until termination signal is send.

    Proposal A) We can send own signal in all commands that should stop immediatelly (see commit)

    Proposal B) The root command should not block Instead it should just trigger the ShutdownEvent in its PersistentPostRun Then it is the job of the "serve" command to handle the interruption

    Thoughts?

    enhancement 
    opened by danielpoe 7
  • framework/web: add handler as part of request

    framework/web: add handler as part of request

    This code adds handler name attribute to web.Request and so possibility to have information if there is assigned handler and it's name later in ChainFilter, Middleware or Controller.

    opened by Ompluscator 6
  • Problem in bootstrapping graphql module

    Problem in bootstrapping graphql module

    This is the error that is thrown when I try to run go generate . as mentioned in the graphql module readme.

    2020/06/16 21:19:46 app: config load: root: flamingo.me/flamingo/v3/core/oauth.Module:4:10: cue: marshal error at path core.oauth.secret: cannot convert incomplete value "string" to JSON
    exit status 1
    main.go:4: running "go": exit status 1
    

    Any idea?

    opened by asif-ir 5
  • Adding EmptySessionWithID to web.session for testing purposes

    Adding EmptySessionWithID to web.session for testing purposes

    The additional function allows to create sessions for tests with a set ID. The ID is usually set by the session store, but as soon as a test requires sessions with ID things start to get complicated.

    opened by masmrlar 5
  • move httpFrontent_test.go to cache_test package

    move httpFrontent_test.go to cache_test package

    This is just an cosmetic pr. To be able to move HttpFrontent_test.go from the cache-package to the cache_test-packed, i needed to do some small refactorings:

    • factory cache.NewEntryMeta: needed to build an Meta-Object inside tests
    • exported cache.cachedResponse struct: needed to convert an interface to cache.CachedRepsonse conversion inside the tests
    • factory cache.NewCachedResponse: needed to build an CachedResponse inside tests
    • getter cache.CachedResponse.Body(): needed to compare the cache-results inside tests

    As far as i can see, the changes are backward-compatible and hotfix-version compatible (correct me if i am wrong ;)).

    Just cosmetic, but from my point of view unit-tests should be always in additional packages.

    opened by jochen42 5
  • core/auth: update to recent go-oidc v3, allow oidc issuer URL override

    core/auth: update to recent go-oidc v3, allow oidc issuer URL override

    According to the OpenID Connect specs, the /.well-known/openid-configuration should contain an issuer field that matches the URL used to fetch the configuration metadata:

    The issuer value returned MUST be identical to the Issuer URL that was directly used to retrieve the configuration information. This MUST also be identical to the iss Claim value in ID Tokens issued from this Issuer.

    https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig

    The OIDC solutions provided from Azure for example when using the Azure Active Directory B2C currently doesn't adhere to the OpenID Connect spec and returns a wrong issuer.

    Since that's something they won't fix that fast (or maybe not even at all) we should introduce a configuration to support overriding the issuer URL.

    https://github.com/MicrosoftDocs/azure-docs/issues/38427#issuecomment-555855086

    Changes in go-oidc: https://github.com/coreos/go-oidc/compare/v2.0.0...v3.1.0

    opened by carstendietrich 4
  • #77 autogomaxprocs

    #77 autogomaxprocs

    adding the blank import "go.uber.org/automaxprocs" to app.go ensures the correct gomaxprocs settings in container-environments with cgroups.

    fixes #77

    opened by jochen42 4
  • chore(deps): update module go to 1.19

    chore(deps): update module go to 1.19

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | go (source) | golang | minor | 1.17 -> 1.19 |


    Release Notes

    golang/go

    v1.19.0

    v1.18.5

    v1.18.4

    v1.18.3

    v1.18.2

    v1.18.1

    v1.18.0


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 3
  • chore(deps): update module golang.org/x/oauth2 to v0.4.0

    chore(deps): update module golang.org/x/oauth2 to v0.4.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/oauth2 | require | minor | v0.2.0 -> v0.4.0 |


    Release Notes

    golang/oauth2

    v0.4.0

    Compare Source

    v0.3.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • chore(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.3

    chore(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/golang-jwt/jwt/v4 | require | patch | v4.4.2 -> v4.4.3 |


    Release Notes

    golang-jwt/jwt

    v4.4.3: 4.4.3

    Compare Source

    What's Changed

    New Contributors

    Full Changelog: https://github.com/golang-jwt/jwt/compare/v4.4.2...v4.4.3


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Opencensus Module sets X-Correlation-Id even if already present

    Opencensus Module sets X-Correlation-Id even if already present

    Description

    Currently the open census module adds a correlation id header and value to every HTTP request. This leads to problems in our project as we already use the X-Correlation-Id header in other contexts throughout our services.

    Proposed solution

    To deal with this issue I suggest to modify the corresponding module.go to only set the X-Correlation-Id header if it isn't already present and to instead use the existing X-Correlation-Id value if it is.

    Acknowledgements

    I know that the open census module has since been deprecated but as we are currently dealing with this problem and the ETA for open census' replacement is yet to be determined, I think taking on this issue is still viable.

    opened by nico-i 0
  • feat(core/zap): Make caller encoder configurable, add additional one

    feat(core/zap): Make caller encoder configurable, add additional one

    Currently, we use the short caller encoder to receive file names/positions from zap. Due to this shortness, we often aren'T able to find the actual file. Lets make it configurable and introduce additional caller encoders that give more insights without polluting the log too mutch.

    opened by carstendietrich 1
Releases(v3.4.0)
  • v3.4.0(Nov 3, 2022)

    Version v3.4.0 (2022-11-03)

    Features

    • session: add timeout for redis connection (#277) (eb0fe55f)
    • framework/config: module dump command (#273) (8a1b9154)
    • auth: add session refresh interface (#269) (3eba3475)
    • core/oauth: support issuer URL overriding (#227) (fa5bd34b)
    • oauth: add oauth identifier (#220) (9883a4dc)

    Fixes

    • framework/web: Avoid error log pollution, switch context cancelled log level to debug (#294) (c1d6dc87)
    • framework/flamingo/log: added nil check for StdLogger and Logger (f636b7ec)
    • framework: Add missing scheme property to the router cue config (#274) (3ee35cd8)
    • router: allow config for public endpoint (3f47d251)
    • framework/systemendpoint: use real port information in systemendpoint (4f59dc4a)
    • framework/prefixrouter: use real port information in ServerStartEvent (79ae6f95)
    • servemodule: use real port information in ServerStartEvent (c5209de3)
    • oauth: correctly map access-token claims (5a7331f3)
    • auth: add missing auth.Identity interface (#216) (27b93c16)
    • deps: exclude unmaintained redigo (#218) (6061f4ab)
    • fix missing gob register (0c488981)

    Tests

    • internalauth: add unittests (#258) (46341b4d)
    • requestlogger: add unittests (c8c18474)
    • framework/opencensus: add tests (932299a5)

    Ops and CI/CD

    • adjust gloangci-lint config for github actions (bbabfc08)
    • make "new-from-rev" work for golangci-lint (258a7b50)
    • remove now unnecessary steps from main pipeline (dc2df28f)
    • fix git rev (84ebd56d)
    • add golangci-lint to pipeline (bf3eaeab)
    • semanticore: add semanticore (a741f30d)

    Documentation

    • core/gotemplate: Enhance documentation (#291) (8b5b8a97)
    • typos and wording (#290) (9745b18e)
    • flamingo: update logos (4227815b)

    Chores and tidying

    • deps: update module github.com/coreos/go-oidc/v3 to v3.4.0 (#293) (f5a791f1)
    • deps: update module github.com/google/go-cmp to v0.5.9 (#282) (8d546ca7)
    • deps: update module github.com/openzipkin/zipkin-go to v0.4.1 (#286) (bf432c9f)
    • deps: update module github.com/stretchr/testify to v1.8.1 (#292) (56ddf827)
    • deps: update irongut/codecoveragesummary action to v1.3.0 (#278) (2399c75f)
    • bump to go 1.19 (#279) (da07d03e)
    • deps: update module github.com/stretchr/testify to v1.8.0 (#271) (c81b3226)
    • deps: update module github.com/golang-jwt/jwt/v4 to v4.4.2 (#272) (7dd92887)
    • deps: update module github.com/stretchr/testify to v1.7.2 (#270) (fb271199)
    • deps: update module go.uber.org/automaxprocs to v1.5.1 (2b868ee5)
    • deps: update module github.com/openzipkin/zipkin-go to v0.4.0 (38acb057)
    • deps: update module github.com/golang-jwt/jwt/v4 to v4.4.1 (daf8fd7a)
    • deps: update module github.com/hashicorp/golang-lru to v0.5.4 (2b8bd64c)
    • gomod: go mod tidy (3e911268)
    • deps: update module github.com/coreos/go-oidc/v3 to v3.2.0 (0e52661e)
    • deps: update dependency quay.io/dexidp/dex to v2.28.1 (2643bd00)
    • deps: update module contrib.go.opencensus.io/exporter/prometheus to v0.4.1 (5bd0be1a)
    • deps: update module github.com/stretchr/testify to v1.7.1 (d643c92c)
    • deps: update module github.com/google/go-cmp to v0.5.8 (559dea58)
    • deps: update module contrib.go.opencensus.io/exporter/zipkin to v0.1.2 (11533458)
    • deps: update actions/setup-go action to v3 (3592ea01)
    • deps: update actions/checkout action to v3 (c9d2f124)
    • deps: update module github.com/go-redis/redis/v8 to v8.11.5 (2b6581a8)
    • deps: update module contrib.go.opencensus.io/exporter/jaeger to v0.2.1 (f7285f09)
    • deps: update dependency quay.io/keycloak/keycloak to v8.0.2 (58f1a27b)
    • deps: update golang.org/x/oauth2 digest to 9780585 (bb60190b)
    • deps: update github.com/golang/groupcache digest to 41bb18b (68a4f7e2)
    • Update renovate.json (ca2c97b9)
    • deps: add renovate.json (e0edaf27)
    • bump go version to 1.17, replace golint with staticcheck (#222) (ae2b39e8)
    • auth: switch to github.com/gofrs/uuid (1854abc6)

    Other

    • continue-on-error for coverage pr comment (#288) (21b26df3)
    • framework/flamingo: replace redis session backend (#219) (8451ed0b)
    • core/auth: update to recent go-oidc v3, allow oidc issuer URL override (#212) (86076485)
    • add comment to StateEntry (a8be5d77)
    • allow multiple parallel state responses (d7b30a06)

    Important Notes

    • core/internalauth:
      • switched from github.com/dgrijalva/jwt-go to github.com/golang-jwt/jwt/v4. this is a drop-in replacement

        use search and replace to change the import path or add a replace statement to your go.mod:

        replace (
            github.com/dgrijalva/jwt-go v3.2.0+incompatible => github.com/golang-jwt/jwt/v4 v4.1.0
        )
        

        More details can be found here: https://github.com/golang-jwt/jwt/blob/main/MIGRATION_GUIDE.md

    • core/auth:
      • oauth.Identity includes Identity. This is a backwards-incompatible break

    v3.2.0

    • license:
      • Flamingo now uses the MIT license. The CLA has been removed.
    • core/auth:
      • Flamingo v3.2.0 provides a new auth package which makes authentication easier and more canonical.
      • the old core/oauth is deprecated and provides a compatibility layer for core/auth.
    • sessions:
      • web.SessionStore provides programmatic access to web.Session
      • flamingo.session.saveMode allows to define a more granular session save behaviour
    • config loading:
      • both routes.yml and routes.yaml are now supported
    • framework/web:
      • the framework router got a couple of stability updates.
      • the web responder and responses don't fail anymore for uninitialized responses.
      • error responses are wrapped with a http error message
      • the flamingo.static.file controller needs a dir to not serve from root.
    • errors:
      • all errors are handled via Go's error package
    • go 1.13/1.14:
      • support for 1.12 has been dropped

    v3

    • "locale" package:

      • the templatefunc __(key) is now returning a Label and instead additional parameters you need to use the label setters (see doc)
    • Deprecated Features are removed:

      • flamingo.me/dingo need to be used now
      • support for responder.*Aware types is removed
    • framework/web.Response is now framework/web.Result

    • web.Request is heavily condensed

      • Access to Params has changed
    • web.Session does not expose .GS() for the gorilla session anymore

    • event.Subscriber changes:

      • is getting context.Context as the first argument: Notify(ctx context.Context, e flamingo.Event)
      • event.Subscriber are registered via framework/flamingo.BindEventSubscriber(injector).To(...)
      • There is no SubscriberWithContext anymore!
    • several other Modules have been moved out of flamingo and exist as separate modules:

      • For all the stuff in this section: you may use the script docs/updates/v3/renameimports.sh for autoupdate the import paths in your project and to do some first replacements.

      • moved modules outside of flamingo:

        • flamingo/core/redirects
        • flamingo/core/pugtemplate
        • flamingo/core/form2
        • flamingo/core/form (removed)
        • flamingo/core/csrf
        • flamingo/core/csp
        • flamingo/core/captcha
      • restructures inside flamingo:

        • core/requestTask is renamed to core/requesttask
        • core/canonicalUrl is renamed to core/canonicalurl
        • core/cmd package moved to framework/cmd and the cmd have been moved to the packages they belong to
        • framework/router package merged into framework/web
        • framework/event package merged into framework/flamingo
        • framework/template package merged into framework/flamingo:
          • instead of template.BindFunc and template.BindCtxFunc you have to use flamingo.BindTemplateFunc
        • framework/session package merged into framework/flamingo:
          • instead of using the module session.Module use flamingo.SessionMdule
    • flamingo now uses go mod - we encourage to use it also in the projects:

      • Init the project
        go mod init YOURMODULEPATH
        
      • If you want to link the flamingo core to your project (because you are working on the core also)
        • Option 1: edit "go.mod" and add this lines (make sure to not commit them to git)
          replace (
            flamingo.me/flamingo/v3 => ../../PATHTOFLAMINGO
            flamingo.me/flamingo-commerce/v3 => ../../PATHTOFLAMINGO
          )
          
        • Option 2: use go mod vendor and link the modules after this from vendor folder
    • Prefixrouter configuration: rename prefixrouter.baseurl in flamingo.router.path

    v2

    • web.Responder is now used
      • instead of injecting
         responder.JSONAware
         responder.RenderAware
         responder.RedirectAware
        

        in a controller you need to inject

        responder *web.Responder
        

        And use the Methods of the Responder: c.responder.Data() c.responder.Render() c.responder.Redirect()

    • dingo is moved out to flamingo.me/dingo and we recommend to use the Inject() methods instead of public properties.

    What's Changed

    • allow multiple parallel state responses by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/209
    • Fix gob register OIDC state by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/210
    • add comment to StateEntry by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/211
    • core/auth: update to recent go-oidc v3, allow oidc issuer URL override by @carstendietrich in https://github.com/i-love-flamingo/flamingo/pull/212
    • fix(deps): exclude unmaintained redigo by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/218
    • framework/flamingo: replace redis session backend by @SchiffFlieger in https://github.com/i-love-flamingo/flamingo/pull/219
    • fix(auth): add missing auth.Identity interface by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/216
    • feat(oauth): add oauth identifier by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/220
    • fix(oauth): correctly map access-token claims by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/221
    • ci(semanticore): add semanticore by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/223
    • chore(auth): switch to github.com/gofrs/uuid by @SchiffFlieger in https://github.com/i-love-flamingo/flamingo/pull/226
    • feat(core/oauth): support issuer URL overriding by @tessig in https://github.com/i-love-flamingo/flamingo/pull/227
    • chore: bump go version to 1.17, replace golint with staticcheck by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/222
    • fix(framework): use real port for server start event by @SchiffFlieger in https://github.com/i-love-flamingo/flamingo/pull/229
    • fix(router): allow config for public endpoint by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/230
    • Configure Renovate by @renovate in https://github.com/i-love-flamingo/flamingo/pull/231
    • chore(deps): update github.com/golang/groupcache digest to 41bb18b by @renovate in https://github.com/i-love-flamingo/flamingo/pull/232
    • chore(deps): update golang.org/x/oauth2 digest to 9780585 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/233
    • chore(deps): update dependency quay.io/keycloak/keycloak to v8.0.2 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/235
    • chore(deps): update module contrib.go.opencensus.io/exporter/jaeger to v0.2.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/236
    • chore(deps): update module github.com/go-redis/redis/v8 to v8.11.5 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/239
    • chore(deps): update actions/checkout action to v3 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/237
    • chore(deps): update actions/setup-go action to v3 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/238
    • chore(deps): update module contrib.go.opencensus.io/exporter/zipkin to v0.1.2 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/240
    • chore(deps): update module github.com/google/go-cmp to v0.5.8 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/241
    • chore(deps): update module github.com/stretchr/testify to v1.7.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/243
    • chore(deps): update module contrib.go.opencensus.io/exporter/prometheus to v0.4.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/245
    • chore(deps): update dependency quay.io/dexidp/dex to v2.28.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/244
    • chore(deps): update module github.com/coreos/go-oidc/v3 to v3.2.0 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/247
    • test(requestlogger): add unittests by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/256
    • chore(gomod): go mod tidy by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/257
    • test(internalauth): add unittests by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/258
    • chore(deps): update module github.com/hashicorp/golang-lru to v0.5.4 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/242
    • chore(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/248
    • chore(deps): update module github.com/openzipkin/zipkin-go to v0.4.0 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/251
    • chore(deps): update module go.uber.org/automaxprocs to v1.5.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/253
    • docs(flamingo): update logos by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/262
    • chore(deps): update module github.com/stretchr/testify to v1.7.2 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/270
    • feat(auth): add session refresh interface by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/269
    • fix(framework): Add missing scheme property to the router cue config by @lifedraft in https://github.com/i-love-flamingo/flamingo/pull/274
    • chore(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.2 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/272
    • feat(framework/config): module dump command by @IvanMaidurov in https://github.com/i-love-flamingo/flamingo/pull/273
    • chore(deps): update module github.com/stretchr/testify to v1.8.0 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/271
    • feat(session): add timeout for redis connection by @tessig in https://github.com/i-love-flamingo/flamingo/pull/277
    • chore: bump to go 1.19 by @tessig in https://github.com/i-love-flamingo/flamingo/pull/279
    • chore(deps): update irongut/codecoveragesummary action to v1.3.0 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/278
    • ci: add golangci-lint to pipeline by @tessig in https://github.com/i-love-flamingo/flamingo/pull/283
    • fix(framework/flamingo/log): added nil check for StdLogger and Logger Fix for #161 by @nico-i in https://github.com/i-love-flamingo/flamingo/pull/284
    • continue-on-error for coverage pr comment by @bastianccm in https://github.com/i-love-flamingo/flamingo/pull/288
    • doc: typos and wording by @nico-i in https://github.com/i-love-flamingo/flamingo/pull/290
    • doc(core/gotemplate): Enhance documentation by @nico-i in https://github.com/i-love-flamingo/flamingo/pull/291
    • chore(deps): update module github.com/stretchr/testify to v1.8.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/292
    • chore(deps): update module github.com/openzipkin/zipkin-go to v0.4.1 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/286
    • chore(deps): update module github.com/google/go-cmp to v0.5.9 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/282
    • chore(deps): update module github.com/coreos/go-oidc/v3 to v3.4.0 by @renovate in https://github.com/i-love-flamingo/flamingo/pull/293
    • fix(framework/web): Avoid error log pollution, switch context cancelled log level to debug by @carstendietrich in https://github.com/i-love-flamingo/flamingo/pull/294
    • Release v3.4.0 by @github-actions in https://github.com/i-love-flamingo/flamingo/pull/224

    New Contributors

    • @renovate made their first contribution in https://github.com/i-love-flamingo/flamingo/pull/231
    • @lifedraft made their first contribution in https://github.com/i-love-flamingo/flamingo/pull/274
    • @IvanMaidurov made their first contribution in https://github.com/i-love-flamingo/flamingo/pull/273
    • @nico-i made their first contribution in https://github.com/i-love-flamingo/flamingo/pull/284
    • @github-actions made their first contribution in https://github.com/i-love-flamingo/flamingo/pull/224

    Full Changelog: https://github.com/i-love-flamingo/flamingo/compare/v3.3.0...v3.4.0

    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Oct 14, 2021)

    • relative urls in openid connect
    • fix session bug with openid connect
    • minor refactorings
    • Updates dependencies (could be breaking for a deprecated dependency)
    Source code(tar.gz)
    Source code(zip)
  • v3.2.1(Oct 26, 2020)

  • v3.2.0(Feb 26, 2020)

    • license:
      • Flamingo now uses the MIT license. The CLA has been removed.
    • core/auth:
      • Flamingo v3.2.0 provides a new auth package which makes authentication easier an more canonical.
      • the old core/oauth is deprecated and provides a compatibility layer for core/auth.
    • sessions:
      • web.SessionStore provides programmatic access to web.Session
      • flamingo.session.saveMode allows to define a more granular session save behaviour
    • config loading:
      • both routes.yml and routes.yaml are now supported
    • framework/web:
      • the framework router got a couple of stability updates.
      • the web responder and responses don't fail anymore for uninitialized responses.
      • error responses are wrapped with a http error message
      • the flamingo.static.file controller needs a dir to not serve from root.
    • errors:
      • all errors are handled via Go's error package
    • go 1.13/1.14:
      • support for 1.12 has been dropped
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Dec 19, 2019)

    v3.1.0:

    • Dingo is bumped to v0.2.4, so we are up to date now with the improved error handling
    • flamingo.App is reorganized, providing way more possibilities to debug and improved handling of dingo&co
    • we now support Cue configuration
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Aug 26, 2019)

Owner
Flamingo
Flamingo is a frontend framework made in go. It is especially useful for building web based sites and portals in a microservice oriented architecture.
Flamingo
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 Jul 14, 2022
A powerful go web framework for highly scalable and resource efficient web application

webfr A powerful go web framework for highly scalable and resource efficient web application Installation: go get -u github.com/krishpranav/webfr Exa

Krisna Pranav 13 Nov 28, 2021
A powerful go web framework for highly scalable and resource efficient web application

A powerful go web framework for highly scalable and resource efficient web application

null 22 Oct 3, 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 298 Nov 14, 2022
Eudore is the core of a golang lightweight web framework.

Eudore eudore是一个golang轻量级web框架核心,可以轻松扩展成一个技术栈专用框架,具有完整框架设计体系。 反馈和交流请加群组:QQ群373278915。 Features 易扩展:主要设计目标、核心全部解耦,接口即为逻辑。 简单:对象语义明确,框架代码量少复杂度低,无依赖库。 易用

null 73 Nov 7, 2022
based on go lang build WEB development framework for go lang beginners .

based on go lang build WEB development framework for go lang beginners .

zhenfan.yu 1 Oct 31, 2021
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 266 Jan 1, 2023
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 106 Jan 1, 2023
Couper is a lightweight API gateway designed to support developers in building and operating API-driven Web projects

Couper Couper is a lightweight API gateway designed to support developers in building and operating API-driven Web projects. Getting started The quick

Avenga 73 Nov 18, 2022
An app skeleton for very simple golang web applications

Golang App Skeleton This is a skeleton for a golang web application optimized for simplicity and rapid development. Prerequisites Go 1.15 or greater O

Ad Hoc 76 Oct 16, 2022
Pulp allows you to write dynamic web-applications entirely in go

pulp Pulp allows you to write dynamic web-applications entirely in go, by reacting to events on the server-side. func (c index) Render(pulp.Socket) (p

malte.l 18 Dec 5, 2022
Go-app is a package to build progressive web apps with Go programming language and WebAssembly.

Go-app is a package to build progressive web apps with Go programming language and WebAssembly.

Maxence Charriere 6.7k Dec 30, 2022
GoAdmin Instruction - A golang framework help gopher quickly build a data visualization platform

GoAdmin Instruction - A golang framework help gopher quickly build a data visualization platform

palutova 0 Jan 21, 2022
Vektor - Build production-grade web services quickly

Vektor enables development of modern web services in Go. Vektor is designed to simplify the development of web APIs by eliminating boilerplate, using secure defaults, providing plug-in points, and offering common pieces needed for web apps. Vektor is fairly opinionated, but aims to provide flexibility in the right places.

Suborbital 84 Dec 15, 2022
🚀‏‏‎ ‎‏‏‎‏‏‎‎‎‎‎‎Copper is a Go toolkit complete with everything you need to build web apps.

Copper Copper is a Go toolkit complete with everything you need to build web apps. It focuses on developer productivity and makes building web apps in

Copper 891 Jan 7, 2023
Swagger + Gin = SwaGin, a web framework based on Gin and Swagger

Swagger + Gin = SwaGin Introduction SwaGin is a web framework based on Gin and Swagger, which wraps Gin and provides built-in swagger api docs and req

long2ice 57 Dec 30, 2022
Swagger + Gin = SwaGin, a web framework based on Gin and Swagger

Swagger + Gin = SwaGin Introduction SwaGin is a web framework based on Gin and Swagger, which wraps Gin and provides built-in swagger api docs and req

long2ice 57 Dec 30, 2022
Goa is a web framework based on middleware, like koa.js.

Goa Goa is under construction, if you are familiar with koa or go and interested in this project, please join us. What is goa? goa = go + koa Just lik

null 47 Sep 27, 2022