[HN Gopher] Show HN: Guts - convert Golang types to TypeScript
       ___________________________________________________________________
        
       Show HN: Guts - convert Golang types to TypeScript
        
       Author : emyrk
       Score  : 64 points
       Date   : 2025-11-18 17:55 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | cube2222 wrote:
       | We've been using guts basically since it was published on GitHub
       | (almost a year now), and it's so nice! We have a "custom POST-
       | based JSON-rpc"-style api, so we have request and response bodies
       | defined as Go types, and are generating the whole TS schema from
       | it.
       | 
       | It basically lets you generate typescript types from your Go
       | types. However, it's very customizable - you can post-process the
       | AST. In our case, we have a custom generic Go type that indicates
       | an optional (not nullable) field, and we can easily translate it
       | to optional TS types (e.g. for sparse updates).
       | 
       | All in all, great tool/library, thanks for building it!
       | 
       | Disclaimer: I know a developer at Coder (not the author), who
       | also recommended me guts back then, but am unaffiliated other
       | than that.
        
         | emyrk wrote:
         | Thrilled to see you got value out of it!
        
       | flashgordon wrote:
       | I really like the idea of it. My dream has always been to work
       | with "types" first and foremost across any and all languages (yep
       | it is a dream). And little tools like these are really nice to
       | see push that boundary.
       | 
       | One feedback - if you are truly comparing with "other" tools -
       | you should be looking at grpc and protoc plugins. I have used to
       | great effect for things like:
       | 
       | 1. Generating wasm bindings for grpc services
       | 
       | 2. Generating "data access layer" types so you can choose how a
       | api proto is transformed to a data domain type and vice versa
       | 
       | 3. MCP bindings for APIs
       | 
       | 4. GraphQL/BFF bindings with multiple services
       | 
       | 5. All of the above "across" langauges.
       | 
       | The tooling is fantastic and extensible - if you are ok to start
       | with a proto view of your world - it sounds wierd and like an N+1
       | problem but once you are used to it it is surprisingly fun (ok we
       | may have different ideas of fun)
        
         | chrisweekly wrote:
         | Type-first is cool. But I think I'll always aim to avoid gRPC,
         | at least in part because grpc-web was so completely broken. I
         | also have an instinctive aversion to binary formats. YMMV, just
         | my PoV.
        
           | jsunderland323 wrote:
           | I've had a lot of success with grpc web. Had to patch a
           | couple of things along the way. My biggest misgiving is
           | thinking having bigints would be a good idea (it is not a
           | good idea). Aside from that though, I've been happy with it.
           | What felt broken to you?
        
             | flashgordon wrote:
             | One thing I still struggle to this day is the float/long
             | conversion from json <-> proto. It somehow works and I
             | still untangle the feeling of magic.
        
           | flashgordon wrote:
           | +1 Couple of things I really hate about proto - No
           | generics/templates. No composition of services or mixins (you
           | do have composition in messages but that feels very limited).
           | Also the clunkiness around having to declare more things (try
           | a repeated map field or a map of repeated fields).
           | 
           | My comment about protos was just the spec (and was seperating
           | the binary formats as a different concern). But your concerns
           | are pretty valid.
        
         | emyrk wrote:
         | I totally agree a proto first approach to your types can pay
         | back in dividends if you need to serialize over different
         | wires.
         | 
         | This project admittedly was developed to solve a specific need
         | in an existing codebase with a lot existing types.
         | 
         | The codebase is also mostly maintain by the backend Golang
         | engineers. Letting them use their native type system increases
         | adoption and buy in.
        
           | flashgordon wrote:
           | Totally - The other really nice thing about Golang "type-
           | system" ecosystem is their native ast in the stdlib. You can
           | do so many amazing things from there. Infact if you pledge
           | your life to Go (which I think I have atleast for now)
           | starting from Go and generating everything outwards is not
           | necessarily a bad strategy.
        
         | goldenCeasar wrote:
         | On this "types first across languages", I've been hacking on
         | something in that vein called Kumi (typed calculation schemas
         | compiled to Ruby/JS). Tiny demo here https://kumi-play-
         | web.fly.dev
        
           | flashgordon wrote:
           | Hot damn. Id love to hear the origin story of this.
        
         | c-hendricks wrote:
         | GraphQL has been my holy grail for this. Easy to grok, easy to
         | build types for various languages and keep everything in sync.
        
       | zikani_03 wrote:
       | Nice, this looks interesting.
       | 
       | Somewhat related is a project we worked on within Golang
       | community in Malawi: https://github.com/golang-malawi/geneveev
       | 
       | It supports converting types to Zod schemas and Dart classes.
       | Never got around to TypeScript and would be cool to see if we
       | could add support for guts
        
         | nawgz wrote:
         | If you output Zod you've basically solved Typescript, a Zod
         | schema more or less is a Typescript type and can be explicitly
         | made so with the `infer` capability
        
       | PhilippGille wrote:
       | There's also https://github.com/tkrajina/typescriptify-golang-
       | structs
       | 
       | Which is used for example in the Go GUI framwork Wails:
       | https://github.com/wailsapp/wails/tree/v2.11.0/v2/internal/b...
        
         | imiric wrote:
         | Another one: https://github.com/gzuidhof/tygo
         | 
         | (Shoutout to Guido!)
        
       | sshb wrote:
       | In the same vein: https://typespec.io/
        
       ___________________________________________________________________
       (page generated 2025-11-18 23:00 UTC)