1.2.0 - 2026-11-03
Added
--schema-module/-sonmix graphql_gen_markdown, andschema_module:onGraphqlMarkdown.generate/1andrender/1, introspect an Absinthe schema in-process instead of requiring an introspection JSON file. Absinthe is an optional dependency (#15)- Example operations recurse into object, interface and union return types and select their scalar and enum fields, so they are valid, copy-pasteable GraphQL.
--depth/-don the mix task anddepth:ongenerate/1andrender/1control how deep (default 2). Types already selected further up the path are skipped, which keeps recursive types such asfriends: [Character]finite (#16) --checkonmix graphql_gen_markdown, andGraphqlMarkdown.check/1, compare the rendered markdown with the files in the output directory without writing, and fail listing the changed or missing files. Use it in CI to keep committed docs in sync with the schema (#19)- Multi-page output now includes an
index.mdwith the title and a table of contents linking to every page and type, mirroring the single-page TOC.-tapplies to it (#20) mix graphql_gen_markdown -o -writes the single page to stdout so it can be piped. It is rejected with-mand--check(#20)--link-ext html|md|none(link_ext:in the library) sets the extension of multi-page links, so the output works on GitHub, MkDocs, Docusaurus or Hugo and not only ExDoc.htmlstays the default (#18)--front-matter(front_matter: true) starts every page with a YAML block holding itstitle(#18)--backlinks(backlinks: true) ends every object, input, enum, interface and union withReturned by(operations whose return type is this type) andUsed by(types and operations referencing it in a field or argument) lists (#21)
Changed
- Field and argument tables have separate
field(orargument),typeanddescriptioncolumns instead of`name` ( [Type](#type) )in one cell (#21) - Union and interface entries end with a blank line like the other entries do
generate/1andrender/1return{:error, :missing_schema}instead of crashing when neither:schemanor:schema_moduleis given- Example operations no longer contain empty selection sets (
owner {\n}or... on Human {\n}), which were invalid GraphQL. A nested field with nothing selectable within the depth is left out, and an operation with nothing selectable asks for__typename. Interfaces now also select__typename, like unions already did GraphqlMarkdown.OperationDetailsHelpers.generate_operation_details/4returns the selection set as a tree underselections;return_typeonly holds the unwrappednameandkind- Minimum Elixir version is now 1.16
1.1.0 - 2026-11-03
Added
GraphqlMarkdown.render/1renders the markdown in memory and returns it keyed by filename, without writing to disk- Deprecated fields and enum values are struck through and their reason is appended to the description; a deprecated operation gets a
Deprecatedparagraph (#17) - Objects list the interfaces they implement (
Implements: [Character](#character)) and interfaces list their implementers underImplemented by:(#17) - Arguments of object and interface fields are rendered inline in SDL syntax, for example
friends(first: Int = 10, after: String)(#17)
Changed
- Pages are rendered fully in memory and written once.
generate/1can run concurrently in the same VM, and a failure no longer leaves a partially written file behind - Minimum Elixir version is now 1.15 (it was declared as 1.14, which
mix.exsalready relied on being newer than). CI tests 1.17 to 1.20 (#14) - Single-page and multi-page output share one renderer (
GraphqlMarkdown.Page). Multi-page files are now returned in the same order as the single-page sections, withsubscriptions.mdaftermutations.md
Removed
GraphqlMarkdown.Renderer. It was an internal GenServer used to stream lines to disk and was never part of the documented API
Fixed
- Single-page generation crashed on schemas with a subscription root type (#3)
- Subscriptions were missing from single-page output and the subscription root type was listed under Objects (#4)
- Example operations were invalid GraphQL for scalar, enum,
Type!,[Type!]and[Type!]!return types; scalars and enums no longer get an empty selection set (#5) mix graphql_gen_markdownexited 0 silently on a missing, invalid or non-introspection schema file, and crashed when-fwas omitted. It now fails with a readable message and prints the generated files on success (#6)- Titles and table-of-contents entries were lowercased after the first letter (
My API DocsbecameMy api docs,userSsoDetailsbecameUserssodetails) (#7) - Descriptions containing newlines or
|broke markdown tables; cells are now escaped (#8) - Object, interface and input descriptions were never rendered (#9)
- Operations and types without fields rendered a header-only table, and the default-value sentence was glued to the description without a space (#10)
- In single-page output the "Possible types" of a union linked to
objects.html#…, which does not exist in a single page; they now link to the in-page anchor (#32) - In multi-page output, links to interface-typed fields and return types pointed at
scalars.htmlinstead ofinterfaces.html(#33)
1.0.0 - 2026-10-29
Changed
- First stable release. The mix task, generators and configuration are unchanged from 0.5.3
- Repository moved to https://github.com/epinault/graphql_markdown; package links updated
- CI now tests Elixir 1.17 - 1.20 on OTP 27 - 29; Elixir 1.15 - 1.16 and OTP 25 - 26 are no longer exercised in CI
- Add a
mix precommitalias (format, unused-lock check, compile with warnings as errors, test with coverage, credo)
0.5.3 - 2026-04-15
Fixed
- Fix crash when writing non-ASCII characters (e.g. em dash) to file on systems with non-UTF-8 locale
0.5.2 - 2025-12-30
Fixed
- Add support for ENUM return types in GraphQL operations
0.5.1 - 2025-03-11
Fixed
- Add support for NON_NULL GraphQL types
0.5.0 - 2024-10-01
Changed
- Remove support for Elixir 1.13. Minimum is now 1.14
0.4.3 - 2024-09-27
Fixed
- Fixes where NonNull and ListTypes were defaulting to scalar types for anchor links
0.4.2 - 2024-09-26
Fixed
- Links to union return types handled correctly
0.4.1 - 2024-09-25
Fixed
- Links to types from queries/mutations sets anchor properly
0.4.0 - 2024-08-26
Added
- Added support for Subscriptions
0.3.1 - 2024-07-01
Fixed
- Fix problems with generating example queries and mutations when the return types are unions, interfaces or lists: #49
0.3.0 - 2024-06-25 [RETIRED]
Added
- Support generating example queries from the schema
0.2.1 - 2024-03-26
Changed
- Improve documentation
- Fix generating multiple times
0.2.0 - 2024-01-12
Changed
- Deps Update release
0.1.5 - 2023-08-16
Changed
- Added more documentation
- Fix typespec
0.1.4 - 2022-09-27
Changed
- Update dependencies
0.1.3 - 2021-09-23
Fixed
- Add missing type and description for mutations and queries
0.1.2 - 2021-09-17
Fixed
- Support for Unions properly
- Fix breakage when description is nil
0.1.1 - 2021-09-17
Fixed
- Fix wrong link in multi page for scalar/objects
0.1 - 2021-09-17
Initial release