gitwtfhub

wtf is go-exports?

eternal-flame-ad/go-exports — explained in plain English

Analysis updated 2026-07-19 · repo last pushed 2019-02-02

1GoAudience · developerComplexity · 2/5DormantSetup · easy

TL;DR

A Go tool that snapshots your code's public API into a JSON file and compares future versions against it, so you can catch breaking changes before they break your plugins.

Mindmap

mindmap
  root((repo))
    What it does
      Scans Go code
      Exports JSON spec
      Compares versions
      Reports differences
    Tech stack
      Go
      JSON
    Use cases
      Catch breaking changes
      Audit plugin APIs
      CI testing pipeline
    Audience
      Go developers
      Plugin maintainers
      Extensible app builders

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Snapshot your Go package's public API at a major release and store the JSON file as a baseline.

REASON 2

Run the comparison tool in your test pipeline to catch breaking changes before shipping a new release.

REASON 3

Audit which exported symbols changed between versions of a shared package used by plugins.

What's in the stack?

GoJSON

How it stacks up

eternal-flame-ad/go-exportsaegrail/aegrail-engineaeneasr/form
Stars111
LanguageGoGoGo
Last pushed2019-02-022019-03-08
MaintenanceDormantDormant
Setup difficultyeasyhardeasy
Complexity2/55/52/5
Audiencedeveloperops devopsdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · easy Time to first run · 5min

Requires a Go codebase with packages you want to snapshot, the tool itself is a standard Go utility with no external dependencies.

Wtf does this do

go-exports is a tool for Go programmers who use plugins, dynamically loaded code modules. It helps solve a specific headache: Go has strict rules about how packages shared between a main application and its plugins must stay in sync. If the exported symbols (the public-facing functions, types, and variables) change between versions, plugins break. This utility snapshots what your code currently exposes and lets you compare future versions against that snapshot to catch breaking changes early. At a high level, the tool does two things. First, it scans a Go codebase and generates a JSON file listing every exported symbol, including types, functions, struct members, and interface methods. This acts as a baseline record of your public API at a given point in time, say a major release. Second, you can run it with a comparison flag, pointing it at that saved JSON file. It checks the current code against the snapshot and reports any differences, so you immediately see what changed. The primary audience is developers maintaining Go applications that load plugins at runtime. For example, if you're building an extensible server application where third parties write plugins, you need to guarantee that the shared package interface stays stable across releases. Rather than manually auditing every change, you'd snapshot your exports at each major release and run the comparison in your testing pipeline to flag any modifications before they ship. The project is narrowly scoped and practical. It doesn't attempt to be a general-purpose API documentation tool or linter, it just captures and compares exported symbols in a straightforward JSON format. The README is minimal, keeping to the essentials: generate a spec, then compare against it.

Yoink these prompts

Prompt 1
I maintain a Go application that loads plugins at runtime. Help me set up a CI step that runs go-exports to compare my current code against a saved JSON snapshot and fails the build if breaking changes are detected.
Prompt 2
Write a script that runs go-exports to generate a JSON spec of my Go package's exported symbols, then saves the file with a version tag so I can track API changes across releases.
Prompt 3
Explain how Go plugin compatibility works and show me how to use go-exports to prevent breaking changes in the shared packages between my main app and its plugins.

Frequently asked questions

wtf is go-exports?

A Go tool that snapshots your code's public API into a JSON file and compares future versions against it, so you can catch breaking changes before they break your plugins.

What language is go-exports written in?

Mainly Go. The stack also includes Go, JSON.

Is go-exports actively maintained?

Dormant — no commits in 2+ years (last push 2019-02-02).

How hard is go-exports to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is go-exports for?

Mainly developer.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.