{"id":14222472,"url":"https://github.com/emicklei/structexplorer","last_synced_at":"2026-03-07T18:31:38.765Z","repository":{"id":244621005,"uuid":"815679961","full_name":"emicklei/structexplorer","owner":"emicklei","description":"Go struct inspection HTTP handler","archived":false,"fork":false,"pushed_at":"2025-12-10T12:02:39.000Z","size":3126,"stargazers_count":67,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-19T21:41:49.544Z","etag":null,"topics":["debug","golang-package","inspect"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emicklei.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-15T20:15:18.000Z","updated_at":"2025-12-10T12:02:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"413da8ad-7436-41c6-a265-81e5fd5b227f","html_url":"https://github.com/emicklei/structexplorer","commit_stats":{"total_commits":66,"total_committers":2,"mean_commits":33.0,"dds":"0.015151515151515138","last_synced_commit":"e16999a6d1594308b509ed8f1803a4d3fb66b659"},"previous_names":["emicklei/structexplorer"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/emicklei/structexplorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emicklei%2Fstructexplorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emicklei%2Fstructexplorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emicklei%2Fstructexplorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emicklei%2Fstructexplorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emicklei","download_url":"https://codeload.github.com/emicklei/structexplorer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emicklei%2Fstructexplorer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30226246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T18:12:09.766Z","status":"ssl_error","status_checked_at":"2026-03-07T18:11:58.786Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debug","golang-package","inspect"],"created_at":"2024-08-19T19:01:00.706Z","updated_at":"2026-03-07T18:31:38.747Z","avatar_url":"https://github.com/emicklei.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"## structexplorer\n\n[![Go](https://github.com/emicklei/structexplorer/actions/workflows/go.yml/badge.svg)](https://github.com/emicklei/structexplorer/actions/workflows/go.yml)\n[![GoDoc](https://pkg.go.dev/badge/github.com/emicklei/structexplorer)](https://pkg.go.dev/github.com/emicklei/structexplorer)\n[![codecov](https://codecov.io/gh/emicklei/structexplorer/branch/main/graph/badge.svg)](https://codecov.io/gh/emicklei/structexplorer)\n\nA Go Struct Explorer Service (http.Handler) that offers remote inspection of any Go struct and its references.\n\n### example of exploring a [yaegi](https://github.com/traefik/yaegi) program\n\n![program](./doc/explore_yaegi.png \"Yaegi explore\")\n\n## install\n\n    go get github.com/emicklei/structexplorer\n\n## usage\n\n    go structexplorer.NewService(\"some structure\", yourStruct).Start()\n\nthen a HTTP service will be started\n\n    INFO starting go struct explorer at http://localhost:5656\n\nor as root HTTP Handler:\n\n    s := structexplorer.NewService(\"some structure\", yourStruct, \"other\" , otherStruct)\n    http.ListenAndServe(\":5656\", s)\n\nor as a HTTP Handler function:\n\n    http.HandleFunc(\"/explore\", structexplorer.NewService(\"game\", game).ServeHTTP)\n\n## syntax\n\n- if a value is a pointer to a standard type then the display value has a \"*\" prefix\n- if a value is a reflect.Value then the display value has a \"~\" prefix\n\n## buttons\n\n- ⇊ : explore one or more selected values from the list and put them on the row below\n- ⇉ : explore one or more selected values from the list and put them on the right\n- ⇈ : explore one or more selected values from the list and put them on the row up\n- z : show or hide fields which currently have zero value (\"\",0,nil,false)\n- x : remove the struct from the page\n- c : remove all structs from the page except the onces you started with\n\nNote: if the list contains just one structural value then selecting it can be skipped for ⇊, ⇈ and ⇉.\n\n## explore while debugging\n\nCurrently, the standard Go debugger `delve` stops all goroutines while in a debugging session.\nThis means that if you have started the `structexplorer` service in your program, it will not respond to any HTTP requests during that session.\n\nThe explorer can also be asked to dump an HTML page with the current state of values to a file.\n\n    s := structexplorer.NewService()\n    s.Explore(\"yours\", yourStruct)\n    s.ExplorePath(\"yours.field\") // dotted path of fields starting with an explore label\n    s.Dump()\n\nAnother method is to use a special test case which starts an explorer at the end of a test and then run it with a longer acceptable timeout.\n\n## examples\n\nSee folder `examples` for simple programs demonstrating each feature.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femicklei%2Fstructexplorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femicklei%2Fstructexplorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femicklei%2Fstructexplorer/lists"}