go generate based graphql server library

Overview

gqlgen Continuous Integration Read the Docs GoDoc

gqlgen

What is gqlgen?

gqlgen is a Go library for building GraphQL servers without any fuss.

  • gqlgen is based on a Schema first approach — You get to Define your API using the GraphQL Schema Definition Language.
  • gqlgen prioritizes Type safety — You should never see map[string]interface{} here.
  • gqlgen enables Codegen — We generate the boring bits, so you can focus on building your app quickly.

Still not convinced enough to use gqlgen? Compare gqlgen with other Go graphql implementations

Getting Started

  • To install gqlgen run the command go get github.com/99designs/gqlgen in your project directory.
  • You could initialize a new project using the recommended folder structure by running this command go run github.com/99designs/gqlgen init.

You could find a more comprehensive guide to help you get started here.
We also have a couple of real-world examples that show how to GraphQL applications with gqlgen seamlessly, You can see these examples here or visit godoc.

Reporting Issues

If you think you've found a bug, or something isn't behaving the way you think it should, please raise an issue on GitHub.

Contributing

We welcome contributions, Read our Contribution Guidelines to learn more about contributing to gqlgen

Frequently asked questions

How do I prevent fetching child objects that might not be used?

When you have nested or recursive schema like this:

type User {
  id: ID!
  name: String!
  friends: [User!]!
}

You need to tell gqlgen that it should only fetch friends if the user requested it. There are two ways to do this;

  • Using Custom Models

Write a custom model that omits the friends field:

type User struct {
  ID int
  Name string
}

And reference the model in gqlgen.yml:

# gqlgen.yml
models:
  User:
    model: github.com/you/pkg/model.User # go import path to the User struct above
  • Using Explicit Resolvers

If you want to Keep using the generated model, mark the field as requiring a resolver explicitly in gqlgen.yml like this:

# gqlgen.yml
models:
  User:
    fields:
      friends:
        resolver: true # force a resolver to be generated

After doing either of the above and running generate we will need to provide a resolver for friends:

func (r *userResolver) Friends(ctx context.Context, obj *User) ([]*User, error) {
  // select * from user where friendid = obj.ID
  return friends,  nil
}

You can also use inline config with directives to achieve the same result

directive @goModel(model: String, models: [String!]) on OBJECT
    | INPUT_OBJECT
    | SCALAR
    | ENUM
    | INTERFACE
    | UNION

directive @goField(forceResolver: Boolean, name: String) on INPUT_FIELD_DEFINITION
    | FIELD_DEFINITION

type User @goModel(model: "github.com/you/pkg/model.User") {
    id: ID!         @goField(name: "todoId")
    friends: [User!]!   @goField(forceResolver: true)
}

Can I change the type of the ID from type String to Type Int?

Yes! You can by remapping it in config as seen below:

models:
  ID: # The GraphQL type ID is backed by
    model:
      - github.com/99designs/gqlgen/graphql.IntID # An go integer
      - github.com/99designs/gqlgen/graphql.ID # or a go string

This means gqlgen will be able to automatically bind to strings or ints for models you have written yourself, but the first model in this list is used as the default type and it will always be used when:

  • Generating models based on schema
  • As arguments in resolvers

There isn't any way around this, gqlgen has no way to know what you want in a given context.

Other Resources

Issues
  • Who's using gqlgen in production?

    Who's using gqlgen in production?

    We are preparing a blog post and would like to get a feel for who is currently using gqlgen?

    Might as well go first; 99designs has been running gqlgen for several months now.

    question accepted 
    opened by vektah 75
  • Is this project still maintained?

    Is this project still maintained?

    What happened?

    I recently used gqlgen to build a GraphQL API for https://crossplane.io, but I'm now a little worried that the project might be unmaintained. I notice no PRs have been merged for a little over 3 months, and there has not been a new release for almost a year. I maintain a large open source project myself so I know business priorities change and that sometimes things slow down for a while; mostly what I am looking for here is reassurance that there are still folks investing in this project and that it makes sense to continue relying on it to build GraphQL APIs.

    opened by negz 55
  • Make Input Schema optional

    Make Input Schema optional

    What happened?

    I have some minimal apps using gqlgen that need to update the User Model, updating the using

    But when regenerate gqlgen it should use pointers for the password where the password are not inputed from user and then causing (nil pointer)

    What did you expect?

    So when updating the User , the user can optionally input password or not.

    Minimal graphql.schema and models to reproduce

    type Mutation {
        updateUser(input: UpdateUser!): User!
    }
    
    input UpdateUser {
        id: ID!
        name: String!
        password: String
    }
    

    versions

    • gqlgen version? V.0.9.3
    • go version? 1.12.9
    • dep or go modules? gomod
    question stale 
    opened by mlazuardy-dyned 35
  • Input types: null vs unspecified

    Input types: null vs unspecified

    Expected Behaviour

    Per spec:

    If the value null was provided for an input object field, and the field’s type is not a non‐null type, an entry in the coerced unordered map is given the value null. In other words, there is a semantic difference between the explicitly provided value null versus having not provided a value.

    Actual Behavior

    Right now its not possible (as far as I know) to differentiate between null and not having provided a value.

    Minimal graphql.schema and models to reproduce

    input UpdateUserInput {
      id: ID!
      name: String
      age: Int
    }
    

    produces

    type UpdateUserInput struct {
    	ID   string  `json:"id"`
    	Name *string `json:"name"`
    	Age  *int    `json:"age"`
    }
    

    If the user now submits the input with only id and name, I don't know what to do with the age. Did the user want to clear his age (i.e. set it to null) or did he not want to update it (i.e. not specified)?

    opened by danilobuerger 34
  • Split generated stubs into multiple files

    Split generated stubs into multiple files

    can we generate go-code based on schema to multiple files and if the file is already exist, then just update the files ?

    may be like bellow :

    schema.graphql

    schema {
        query: MyQuery
        mutation: MyMutation
    }
    
    type MyQuery {
        todo(id: Int!): Todo
        lastTodo: Todo
        todos: [Todo!]!
    }
    
    type MyMutation {
        createTodo(todo: TodoInput!): Todo!
        updateTodo(id: Int!, changes: Map!): Todo
    }
    
    type Todo {
        id: Int!
        text: String!
        done: Boolean!
    }
    
    input TodoInput {
        text: String!
        done: Boolean
    }
    

    gqlgen.yml

    schema: schema/schema.graphql
    exec:
      filename: generated/generated.go
      package: generated
    model:
      filename: models/model.go
    #  multiple_files: true ## maybe we can add this config
    resolver:
      filename: resolvers/resolver.go
      package: resolvers
    #  multiple_files: true ## maybe we can add this config
      type: Resolver
    struct_tag: json
    

    generated files

    models/
         model.go
         todo.go
         todoInput.go
    resolvers/
         resolver.go
         queryResolver.go
         mutationResolver.go
         todoResolver.go
    

    it would be nice if we can work on specific file.

    Thank you.

    enhancement stale 
    opened by ariffebr 27
  • Apollo Federation MVP

    Apollo Federation MVP

    This PR is mostly to get some eyes on the current architecture and what can be improved/re-written.

    Once that looks good, I'll move on to adding unit/e2e tests

    Fixes https://github.com/99designs/gqlgen/issues/740

    opened by marwan-at-work 26
  • go generate gives missing go sum entry for module errors

    go generate gives missing go sum entry for module errors

    What happened?

    running go generate ./... gives go package errors

    ../../../../../go/pkg/mod/github.com/99designs/[email protected]/cmd/gen.go:9:2: missing go.sum entry for module providing package github.com/urfave/cli/v2
    ../../../../../go/pkg/mod/github.com/99designs/[email protected]/internal/imports/prune.go:15:2: missing go.sum entry for module providing package golang.org/x/tools/go/ast/astutil
    ../../../../../go/pkg/mod/github.com/99designs/[email protected]/internal/code/packages.go:8:2: missing go.sum entry for module providing package golang.org/x/tools/go/packages
    ../../../../../go/pkg/mod/github.com/99designs/[email protected]/internal/imports/prune.go:16:2: missing go.sum entry for module providing package golang.org/x/tools/imports
    graph/resolver.go:3: running "go": exit status 1
    

    if i run go get on each of these dependencies the error goes away and i can generate files just fine, but they come back after 1-2 days. so its quite annoying to keep having to run these.

    I've spoken to a couple of people who used gqlgen before and none of them had any problems so I'm sure its not a super big deal. But just looking to get some help to get rid of these errors.

    What did you expect?

    go generate to generate the files without these errors

    Minimal graphql.schema and models to reproduce

    this happens with even the default generated schema

    versions

    • gqlgen version? v0.13.0
    • go version? go1.16beta1 darwin/arm64
    • dep or go modules? go modules
    opened by peter9207 24
  • Could not connect to websocket

    Could not connect to websocket

    Could not connect to websocket endpoint wss://127.0.0.1:4000/api/query. Please check if the endpoint url is correct.

    Im using mux.

    resolver.go

    var TicketSub struct {
    	sync.RWMutex
    	Subscribers map[string]chan *gqlapi.TicketStatusChangePayload
    }
    
    func (r *subscriptionRootResolver) TicketStatusChanged(ctx context.Context) (<-chan *gqlapi.TicketStatusChangePayload, error) {
    	user := &models.User{
    		UUID: "e70e78bb-9d08-405d-a0ed-266ec703de19",
    	}
    	events := make(chan *gqlapi.TicketStatusChangePayload, 1)
    
    	go func() {
    		<-ctx.Done()
    		TicketSub.Lock()
    		delete(TicketSub.Subscribers, user.UUID)
    		TicketSub.Unlock()
    	}()
    
    	TicketSub.Lock()
    	TicketSub.Subscribers[user.UUID] = events
    	TicketSub.Unlock()
    
    	return events, nil
    }
    
    func (r *queryRootResolver) SubscriptionTest(ctx context.Context) (err error) {
    	id := uuid.New().String()
    	notifyTicketStatusChange("e70e78bb-9d08-405d-a0ed-266ec703de19", id, fmt.Sprintf("Ticket (uuid=%s) status changed.", id))
    	return
    }
    

    main.go

    func main() {
    	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    	Start(ctx)
    
    	// Wait for interrupt signal to gracefully shutdown the server with
    	// a timeout of 10 seconds.
    	sigs := make(chan os.Signal, 1)
    	signal.Notify(sigs,
    		os.Kill,
    		os.Interrupt,
    		syscall.SIGHUP,
    		syscall.SIGINT,
    		syscall.SIGTERM,
    		syscall.SIGQUIT)
    	<-sigs
    
    	defer func() {
    		cancel()
    	}()
    
    }
    
    func Start(ctx context.Context) {
    	go start(ctx)
    }
    
    func start(ctx context.Context) {
    	cfg := gqlapi.Config{
    		Resolvers: &resolvers.Resolver{},
    		Directives: gqlapi.DirectiveRoot{
    			Auth:    directives.Auth,
    		},
    	}
    	r := mux.NewRouter()
    	r.HandleFunc("/", handler.Playground("GraphQL playground", "/api/query"))
    
    	upgrader := websocket.Upgrader{
    		CheckOrigin: func(r *http.Request) bool {
    			return true
    		},
    		EnableCompression: true,
    	}
    
    	options := []handler.Option{
    		handler.RecoverFunc(func(ctx context.Context, err interface{}) error {
    			// notify bug tracker...
    			return fmt.Errorf("Internel server error.")
    		}),
    		handler.WebsocketUpgrader(upgrader),
    	}
    
    	r.HandleFunc("/api/query", handler.GraphQL(
    		gqlapi.NewExecutableSchema(cfg),
    		options...,
    	))
    	srv := &http.Server{
    		Handler: r,              //
    		Addr:    "0.0.0.0:4000", //
    	}
    	srv.SetKeepAlivesEnabled(true)
    	log.Fatal(srv.ListenAndServeTLS("cert.pem", "key.pem"))
    }
    

    Screenshot from 2019-03-19 18 56 02

    I can push message via websocket tunnel as you can see on the attached screenshot, but it closed after about 10-15 seconds.

    v0.9.2 
    opened by mia0x75 24
  • Support for apollo batching

    Support for apollo batching

    It would be awesome if we could detect batch operations based on a header and then parse the incoming request as an array of operations or a single operation.

    enhancement transport 
    opened by macnibblet 24
  • use

    use "embed" in generated code

    I work in a codebase that uses gqlgen heavily for a large graphql monolith. There are 384k lines of code in the files generated by gqlgen. We check in all these files into git because it takes a long time to generate them (and because it's a lot simpler to work that way).

    This PR changes the generated files to use the embed feature of go to reduce the size of the generated files and reduce the chance of having to resolve PR conflicts.

    I think that the complexity of the change is fairly low and there is no down side to introducing it. I made sure it has reasonable test coverage. It should be backwards compatible and doesn't change any behaviour.

    I have:

    • [x] Added tests covering the bug / feature (see testing)
    • [n/a] Updated any relevant documentation (see docs)
    opened by vikstrous 21
  • Following the getting started fails with go1.18beta2

    Following the getting started fails with go1.18beta2

    What happened?

    Trying to follow the getting started fails at step go run github.com/99designs/gqlgen init.

    Adding the --verbose flag produces the following error message:

    internal error: package "github.com/vektah/gqlparser/v2/ast" without types was imported from "github.com/99designs/gqlgen/graphql/introspection"
    

    Further executions of the generate command produce the same error.

    What did you expect?

    Being able to go through the getting started without errors.

    Minimal graphql.schema and models to reproduce

    N/A

    versions

    • gqlgen v0.16.0
    • go v1.18beta2
    • go modules

    Complete logs (reproduced in a docker container)

    $ docker container run -it --rm golang:1.18-rc bash
    [email protected]:/go# mkdir example
    [email protected]:/go# cd example
    [email protected]:/go# go mod init example
    go: creating new go.mod: module example
    [email protected]:/go/example# printf '// +build tools\npackage tools\nimport _ "github.com/99designs/gqlgen"' | gofmt > tools.go
    [email protected]:/go# go mod tidy
    go: finding module for package github.com/99designs/gqlgen
    go: downloading github.com/99designs/gqlgen v0.16.0
    go: found github.com/99designs/gqlgen in github.com/99designs/gqlgen v0.16.0
    go: downloading github.com/matryer/moq v0.2.3
    go: downloading github.com/urfave/cli/v2 v2.3.0
    go: downloading github.com/vektah/gqlparser/v2 v2.2.0
    go: downloading github.com/stretchr/testify v1.4.0
    go: downloading github.com/gorilla/websocket v1.4.2
    go: downloading golang.org/x/tools v0.1.5
    go: downloading gopkg.in/yaml.v2 v2.2.4
    go: downloading github.com/hashicorp/golang-lru v0.5.0
    go: downloading github.com/mitchellh/mapstructure v1.2.3
    go: downloading github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
    go: downloading github.com/agnivade/levenshtein v1.1.0
    go: downloading gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
    go: downloading github.com/davecgh/go-spew v1.1.1
    go: downloading github.com/pmezard/go-difflib v1.0.0
    go: downloading github.com/sergi/go-diff v1.1.0
    go: downloading github.com/kr/pretty v0.1.0
    go: downloading github.com/kr/text v0.1.0
    go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.1
    go: downloading github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48
    go: downloading github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0
    go: downloading github.com/russross/blackfriday/v2 v2.1.0
    go: downloading golang.org/x/mod v0.4.2
    go: downloading golang.org/x/sys v0.0.0-20210510120138-977fb7262007
    go: downloading golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
    [email protected]:/go/example# go run github.com/99designs/gqlgen --verbose init
    Creating gqlgen.yml
    Creating graph/schema.graphqls
    Creating server.go
    Generating...
    internal error: package "github.com/vektah/gqlparser/v2/ast" without types was imported from "github.com/99designs/gqlgen/graphql/introspection"
    exit status 1
    [email protected]:/go/example# go run github.com/99designs/gqlgen --verbose generate
    internal error: package "github.com/vektah/gqlparser/v2/ast" without types was imported from "github.com/99designs/gqlgen/graphql/introspection"
    exit status 1
    
    opened by nlepage 21
  • Fix CreateTodo

    Fix CreateTodo

    The getting started guide seems to have a mistake in the fix CreateTodo part. There is only a small formatting change in the CreateTodo() but otherwise it's the same as before. As I'm new to the project, I hope I came up with the right solution (at least it seems to work).

    opened by sj14 0
  • Make uploads content seekable

    Make uploads content seekable

    Uploads currently expose their content as an io.Reader, which makes it hard to read their content multiple times.

    The content is either backed by an os.File which is seekable or a bytesReader (in-memory buffer) which can be trivially made seekable.

    This PR makes bytesReader implement the io.Seeker interface and changes the type of the field File in Upload to io.ReadSeeker to allow consumers to simply call Seek on the upload's content.

    The prevRune field has also been removed from bytesReader since it was unused.

    I have:

    • [X] Added tests covering the bug / feature (see testing)
    • [X] Updated any relevant documentation (see docs)
    opened by Desuuuu 1
  • WebsocketInitFunc sample recipe seems outdated

    WebsocketInitFunc sample recipe seems outdated

    Sample recipe codes using WebsocketInitFunc from below seems to be outdated with build errors.

    https://github.com/99designs/gqlgen/blob/master/docs/content/recipes/authentication.md. https://github.com/99designs/gqlgen/blob/master/docs/content/recipes/authentication.md#websockets.

    func main() {
    	router := chi.NewRouter()
    	router.Use(auth.Middleware(db))
    	router.Handle("/", handler.Playground("Starwars", "/query"))
    	router.Handle("/query",
    		handler.GraphQL(starwars.NewExecutableSchema(starwars.NewResolver())),
    		WebsocketInitFunc(func(ctx context.Context, initPayload InitPayload) (context.Context, error) {
                             ...
    			return userCtx, nil
    		}))
    	)
    	err := http.ListenAndServe(":8080", router)
    	if err != nil {
    		panic(err)
    	}
    }
    

    Fix by using handler.Server.AddTransport(..., InitFunc,...)

    	srv := handler.New(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.Resolver{
    		...,
    	}}))
    	srv.AddTransport(transport.POST{})
    	srv.AddTransport(transport.Websocket{
    		KeepAlivePingInterval: 10 * time.Second,
    		Upgrader: websocket.Upgrader{
    			CheckOrigin: func(r *http.Request) bool {
    				return true
    			},
    		},
    		InitFunc: func(ctx context.Context, initPayload transport.InitPayload) (context.Context, error) {
    			return yourImplFunc(ctx, initPayload)
    		},
    	})
    

    Minimal graphql.schema and models to reproduce

    N.A.

    versions

    • gqlgen version v0.17.10
    • go version go1.18.2 linux/amd64

    Perhaps documentation needs to be updated.

    opened by SebLKMa 0
  • SetErrorPresenter receives fresh r.Context(), not modified from server middleware

    SetErrorPresenter receives fresh r.Context(), not modified from server middleware

    What happened?

    The method SetErrorPresenter seems to be receiving a fresh context, a la the following code snippet:

    		if err := recover(); err != nil {
    			err := s.exec.PresentRecoveredError(r.Context(), err)
    			resp := &graphql.Response{Errors: []*gqlerror.Error{err}}
    			b, _ := json.Marshal(resp)
    			w.WriteHeader(http.StatusUnprocessableEntity)
    			w.Write(b)
    		}
    

    https://github.com/99designs/gqlgen/blob/master/graphql/handler/server.go#L103-L108

    However, we are mutating the context in our web middleware, and want to receive that mutated context. This is needed because we extract/inject data to align headers with context (i.e. present a unique request ID to the context, and other metadata).

    What did you expect?

    The incoming context in SetErrorPresenter to contain the metadata from the middleware.

    Minimal graphql.schema and models to reproduce

    Modify ctx in web middleware, compare to incoming ctx in SetErrorPresenter.

    versions

    • go run github.com/99designs/gqlgen version? v0.17.1
    • go version? go version go1.18.1 darwin/amd64
    opened by r0fls 1
  • Config option for generating embedded structs for GraphQL interfaces

    Config option for generating embedded structs for GraphQL interfaces

    See discussion https://github.com/99designs/gqlgen/discussions/2212 for more context.

    Given the following GraphQL schema:

    interface Animal {
        species: String!
    }
    
    type Human implements Animal {
        species: String!
        name: String!
    }
    
    type Dog implements Animal {
        species: String!
        breed: String!
    }
    

    gqlgen without this PR generates the following Go code:

    type Animal interface {
    	IsAnimal()
    }
    
    type Human struct {
    	Species string `json:"species"`
    	Name    string `json:"name"`
    }
    
    func (Human) IsAnimal() {}
    
    type Dog struct {
    	Species string `json:"species"`
    	Breed    string `json:"breed"`
    }
    
    func (Dog) IsAnimal() {}
    

    gqlgen with this PR and a config that includes generate_embedded_structs_for_interfaces: true generates the following Go code (existing users that do not specifically opt in to the new behavior by adding this option to their config will continue getting the same behavior as before this PR):

    type Animal struct {
    	Species string `json:"species"`
    }
    
    type Human struct {
    	Animal
    	Name    string `json:"name"`
    }
    
    type Dog struct {
    	Animal
    	Breed    string `json:"breed"`
    }
    

    I have:

    • [x] Added tests covering the bug / feature (see testing)
    • [x] Updated any relevant documentation (see docs)
    opened by ianling 3
  • error while running go generate

    error while running go generate

    What happened?

    I am getting error while running go generate

    ec._fieldMiddleware undefined (type *executionContext has no field or method _fieldMiddleware)

    What did you expect?

    go generate should run successfully. After downgrading gqlgen to v1.14.0 & gqlparser to v2.2.0, go generate was successful.

    versions

    • go run github.com/99designs/gqlgen version? v0.17.8
    • go version? 1.18
    opened by shimish2 5
Releases(v0.17.10)
  • v0.17.10(Jun 13, 2022)

    What's Changed

    • fix: chat example frontend race condition by @MoofMonkey in https://github.com/99designs/gqlgen/pull/2219
    • Update dataloaders.MD by @mimol91 in https://github.com/99designs/gqlgen/pull/2221
    • Respect options in WebsocketOnce by @crossworth in https://github.com/99designs/gqlgen/pull/2223
    • Config option to only make cyclical struct fields pointers by @ianling in https://github.com/99designs/gqlgen/pull/2174
    • Config option to make resolvers return values instead of pointers by @ianling in https://github.com/99designs/gqlgen/pull/2175
    • fix #1876: Optional Any type should allow nil values by @vediatoni in https://github.com/99designs/gqlgen/pull/2231
    • fix: #2234 Response.Errors in DispatchError function is not PresentedError by @oikyn in https://github.com/99designs/gqlgen/pull/2235
    • Use exact capitalization from field names overridden in config by @ianling in https://github.com/99designs/gqlgen/pull/2237
    • update gqlparser to v2.4.5 by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2239

    New Contributors

    • @mimol91 made their first contribution in https://github.com/99designs/gqlgen/pull/2221
    • @crossworth made their first contribution in https://github.com/99designs/gqlgen/pull/2223
    • @ianling made their first contribution in https://github.com/99designs/gqlgen/pull/2174
    • @vediatoni made their first contribution in https://github.com/99designs/gqlgen/pull/2231
    • @oikyn made their first contribution in https://github.com/99designs/gqlgen/pull/2235

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.9...v0.17.10

    Source code(tar.gz)
    Source code(zip)
  • v0.17.9(May 26, 2022)

    What's Changed

    • Check only direct dependencies by @ubiuser in https://github.com/99designs/gqlgen/pull/2205
    • fix #2204 - don't try to embed builtin sources by @vikstrous in https://github.com/99designs/gqlgen/pull/2214
    • fix: prevent goroutine leak and CPU spinning at websocket transport by @MoofMonkey in https://github.com/99designs/gqlgen/pull/2209
    • Update gqlparser by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2216

    New Contributors

    • @MoofMonkey made their first contribution in https://github.com/99designs/gqlgen/pull/2209

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.8...v0.17.9

    Source code(tar.gz)
    Source code(zip)
  • v0.17.8(May 25, 2022)

    What's Changed

    • This works on Windows too! by @frederikhors in https://github.com/99designs/gqlgen/pull/2197
    • Run CI tests on windows by @mtibben in https://github.com/99designs/gqlgen/pull/2199
    • Add security workflow with nancy by @ubiuser in https://github.com/99designs/gqlgen/pull/2202

    New Contributors

    • @ubiuser made their first contribution in https://github.com/99designs/gqlgen/pull/2202

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.7...v0.17.8

    Source code(tar.gz)
    Source code(zip)
  • v0.17.7(May 24, 2022)

    What's Changed

    • fix #2190 - don't use backslash for "embed" paths on windows by @vikstrous in https://github.com/99designs/gqlgen/pull/2191
    • Fix misprint by @frederikhors in https://github.com/99designs/gqlgen/pull/2187
    • Update module dependencies by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2192

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.6...v0.17.7

    Source code(tar.gz)
    Source code(zip)
  • v0.17.6(May 23, 2022)

    What's Changed

    • Use MultipartReader to parse file uploads by @emersion in https://github.com/99designs/gqlgen/pull/2135
    • Update package.json by @b5710546232 in https://github.com/99designs/gqlgen/pull/2138
    • Update getting-started.md by @alan890104 in https://github.com/99designs/gqlgen/pull/2140
    • Allow absolute URLs to the GraphQL playground by @marcusirgens in https://github.com/99designs/gqlgen/pull/2142
    • use "embed" in generated code by @vikstrous in https://github.com/99designs/gqlgen/pull/2119
    • Fix invalid relative playground subscription URL by @marcusirgens in https://github.com/99designs/gqlgen/pull/2148
    • Add argument to WebsocketErrorFunc by @foreverest in https://github.com/99designs/gqlgen/pull/2124
    • Fix docs bug in field collection by @V1def in https://github.com/99designs/gqlgen/pull/2141
    • go: update gqlparser to latest by @a8m in https://github.com/99designs/gqlgen/pull/2149
    • fix: prevents goroutine leak at websocket transport #2167 by @fletcherist in https://github.com/99designs/gqlgen/pull/2168
    • Fix getting-started docs missing fields resolver config & Todo struct UserID field by @a70537952 in https://github.com/99designs/gqlgen/pull/2157
    • Bump dset from 3.1.1 to 3.1.2 in /integration by @dependabot in https://github.com/99designs/gqlgen/pull/2176
    • Correct identation by @ndthanhdev in https://github.com/99designs/gqlgen/pull/2182
    • Improve operation error handling by @Desuuuu in https://github.com/99designs/gqlgen/pull/2184

    New Contributors

    • @emersion made their first contribution in https://github.com/99designs/gqlgen/pull/2135
    • @b5710546232 made their first contribution in https://github.com/99designs/gqlgen/pull/2138
    • @alan890104 made their first contribution in https://github.com/99designs/gqlgen/pull/2140
    • @marcusirgens made their first contribution in https://github.com/99designs/gqlgen/pull/2142
    • @V1def made their first contribution in https://github.com/99designs/gqlgen/pull/2141
    • @fletcherist made their first contribution in https://github.com/99designs/gqlgen/pull/2168
    • @a70537952 made their first contribution in https://github.com/99designs/gqlgen/pull/2157
    • @ndthanhdev made their first contribution in https://github.com/99designs/gqlgen/pull/2182
    • @Desuuuu made their first contribution in https://github.com/99designs/gqlgen/pull/2184

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.5...v0.17.6

    Source code(tar.gz)
    Source code(zip)
  • v0.17.5(Apr 29, 2022)

    What's Changed

    • Docs: Update federation.md by @lleadbet in https://github.com/99designs/gqlgen/pull/2129
    • Ignore protobuf files in coverage by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2133
    • update instructions to specify package of Role by @prankymat in https://github.com/99designs/gqlgen/pull/2130
    • feat: added graphql.UnmarshalInputFromContext by @giautm in https://github.com/99designs/gqlgen/pull/2131
    • Feature: Add FTV1 Support via Handler by @lleadbet in https://github.com/99designs/gqlgen/pull/2132

    New Contributors

    • @prankymat made their first contribution in https://github.com/99designs/gqlgen/pull/2130
    • @giautm made their first contribution in https://github.com/99designs/gqlgen/pull/2131

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.4...v0.17.5

    Source code(tar.gz)
    Source code(zip)
  • v0.17.4(Apr 25, 2022)

    What's Changed

    • update modules except mapstructure by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2118
    • shorten some generated code by @vikstrous in https://github.com/99designs/gqlgen/pull/2120
    • Feature: Adds Federation 2 Support by @lleadbet in https://github.com/99designs/gqlgen/pull/2115

    New Contributors

    • @lleadbet made their first contribution in https://github.com/99designs/gqlgen/pull/2115

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.3...v0.17.4

    Source code(tar.gz)
    Source code(zip)
  • v0.17.3(Apr 20, 2022)

    What's Changed

    • codegen: allow binding methods with optional variadic arguments by @a8m in https://github.com/99designs/gqlgen/pull/2066
    • graphql: add FieldContext.Child field function and enable it in codegen by @a8m in https://github.com/99designs/gqlgen/pull/2062
    • Bump Playground version by @qhenkart in https://github.com/99designs/gqlgen/pull/2078
    • Add instructions for enabling autobinding by @jpwilliams in https://github.com/99designs/gqlgen/pull/2079
    • Add AllowedMethods field to transport.Options by @morikuni in https://github.com/99designs/gqlgen/pull/2080
    • Bump minimist from 1.2.5 to 1.2.6 in /integration by @dependabot in https://github.com/99designs/gqlgen/pull/2085
    • Fix misprint by @frederikhors in https://github.com/99designs/gqlgen/pull/2102
    • Update golangci-lint action by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2103
    • Use Github API to update the docs by @frankywahl in https://github.com/99designs/gqlgen/pull/2101
    • Fix websocket subscriptions to not double complete by @telemenar in https://github.com/99designs/gqlgen/pull/2095
    • Change the error message to be consumer targeted by @telemenar in https://github.com/99designs/gqlgen/pull/2096
    • Fix the ability of websockets to get errors by @telemenar in https://github.com/99designs/gqlgen/pull/2097
    • Update gqlparser by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2109

    New Contributors

    • @jpwilliams made their first contribution in https://github.com/99designs/gqlgen/pull/2079
    • @morikuni made their first contribution in https://github.com/99designs/gqlgen/pull/2080
    • @telemenar made their first contribution in https://github.com/99designs/gqlgen/pull/2095

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.2...v0.17.3

    Source code(tar.gz)
    Source code(zip)
  • v0.17.2(Mar 21, 2022)

    What's Changed

    • fixed modelgen test schema by @Code-Hex in https://github.com/99designs/gqlgen/pull/2032
    • Fix #1961 for Go 1.18 by @StevenACoffman in https://github.com/99designs/gqlgen/pull/2052

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.1...v0.17.2

    Source code(tar.gz)
    Source code(zip)
  • v0.17.1(Mar 2, 2022)

    What's Changed

    • fixed model gen for multiple implemented type by @Code-Hex in https://github.com/99designs/gqlgen/pull/2021
    • Update golangci-lint and fix resource leak by @mtibben in https://github.com/99designs/gqlgen/pull/2024

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.17.0...v0.17.1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Mar 2, 2022)

    What's Changed

    • Fix #1777 by updating version constant and adding release checklist by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1848
    • Update quickstart by @ipfans in https://github.com/99designs/gqlgen/pull/1850
    • Remove outdated version reference so example is always for latest by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1851
    • fix #1770 minor error in getting-started.md by @fulviodenza in https://github.com/99designs/gqlgen/pull/1771
    • Fix #1636 by updating gqlparser by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1857
    • Fix #1862 entityResolver directive breaks resolving of required nested fields by @chedom in https://github.com/99designs/gqlgen/pull/1863
    • Fix #1776 : Edit and persist headers in GraphiQL by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1856
    • Bump node-fetch from 2.6.1 to 2.6.7 in /integration by @dependabot in https://github.com/99designs/gqlgen/pull/1859
    • Bump gopkg.in/yaml.v2 from 2.2.4 to 2.2.8 by @dependabot in https://github.com/99designs/gqlgen/pull/1858
    • fix: whitelist VERSION and CURRENT_VERSION env vars by @zenyui in https://github.com/99designs/gqlgen/pull/1870
    • Comment out autobind in the sample config file by @frederikhors in https://github.com/99designs/gqlgen/pull/1872
    • docs: migrate dataloaders sample to graph-gophers/dataloader by @zenyui in https://github.com/99designs/gqlgen/pull/1871
    • remove autobind example from init commands by @zachsmith1 in https://github.com/99designs/gqlgen/pull/1949
    • fix: typo in dataloader code sample by @plog3050 in https://github.com/99designs/gqlgen/pull/1954
    • rename "example" dir to "_examples" by @frederikhors in https://github.com/99designs/gqlgen/pull/1734
    • Fix 1955: only print message on @key found on interfaces by @carldunham in https://github.com/99designs/gqlgen/pull/1956
    • Upate init CI step by @mtibben in https://github.com/99designs/gqlgen/pull/1957
    • Cleanup main by @mtibben in https://github.com/99designs/gqlgen/pull/1958
    • Websocket i/o timeout fix by @RobinCPel in https://github.com/99designs/gqlgen/pull/1973
    • generate resolvers for input types by @FanFani4 in https://github.com/99designs/gqlgen/pull/1950
    • Websocket Error Handling by @RobinCPel in https://github.com/99designs/gqlgen/pull/1975
    • Fix broken links in docs by @trenton42 in https://github.com/99designs/gqlgen/pull/1983
    • fixed introspection for schema description and specifiedByURL by @Code-Hex in https://github.com/99designs/gqlgen/pull/1986
    • Web Socket initialization message timeout by @RobinCPel in https://github.com/99designs/gqlgen/pull/2006
    • Bump ajv from 6.10.2 to 6.12.6 in /integration by @dependabot in https://github.com/99designs/gqlgen/pull/2007
    • support to generate model for intermediate interface by @Code-Hex in https://github.com/99designs/gqlgen/pull/1982
    • fix introspection for description to be nullable by @Code-Hex in https://github.com/99designs/gqlgen/pull/2008
    • Clean up docs to clarify how to use a particular version by @mtibben in https://github.com/99designs/gqlgen/pull/2015
    • Remove ambient imports by @mtibben in https://github.com/99designs/gqlgen/pull/2016
    • Test gqlgen generate in CI by @mtibben in https://github.com/99designs/gqlgen/pull/2017
    • Embed templates instead of inlining them by @mtibben in https://github.com/99designs/gqlgen/pull/2019
    • Revert "Update quickstart" by @mtibben in https://github.com/99designs/gqlgen/pull/2014

    New Contributors

    • @fulviodenza made their first contribution in https://github.com/99designs/gqlgen/pull/1771
    • @zenyui made their first contribution in https://github.com/99designs/gqlgen/pull/1870
    • @zachsmith1 made their first contribution in https://github.com/99designs/gqlgen/pull/1949
    • @plog3050 made their first contribution in https://github.com/99designs/gqlgen/pull/1954
    • @FanFani4 made their first contribution in https://github.com/99designs/gqlgen/pull/1950
    • @trenton42 made their first contribution in https://github.com/99designs/gqlgen/pull/1983

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.16.0...v0.17.0

    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Jan 24, 2022)

    What's Changed

    • Bump gqlgen.com version list by @ipfans in https://github.com/99designs/gqlgen/pull/1778
    • Imporve gqlgen test cases by @ipfans in https://github.com/99designs/gqlgen/pull/1773
    • Fix #1834: Implement federation correctly by @newerbie in https://github.com/99designs/gqlgen/pull/1835
    • Update README.md by @patriotphoenix in https://github.com/99designs/gqlgen/pull/1836
    • Fix #1832 @requires directive when @entityResolver is used by @chedom in https://github.com/99designs/gqlgen/pull/1833
    • Breaking: Revert "Breaking: Fix plugin addition" by @Code-Hex in https://github.com/99designs/gqlgen/pull/1838
    • add PrependPlugin by @Code-Hex in https://github.com/99designs/gqlgen/pull/1839
    • Prepare for v0.16.0 release by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1842

    New Contributors

    • @newerbie made their first contribution in https://github.com/99designs/gqlgen/pull/1835
    • @patriotphoenix made their first contribution in https://github.com/99designs/gqlgen/pull/1836
    • @chedom made their first contribution in https://github.com/99designs/gqlgen/pull/1833

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.15.1...v0.16.0

    Source code(tar.gz)
    Source code(zip)
  • v0.15.1(Jan 16, 2022)

    What's Changed

    • Fixed broken link by @mkusaka in https://github.com/99designs/gqlgen/pull/1768
    • Fix #1765: Sometimes module info not exists or not loaded. by @ipfans in https://github.com/99designs/gqlgen/pull/1767

    New Contributors

    • @mkusaka made their first contribution in https://github.com/99designs/gqlgen/pull/1768

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.15.0...v0.15.1

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Jan 15, 2022)

    What's Changed

    • Resolve requests for federation entities in parallel by @benjaminjkraft in https://github.com/99designs/gqlgen/pull/1285
    • serialize ID just like String by @bickyeric in https://github.com/99designs/gqlgen/pull/1340
    • Return type loading errors in config.Binder.FindObject by @mathieupost in https://github.com/99designs/gqlgen/pull/1529
    • subscriptions: send complete message on resolver panic by @alexsn in https://github.com/99designs/gqlgen/pull/1405
    • allow more than 10 different import sources with types by @simborg in https://github.com/99designs/gqlgen/pull/1526
    • support input object directive by @Code-Hex in https://github.com/99designs/gqlgen/pull/1525
    • Bypass complexity limit on __Schema queries. by @tsh96 in https://github.com/99designs/gqlgen/pull/1581
    • fix Options response header by @jjmengze in https://github.com/99designs/gqlgen/pull/1608
    • Update to go 1.17 by @mtibben in https://github.com/99designs/gqlgen/pull/1610
    • Update errors to use go1.13 semantics by @mtibben in https://github.com/99designs/gqlgen/pull/1606
    • [POC/RFC] Split examples into separate go module by @lwc in https://github.com/99designs/gqlgen/pull/1607
    • Update golangci linter by @mtibben in https://github.com/99designs/gqlgen/pull/1612
    • Clean up non-module deps by @mtibben in https://github.com/99designs/gqlgen/pull/1613
    • Also test against 1.16 by @mtibben in https://github.com/99designs/gqlgen/pull/1614
    • Update docs for getting started by @mtibben in https://github.com/99designs/gqlgen/pull/1617
    • Update disabling Introspection by @FlymeDllVa in https://github.com/99designs/gqlgen/pull/1624
    • Fix typo in the getting-started docs by @robertmarsal in https://github.com/99designs/gqlgen/pull/1628
    • Appropriately Handle Falsy Default Field Values by @wilhelmeek in https://github.com/99designs/gqlgen/pull/1623
    • remove redundant favicon by @ash99d in https://github.com/99designs/gqlgen/pull/1638
    • Marshaling & Unmarshaling time return initial value by @frankywahl in https://github.com/99designs/gqlgen/pull/1515
    • Forward go mod tidy stdout/stderr by @benjaminjkraft in https://github.com/99designs/gqlgen/pull/1619
    • Fix example run instructions by @minus7 in https://github.com/99designs/gqlgen/pull/1640
    • Update time format for Time scalar by @cameronbrill in https://github.com/99designs/gqlgen/pull/1648
    • Add QR and KVK to common initialisms by @RichardLindhout in https://github.com/99designs/gqlgen/pull/1419
    • Bump tmpl from 1.0.4 to 1.0.5 in /integration by @dependabot in https://github.com/99designs/gqlgen/pull/1627
    • Fixes #1653: update docs and wrap error if not *gqlerror.Error by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1654
    • Enable lowercase type names in GraphQL schema to properly render by @tkuhlman in https://github.com/99designs/gqlgen/pull/1359
    • adding support for sending extension with gqlgen client by @schafle in https://github.com/99designs/gqlgen/pull/1633
    • add extraTag directive by @j75689 in https://github.com/99designs/gqlgen/pull/1173
    • handling unconventional naming used in type names by @vnj-uber in https://github.com/99designs/gqlgen/pull/1549
    • Add graphql schema aware field level hook to modelgen by @tprebs in https://github.com/99designs/gqlgen/pull/1650
    • Reload config packages after generating models by @wendorf in https://github.com/99designs/gqlgen/pull/1491
    • codegen: ensure Elem present before using by @tmc in https://github.com/99designs/gqlgen/pull/1317
    • remove redundant WithOperationContext call by @bickyeric in https://github.com/99designs/gqlgen/pull/1641
    • fix double indirect bug by @carldunham in https://github.com/99designs/gqlgen/pull/1604
    • Add ReplacePlugin option to replace a specific plugin by @tprebs in https://github.com/99designs/gqlgen/pull/1657
    • raise panic when nested @requires are used on federation by @vvakame in https://github.com/99designs/gqlgen/pull/1655
    • Update GQLgen test client to work with multipart form data by @Sonna in https://github.com/99designs/gqlgen/pull/1418
    • Allow custom websocket upgrader by @foreverest in https://github.com/99designs/gqlgen/pull/1595
    • Revert 1595 by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1658
    • Revert "Update GQLgen test client to work with multipart form data" by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1659
    • Add a config option to skip running "go mod tidy" on code generation by @yar00001 in https://github.com/99designs/gqlgen/pull/1644
    • Adds RootFieldInterceptor to extension interfaces by @CoreyWinkelmann in https://github.com/99designs/gqlgen/pull/1647
    • Update GQLgen test client to work with multipart form data (take 2) by @Sonna in https://github.com/99designs/gqlgen/pull/1661
    • Add follow-schema layout for exec by @kevinmbeaulieu in https://github.com/99designs/gqlgen/pull/1309
    • Update directives doc page by @JohnMaguire in https://github.com/99designs/gqlgen/pull/1660
    • Merge Inline Fragment Nested Interface Fields by @wilhelmeek in https://github.com/99designs/gqlgen/pull/1663
    • Add ICMP to common initialisms by @JohnMaguire in https://github.com/99designs/gqlgen/pull/1666
    • ContextMarshaler by @duckbrain in https://github.com/99designs/gqlgen/pull/1652
    • Fix 1138: nested fieldset support by @carldunham in https://github.com/99designs/gqlgen/pull/1669
    • feat: generate resolvers for inputs if fields are missing by @danielvladco in https://github.com/99designs/gqlgen/pull/1404
    • Update getting-started.md by @wejafoo in https://github.com/99designs/gqlgen/pull/1674
    • Fix nil pointer dereference when an invalid import is bound to a model by @JohnMaguire in https://github.com/99designs/gqlgen/pull/1676
    • Rename @extraTag directive to @goTag and make repeatable by @wilhelmeek in https://github.com/99designs/gqlgen/pull/1680
    • Reimplement goTag using FieldMutateHook by @tprebs in https://github.com/99designs/gqlgen/pull/1682
    • Support for multiple @key directives in federation by @carldunham in https://github.com/99designs/gqlgen/pull/1684
    • DOC: Fixed indention in example code. by @hsblhsn in https://github.com/99designs/gqlgen/pull/1693
    • Revert "Support for multiple @key directives in federation" by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1698
    • Entity resolver tests by @MiguelCastillo in https://github.com/99designs/gqlgen/pull/1697
    • Ignore generated files from test coverage by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1699
    • transport: implement graphql-transport-ws ws sub-protocol by @jordanabderrachid in https://github.com/99designs/gqlgen/pull/1507
    • Replace ! with _ in root.generated file to avoid build conflicts by @yar00001 in https://github.com/99designs/gqlgen/pull/1701
    • Adding entity resolver tests for errors, entities with different type… by @MiguelCastillo in https://github.com/99designs/gqlgen/pull/1708
    • Resolve multiple federated entities in a single entityResolve call by @MiguelCastillo in https://github.com/99designs/gqlgen/pull/1709
    • Separate golangci-lint from other jobs by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1712
    • Optimize performance for binder, imports and packages (Rebased from sbalabanov/master) by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1711
    • Cleaning up extra return in federation generated code by @MiguelCastillo in https://github.com/99designs/gqlgen/pull/1713
    • Fix #1704: handle @required nested fields as in @key by @carldunham in https://github.com/99designs/gqlgen/pull/1706
    • Fix plugin addition by @erwin-k in https://github.com/99designs/gqlgen/pull/1717
    • add federation tests by @carldunham in https://github.com/99designs/gqlgen/pull/1719
    • Add support for graphql-transport-ws with duplex ping-pong by @zdraganov in https://github.com/99designs/gqlgen/pull/1578
    • Don't overwrite field arguments when none match by @edigaryev in https://github.com/99designs/gqlgen/pull/1725
    • Close Websocket Connection on Context close/cancel by @RobinCPel in https://github.com/99designs/gqlgen/pull/1728
    • fix: automatically register built-in directive goTag by @tprebs in https://github.com/99designs/gqlgen/pull/1737
    • Fix list coercion when using graphql variables by @tprebs in https://github.com/99designs/gqlgen/pull/1740
    • Add CSV and PDF to common initialisms by @s-takehana in https://github.com/99designs/gqlgen/pull/1741
    • Support for multiple @key directives in federation (reworked) by @carldunham in https://github.com/99designs/gqlgen/pull/1723
    • Downgrade to Go 1.16 by @StevenACoffman in https://github.com/99designs/gqlgen/pull/1743
    • Added pointer to a solution for no Go files err by @aircliff in https://github.com/99designs/gqlgen/pull/1747
    • Avoid problems with val being undefined in the federation template. by @csilvers in https://github.com/99designs/gqlgen/pull/1760
    • Migrate playgrounds to GraphiQL by @kirkbyo in https://github.com/99designs/gqlgen/pull/1751
    • Improve performance of MarshalBoolean by @tsh96 in https://github.com/99designs/gqlgen/pull/1757
    • Fix #1762: Reload packages before merging type systems by @ipfans in https://github.com/99designs/gqlgen/pull/1763

    New Contributors

    • @bickyeric made their first contribution in https://github.com/99designs/gqlgen/pull/1340
    • @mathieupost made their first contribution in https://github.com/99designs/gqlgen/pull/1529
    • @simborg made their first contribution in https://github.com/99designs/gqlgen/pull/1526
    • @Code-Hex made their first contribution in https://github.com/99designs/gqlgen/pull/1525
    • @tsh96 made their first contribution in https://github.com/99designs/gqlgen/pull/1581
    • @jjmengze made their first contribution in https://github.com/99designs/gqlgen/pull/1608
    • @FlymeDllVa made their first contribution in https://github.com/99designs/gqlgen/pull/1624
    • @robertmarsal made their first contribution in https://github.com/99designs/gqlgen/pull/1628
    • @ash99d made their first contribution in https://github.com/99designs/gqlgen/pull/1638
    • @minus7 made their first contribution in https://github.com/99designs/gqlgen/pull/1640
    • @cameronbrill made their first contribution in https://github.com/99designs/gqlgen/pull/1648
    • @tkuhlman made their first contribution in https://github.com/99designs/gqlgen/pull/1359
    • @schafle made their first contribution in https://github.com/99designs/gqlgen/pull/1633
    • @j75689 made their first contribution in https://github.com/99designs/gqlgen/pull/1173
    • @vnj-uber made their first contribution in https://github.com/99designs/gqlgen/pull/1549
    • @tprebs made their first contribution in https://github.com/99designs/gqlgen/pull/1650
    • @wendorf made their first contribution in https://github.com/99designs/gqlgen/pull/1491
    • @carldunham made their first contribution in https://github.com/99designs/gqlgen/pull/1604
    • @foreverest made their first contribution in https://github.com/99designs/gqlgen/pull/1595
    • @yar00001 made their first contribution in https://github.com/99designs/gqlgen/pull/1644
    • @CoreyWinkelmann made their first contribution in https://github.com/99designs/gqlgen/pull/1647
    • @kevinmbeaulieu made their first contribution in https://github.com/99designs/gqlgen/pull/1309
    • @JohnMaguire made their first contribution in https://github.com/99designs/gqlgen/pull/1660
    • @duckbrain made their first contribution in https://github.com/99designs/gqlgen/pull/1652
    • @danielvladco made their first contribution in https://github.com/99designs/gqlgen/pull/1404
    • @wejafoo made their first contribution in https://github.com/99designs/gqlgen/pull/1674
    • @hsblhsn made their first contribution in https://github.com/99designs/gqlgen/pull/1693
    • @MiguelCastillo made their first contribution in https://github.com/99designs/gqlgen/pull/1697
    • @jordanabderrachid made their first contribution in https://github.com/99designs/gqlgen/pull/1507
    • @erwin-k made their first contribution in https://github.com/99designs/gqlgen/pull/1717
    • @zdraganov made their first contribution in https://github.com/99designs/gqlgen/pull/1578
    • @edigaryev made their first contribution in https://github.com/99designs/gqlgen/pull/1725
    • @RobinCPel made their first contribution in https://github.com/99designs/gqlgen/pull/1728
    • @s-takehana made their first contribution in https://github.com/99designs/gqlgen/pull/1741
    • @aircliff made their first contribution in https://github.com/99designs/gqlgen/pull/1747
    • @kirkbyo made their first contribution in https://github.com/99designs/gqlgen/pull/1751
    • @ipfans made their first contribution in https://github.com/99designs/gqlgen/pull/1763

    Full Changelog: https://github.com/99designs/gqlgen/compare/v0.14.0...v0.15.0

    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Sep 8, 2021)

    Added

    • Added a changelog :-) Following the same style as Apollo Client because that feels like it gives good thanks to the community contributors. By @MichaelJCompton in #1512
    • Added support for methods returning (v, ok) shaped values to support Prisma Go client. By @steebchen in #1449
    • Added a new API to finish an already validated config
      By @benjaminjkraft in #1387

    Changed

    Fixed

    • Removed a data race by copying when input fields have default values. By @skaji in #1456
    • v0.12.2 broke the handling of pointers to slices by calling the custom Marshal and Unmarshal functions on the entire slice. It now correctly calls the custom Marshal and Unmarshal methods for each element in the slice. By @ananyasaxena in #1363
    • Changes in go1.16 that mean go.mod and go.sum aren't always up to date. Now go mod tidy is run after code generation. By @lwc in #1501
    • Errors in resolving non-nullable arrays were not correctly bubbling up to the next nullable field. By @wilhelmeek in #1480
    • Fixed a potential deadlock in calling error presenters.
      By @vektah in #1399
    • Fixed collectFields not correctly respecting alias fields in fragments.
      By @vmrajas in #1341
    • Return introspection document in stable order.
    • By @nyergler in #1497
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Sep 21, 2020)

    Added

    • IsResolver added to FieldContext - https://github.com/99designs/gqlgen/pull/1316

    Updated

    • BC break: User errors returned from directives & resolvers are now consistently wrapped in gqlerror.Errors internally by the runtime, which has been updated to support go 1.13 unwrapping - #1312
      • Since #1115 was merged, errors from inputs have been wrapped, but didn't support unwrapping, leading to #1291
      • With all errors now wrapped before the error presenter is called, custom error presenters that use type assertions will be broken.
      • errors.As must instead be used to assert/convert error types in custom error presenters.
      • See the updated docs on customising the error presenter and the blog post on go 1.13 errors for more details.
    • Typos & tweaks to docs - #1295, #1324
    Source code(tar.gz)
    Source code(zip)
  • v0.12.2(Aug 18, 2020)

    Fixed

    • Fixed error during gqlgen init that was making starting a new project via the getting started guide impossible
    • Fix for selecting fragments on different types with overlapping fields - https://github.com/99designs/gqlgen/issues/1280 thanks @JatinDevDG

    Updated

    • Avoid computing field path if not needed during field errors - https://github.com/99designs/gqlgen/pull/1288 thanks @alexsn
    Source code(tar.gz)
    Source code(zip)
  • v0.12.1(Aug 14, 2020)

  • v0.12.0(Aug 14, 2020)

    Added

    • Support for the OBJECT directive - https://github.com/99designs/gqlgen/pull/1117 thanks @s-ichikawa
    • "PGP" added to list of common initialisms - https://github.com/99designs/gqlgen/pull/1198 thanks @ddevault
    • Add input path in unmarshaling errors - https://github.com/99designs/gqlgen/pull/1115 thanks @bowd
    • Support for pointers in custom un/marshal functions - https://github.com/99designs/gqlgen/pull/1277

    Updated

    • Websocket dependency version bumped to v1.4.2 to resolve vulnerability - https://github.com/99designs/gqlgen/pull/1207 thanks @k-yomo
    • Updated to go 1.14 in CI - https://github.com/99designs/gqlgen/pull/1264
    • A heap of documentation improvements - https://github.com/99designs/gqlgen/pull/1104, https://github.com/99designs/gqlgen/pull/1119 https://github.com/99designs/gqlgen/pull/1124, https://github.com/99designs/gqlgen/pull/1131, https://github.com/99designs/gqlgen/pull/1147, https://github.com/99designs/gqlgen/pull/1161, https://github.com/99designs/gqlgen/pull/1181, https://github.com/99designs/gqlgen/pull/1202, https://github.com/99designs/gqlgen/pull/1188, https://github.com/99designs/gqlgen/pull/1189, https://github.com/99designs/gqlgen/pull/1218, https://github.com/99designs/gqlgen/pull/1221, https://github.com/99designs/gqlgen/pull/1224, https://github.com/99designs/gqlgen/pull/1276

    Fixed

    • gqlgen now works in paths containing a ~ - https://github.com/99designs/gqlgen/pull/1137 thanks @ddevault
    • Redundant type warning in generated code - https://github.com/99designs/gqlgen/pull/1163 thanks @fwojciec
    • POST transport now correctly has OperationContext - https://github.com/99designs/gqlgen/pull/1154 thanks @gsgalloway
    • Fix panic when tracing subscriptions - https://github.com/99designs/gqlgen/pull/1170 thanks @alexsn
    • [Federation] Do not require a resolver for "empty" extended types - https://github.com/99designs/gqlgen/pull/1121 thanks @csilvers
    • Don't point to named maps & slices - https://github.com/99designs/gqlgen/pull/1242
    • GET transport now correctly sets a content type - https://github.com/99designs/gqlgen/pull/1215 thanks @ddouglas
    • Removed a bunch of unneeded nil checks from codegen - https://github.com/99designs/gqlgen/pull/1243
    • Fixed potential memory leak when processing uploads - https://github.com/99designs/gqlgen/pull/1246 thanks @arkhvoid
    • Fixed leaking file descriptors when subscription clients hangup - https://github.com/99designs/gqlgen/pull/1248 thanks @sotoslammer
    • Fixed incorrect gqlparser import path - https://github.com/99designs/gqlgen/pull/1262 thanks @sateeshpnv
    • Load source based on default config in gqlgen gen - https://github.com/99designs/gqlgen/pull/1134 thanks @seriousben
    • Fixed OBJECT directive to fire when there are no field directives - https://github.com/99designs/gqlgen/pull/1255 thanks @s-ichikawa

    Thanks to everyone who contributed to this massive release!

    Source code(tar.gz)
    Source code(zip)
  • v0.11.3(Mar 13, 2020)

  • v0.11.2(Mar 5, 2020)

    Added

    • Executor is now public, so if you want to build your own handler package, or skip it in tests you can - https://github.com/99designs/gqlgen/pull/1050
    • Uploads now make the content type available to the resolver - https://github.com/99designs/gqlgen/pull/1074
    • Generated resolvers now pass golint again - https://github.com/99designs/gqlgen/pull/1054
    • Can now check if a function is executing within an operation context - https://github.com/99designs/gqlgen/pull/1051

    Updated

    • Now on the latest urfav cli - https://github.com/99designs/gqlgen/pull/1057

    Fixed

    • GenerateCode is now only called once during generation - https://github.com/99designs/gqlgen/pull/1079
    Source code(tar.gz)
    Source code(zip)
  • v0.11.1(Feb 18, 2020)

    Fixed

    • Panic handlers were not being called consistently, and were falling back to defaults - https://github.com/99designs/gqlgen/pull/1043
    • Show a sane error message when specifying a follow-schema layout dir that does not exist - https://github.com/99designs/gqlgen/pull/1038
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Feb 17, 2020)

    As we start to approach 1.0 we are going to be breaking a few interfaces to make sure things are right. There are a number of breaking changes in this release so please read https://gqlgen.com/recipes/migration-0.11/

    Added

    • We now have basic Apollo Federation support. Thanks @marwan-at-work for the implementation and everyone thats been helping to test this. Docs - https://github.com/99designs/gqlgen/pull/851 - https://github.com/99designs/gqlgen/pull/885.
    • Resolver can now be regenerated as schema changes - Docs https://github.com/99designs/gqlgen/pull/993

    Changed

    • The original handler plackage has been replaced by one that has been broken down into pluggable transports and middleware. Docs.
    • Updated gqlparser to v2.0.1 - https://github.com/99designs/gqlgen/pull/1027
      • Paths now have an interface over them to let the caller know what values are possible https://github.com/vektah/gqlparser/pull/117
      • Swap some NotNulls in the introspection types - https://github.com/vektah/gqlparser/pull/120
      • Fix interface & union calculation when extending non existent types - https://github.com/vektah/gqlparser/pull/118
      • non existing types can be extended now - https://github.com/vektah/gqlparser/pull/116
      • generated syntax when using multiple interfaces is now valid - https://github.com/vektah/gqlparser/pull/115

    Fixed

    • Bad code generated with nilable self marshalers - https://github.com/99designs/gqlgen/pull/970
    • Several codegen bugs around interface generation - https://github.com/99designs/gqlgen/pull/1009 https://github.com/99designs/gqlgen/pull/1020
    • Better error messages - https://github.com/99designs/gqlgen/pull/1007
    • Added inlcudeDeprecated for enums in introspection - https://github.com/99designs/gqlgen/pull/1028
    Source code(tar.gz)
    Source code(zip)
  • v0.10.2(Nov 28, 2019)

    Added

    • Better errors when parsing invalid go code - https://github.com/99designs/gqlgen/pull/883
    • Better support for int64 - https://github.com/99designs/gqlgen/pull/902
    • Modelgen can now be hooked to provide custom tags - https://github.com/99designs/gqlgen/pull/897

    Fixed

    • gqlgen init uses --schema option correctly now - https://github.com/99designs/gqlgen/pull/889
    • directive args are now escaped correctly - https://github.com/99designs/gqlgen/pull/907
    • scalar slices containing nils are now supported correctly - https://github.com/vektah/gqlparser/pull/104
    • enum validation in variables now fires when it should - https://github.com/99designs/gqlgen/pull/894
    • a bug with non deterministic code order - https://github.com/99designs/gqlgen/pull/900
    • nils returned by interface resolvers will no longer panic - https://github.com/99designs/gqlgen/pull/929

    Performance

    • There is a new performance optimization in go modules mode that should speed up generate time by ~20% - https://github.com/99designs/gqlgen/pull/941
    • Users can now opt out of post-validation of generate go code to further speed up builds - https://github.com/99designs/gqlgen/pull/942
    • Model generation can be completly disabled if you are not using it, speeding up builds - https://github.com/99designs/gqlgen/pull/940
    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Sep 25, 2019)

  • v0.10.0(Sep 24, 2019)

    Changed

    • The test client is now much easier to extend, eg to add custom auth - https://github.com/99designs/gqlgen/pull/861
    • Directives are now supported on subscription fields. If you already have directives on the fields of Subscription this PR may cause runtime breaks, be sure to test your code. - https://github.com/99designs/gqlgen/pull/871
    • the WebsocketInitFunc now returns context.Context in addition to error, this allows ws authentication to be passed via context to resolvers the same way http header auth is - https://github.com/99designs/gqlgen/pull/870

    Added

    • Added config option to omit_slice_element_pointers which if set to true will generate []Thing instead of []*Thing - https://github.com/99designs/gqlgen/pull/874
    • map[string]interface and interface{} can now be used in more places - https://github.com/99designs/gqlgen/pull/854
    • Short package names (eg models.User) will now be looked up on the autobind path - https://github.com/99designs/gqlgen/pull/872

    Fixed

    • Better error handling for nil directives - https://github.com/99designs/gqlgen/pull/839
    • Better error handling for returning nil from directives - https://github.com/99designs/gqlgen/pull/838 && https://github.com/99designs/gqlgen/pull/819
    • The share button in the graphql playground is back - https://github.com/99designs/gqlgen/pull/862
    Source code(tar.gz)
    Source code(zip)
  • v0.9.3(Aug 16, 2019)

  • v0.9.2(Aug 8, 2019)

    Added

    • Lots of doc improvements
    • More linters - https://github.com/99designs/gqlgen/pull/805

    Fixed

    • gqlgen init should now work again - https://github.com/99designs/gqlgen/pull/781 https://github.com/99designs/gqlgen/pull/821
    • A keepalive is now sent on init - https://github.com/99designs/gqlgen/pull/820
    • windows infinite loop when unable to find a mod file - https://github.com/99designs/gqlgen/pull/822
    • Pointer checks for values returned by directives - https://github.com/99designs/gqlgen/pull/768
    • Missing comments on enums are now passed through to generated models - https://github.com/99designs/gqlgen/pull/780

    A big Thank You to everyone whos put in the time to make this release possible - @nii236 @pmachan @bugzpodder @flrossetto @andrey1s @Schparky @muesli @oshalygin @dissipative @y15e @zdebra @qhenkart @sunfmin @vvakame @lwc and many more.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Jun 27, 2019)

    Changed

    • There is a subtle break in argument directives, they used to receive the argument value as obj, but not receive the whole argument bag. The argument value should be fetched by calling next, so if you were relying on this behavior the implementation was incorrect and inconsistent with all other directive implementations.

    Added

    • schema file paths now support ** globs - https://github.com/99designs/gqlgen/issues/631
    • new WebsocketInitFunc hook on websocket connection to allow blocking websockets - https://github.com/99designs/gqlgen/pull/750
    • Automatic Persisted Queries (APQ) support - https://github.com/99designs/gqlgen/pull/734
    • execution (query) directive support for FIELD, QUERY, MUTATION and SUBSCRIPTION - https://github.com/99designs/gqlgen/pull/744 and https://github.com/99designs/gqlgen/pull/756
    • directives that allow config in schema - https://github.com/99designs/gqlgen/pull/732
    • models can now be automatically bound within a path - https://github.com/99designs/gqlgen/pull/761

    Fixed

    • aliased types in external packages are now resolved correctly - https://github.com/99designs/gqlgen/pull/722
    • naming issues when setting resolver name in config - https://github.com/99designs/gqlgen/pull/728
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(May 15, 2019)

    :warning: :warning: This release contains changes that require extra care :warning: :warning:

    Complexity changes

    A bug was preventing complexity funcs from being called, if you are using complexity functions when updating to 0.9 they may start working, and some requests may get blocked.

    If you dont have a great testsuite to lean on, we suggest turning off complexity and adding request middleware to determine your new high water mark

    handler.RequestMiddleware(func(ctx context.Context, next func(ctx context.Context) []byte) []byte {
    	defer func() {
    		fmt.Println("complexity was", graphql.GetRequestContext(ctx).OperationComplexity)
    	}()
    	return next(ctx)
    }),
    

    Enforcing Content-Type

    gqlgen now only accepts POST requests with multipart/form-data (new!) or application/json, this affect most clients but make sure you do some end to end testing with your clients.

    dep users

    You will probably get undefined: packages.NeedName when updating, this is because we have no way to force transitive dependencies to update for dep. You will need to run:

    dep ensure -update golang.org/x/tools
    

    You should probably consider updating to go modules, they are actually pretty great (just make sure you're running at least gqlgen 0.8 first).

    Changelog

    Changed

    • Content type is now enforced for POST requests - https://github.com/99designs/gqlgen/pull/689
    • Fix complexity funcs had incorrect cases, causing them to NOT RUN - https://github.com/99designs/gqlgen/pull/668
    • IsZero is no longer automatically called on anything except time.Time - https://github.com/99designs/gqlgen/pull/702
    • Pointers are now automatically added for struct fields that are structs to prevent loops - https://github.com/99designs/gqlgen/pull/701
    • Pointers are now automatically added for slices of structs - https://github.com/99designs/gqlgen/pull/710

    Fixed

    • Introspection now correctly filters deprecated - https://github.com/99designs/gqlgen/pull/687
    • More inconsistent cases - https://github.com/99designs/gqlgen/pull/700
    • Removed a data race - https://github.com/99designs/gqlgen/pull/705

    Added

    • File uploads are now supported - https://github.com/99designs/gqlgen/pull/655
    • Hard coded templates can now be used in plugins - https://github.com/99designs/gqlgen/pull/673
    • New Any type can be used the same way as map - https://github.com/99designs/gqlgen/pull/686
    • Mapping to objects onto scalars is now allowed - https://github.com/99designs/gqlgen/pull/706

    Performance

    • runtime: Collect fields is now faster - https://github.com/99designs/gqlgen/pull/680
    • generate: fixed a large performance regression with go modules and cgo - https://github.com/99designs/gqlgen/pull/707
    Source code(tar.gz)
    Source code(zip)
Owner
99designs
Global creative platform for designers and clients
99designs
The easiest way to make API documents for GraphQL

Document Generator for GraphQL gqldoc is now alpha gqldoc is command line tool to generate documents from GraphQL schema or your GraphQL endpoint. the

Kei Kamikawa 155 Jun 19, 2022
A port of the parser from graphql-js into golang

gqlparser This is a parser for graphql, written to mirror the graphql-js reference implementation as closely while remaining idiomatic and easy to use

Adam Scarr 369 Jun 17, 2022
gqlanalysis makes easy to develop static analysis tools for GraphQL in Go.

gqlanalysis gqlanalysis defines the interface between a modular static analysis for GraphQL in Go. gqlanalysis is inspired by go/analysis. gqlanalysis

null 34 Apr 11, 2022
libraries for various programming languages that make it easy to generate per-process trace files that can be loaded into chrome://tracing

chrometracing: chrome://tracing trace_event files The chrometracing directory contains libraries for various programming languages that make it easy t

Google 21 Apr 20, 2022
Go package to generate and manage color palettes & schemes 🎨

Go package to generate and manage color palettes & schemes

Christian Muehlhaeuser 476 Jun 10, 2022
Generate Go clients from anchor IDLs for Solana blockchain programs

usage anchor-go --src=/path/to/idl.json Generated Code will be generated and saved to ./generated/. TODO instructions accounts types events errors han

Slavomir 67 Jun 20, 2022
Utilities to generate (reference) documentation for the docker CLI

About This is a library containing utilities to generate (reference) documentation for the docker CLI on docs.docker.com. Disclaimer This library is i

Docker 13 Jun 16, 2022
generate random data like name, email, uuid, address, images and etc.

gg-rand generate random data like name, email, uuid, address, images and etc. build and install: make run: gg-rand $ gg-rand SillyName : Knavesa

bingoohuang 2 Mar 13, 2022
Generate simple CHANGELOG

changelog Generate simple CHANGELOG Install Download the one that suits your environment and place it in a location that is in your PATH. https://gith

tricot 2 Oct 10, 2021
Generate some random data

fake-data-generator-api generate some random data installing and using

Miguel 2 Nov 19, 2021
A utility to generate SPDX-compliant Bill of Materials manifests

Kubernetes Template Project The Kubernetes Template Project is a template for starting new projects in the GitHub organizations owned by Kubernetes. A

Kubernetes SIGs 90 Jun 21, 2022
Generate signal for a thing for golang

go_kafka_signal generate signal for a thing go build producer.go ./producer -f ~

null 0 Dec 24, 2021
Protoc-gen-fieldmask - Generate FieldMask utility functions for protobuf

protoc-gen-fieldmask Generate FieldMask utility functions for protobuf Generated

yeqown 25 May 28, 2022
An application written in Go to generate fractals like the Mandelbrot set and the Julia set.

Fractals An application written in Go to generate fractals like the Mandelbrot set and the Julia set. Screenshots Mandelbrot set Julia set Prerequisit

null 0 May 9, 2022
Fully featured, spec-compliant HTML5 server-sent events library

go-sse Lightweight, fully spec-compliant HTML5 server-sent events library. Table of contents go-sse Table of contents Installation and usage Implement

Teodor Maxim 158 Jun 15, 2022
A concurrent rate limiter library for Golang based on Sliding-Window rate limiter algorithm.

ratelimiter A generic concurrent rate limiter library for Golang based on Sliding-window rate limitng algorithm. The implementation of rate-limiter al

Narasimha Prasanna HN 214 Jun 15, 2022
The main goal of this code is to create a basic dnstap printing tool based on the golang-dnstap library.

dnstap-parse The main goal of this code is to create a basic dnstap printing tool based on the golang-dnstap library. The output is supposed to mimic

Patrik Lundin 1 Nov 14, 2021
squirrelbyte is a "proof of concept" document / search server backed by sqlite.

??️ squirrelbyte is a "proof of concept" document / search server backed by sqlite.

null 135 May 20, 2022
Hotswap provides a solution for reloading your go code without restarting your server, interrupting or blocking any ongoing procedure.

Hotswap provides a solution for reloading your go code without restarting your server, interrupting or blocking any ongoing procedure. Hotswap is built upon the plugin mechanism.

Edwin 86 Jun 24, 2022