[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81723":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":14,"starSnapshotCount":14,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},81723,"coco","leehainuo\u002Fcoco","leehainuo","Coco is an elegant and beautiful OpenAPI UI library for Go","",null,"Go",129,8,0,10,95,57.36,"MIT License",false,"main",true,[23,24,25,26,27,28,29,30,31],"api-docs","api-documentation","go","golang","openapi","swagger","swagger-ui","tailwindcss","vue3","2026-06-12 04:01:35","# Coco\n\n\u003Cp align=\"center\">\n\u003Cimg align=\"center\" width=\"160px\" src=\"docs\u002Fimages\u002Fcoco.png\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">An elegant, lightweight, and beautiful OpenAPI documentation renderer built for Go developers\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n\n[![Go Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-%3E%3D%201.21-blue)](https:\u002F\u002Fgo.dev\u002F)\n[![Go Reference](https:\u002F\u002Fpkg.go.dev\u002Fbadge\u002Fgithub.com\u002Fleehainuo\u002Fcoco.svg)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fleehainuo\u002Fcoco)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n\n\u003C\u002Fdiv>\n\n## Preview\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002Fcoco-light.png\" alt=\"Coco Light Theme\" width=\"45%\">\n  \u003Cimg src=\"docs\u002Fimages\u002Fcoco-dark.png\" alt=\"Coco Dark Theme\" width=\"45%\">\n\u003C\u002Fp>\n\n## What is Coco?\n\nEnglish | [简体中文](docs\u002Fzh\u002FREADME.md)\n\nCoco is an elegant, lightweight, and beautiful Go library that renders OpenAPI\u002FSwagger specifications into stunning interactive API documentation. Zero dependencies, single-file bundle, perfectly embedded into Go binaries. Supports OpenAPI 2.0 and 3.0+ specifications with seamless integration into any Go web framework.\n\n#### Advantages of Coco:\n\n* **Elegant DX** - Minimal API design, integrate in just 30 seconds\n* **Beautiful UI** - Built with Vue 3 + TailwindCSS, supports automatic light\u002Fdark theme switching\n* **Framework Agnostic** - Works with all Go web frameworks (Gin, Echo, Fiber, Chi, net\u002Fhttp, etc.)\n* **Feature Complete** - Built-in API testing, spec export, request history, internationalization, and more\n\n## Core Features\n\n* **Internationalization** - Built-in English and Chinese support, extensible for more languages\n* **Zero Dependencies** - Pure Go implementation, frontend assets fully embedded, no external tools required\n* **Framework Agnostic** - Compatible with all Go web frameworks (Gin, Echo, Fiber, Chi, net\u002Fhttp, etc.)\n* **Flexible Configuration** - Rich configuration options to meet various customization needs\n* **API Testing** - Built-in interactive debug panel for instant API testing\n* **Spec Export** - One-click export of OpenAPI\u002FSwagger specification files\n* **Request History** - Automatically saves debug history for easy review and reuse\n* **High Performance** - Embedded static assets, single-file bundle, no additional HTTP requests\n\n## Installation\n\n```bash\ngo get github.com\u002Fleehainuo\u002Fcoco\n```\n\n## Quick Start\n\n### Using Swag (Recommended)\n\n**Step 1: Install Swag**\n\n```bash\ngo install github.com\u002Fswaggo\u002Fswag\u002Fcmd\u002Fswag@latest\n```\n\n**Step 2: Add annotations to your code**\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\n\u002F\u002F @title           My API\n\u002F\u002F @version         1.0\n\u002F\u002F @description     This is a sample API\n\u002F\u002F @host            localhost:8000\n\u002F\u002F @BasePath        \u002Fapi\n\nfunc main() {\n    mux := http.NewServeMux()\n    \n    \u002F\u002F Your API routes\n    mux.HandleFunc(\"\u002Fapi\u002Fhello\", handleHello)\n    \n    \u002F\u002F Mount Coco docs (Swag generates docs\u002Fswagger.json)\n    mux.Handle(\"\u002Fdocs\u002F\", coco.New(\".\u002Fdocs\u002Fswagger.json\"))\n    \n    http.ListenAndServe(\":8000\", mux)\n}\n\n\u002F\u002F @Summary      Hello endpoint\n\u002F\u002F @Description  Returns a greeting message\n\u002F\u002F @Tags         example\n\u002F\u002F @Accept       json\n\u002F\u002F @Produce      json\n\u002F\u002F @Success      200  {string}  string  \"Hello, World!\"\n\u002F\u002F @Router       \u002Fhello [get]\nfunc handleHello(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte(\"Hello, World!\"))\n}\n```\n\n**Step 3: Generate docs and run**\n\n```bash\n# Generate OpenAPI documentation\nswag init\n\n# Run your application\ngo run main.go\n```\n\n**Step 4: View your docs**\n\nOpen your browser and visit http:\u002F\u002Flocalhost:8000\u002Fdocs\u002F to see your beautiful API documentation!\n\n---\n\n### Other Usage Methods\n\n**Load from local file**\n```go\nhandler := coco.New(\".\u002Fopenapi.json\")\n```\n\n**Load from URL**\n```go\nhandler := coco.New(\"\", coco.SpecURL(\"https:\u002F\u002Fexample.com\u002Fopenapi.json\"))\n```\n\n**Load from byte array**\n```go\nhandler := coco.New(\"\", coco.Spec(specBytes))\n```\n\n**For more configuration and integration options, see [Full Documentation](.\u002Fdocs\u002Fen\u002F)**\n\n## Integration Examples\n\n### net\u002Fhttp\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    mux := http.NewServeMux()\n    \n    \u002F\u002F Your API routes\n    mux.HandleFunc(\"\u002Fapi\u002Fusers\", handleUsers)\n    \n    \u002F\u002F Mount documentation\n    mux.Handle(\"\u002Fdocs\u002F\", coco.New(\".\u002Fopenapi.json\",\n        coco.Title(\"User API\"),\n    ))\n    \n    http.ListenAndServe(\":8000\", mux)\n}\n```\n\n### Gin\n\n```go\npackage main\n\nimport (\n    \"github.com\u002Fgin-gonic\u002Fgin\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    r := gin.Default()\n    \n    \u002F\u002F Your API routes\n    r.GET(\"\u002Fapi\u002Fusers\", getUsers)\n    \n    \u002F\u002F Mount documentation\n    r.Any(\"\u002Fdocs\u002F*any\", gin.WrapH(coco.New(\".\u002Fopenapi.json\",\n        coco.Title(\"User API\"),\n    )))\n    \n    r.Run(\":8000\")\n}\n```\n\n### Echo\n\n```go\npackage main\n\nimport (\n    \"github.com\u002Flabstack\u002Fecho\u002Fv4\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    e := echo.New()\n    \n    \u002F\u002F Your API routes\n    e.GET(\"\u002Fapi\u002Fusers\", getUsers)\n    \n    \u002F\u002F Mount documentation\n    e.Any(\"\u002Fdocs\u002F*\", echo.WrapHandler(coco.New(\".\u002Fopenapi.json\",\n        coco.Title(\"User API\"),\n    )))\n    \n    e.Start(\":8000\")\n}\n```\n\n### Fiber\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Fgofiber\u002Ffiber\u002Fv3\"\n    \"github.com\u002Fgofiber\u002Ffiber\u002Fv3\u002Fmiddleware\u002Fadaptor\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    app := fiber.New()\n    \n    \u002F\u002F Your API routes\n    app.Get(\"\u002Fapi\u002Fusers\", getUsers)\n    \n    \u002F\u002F Mount documentation\n    handler := coco.New(\".\u002Fopenapi.json\",\n        coco.Title(\"User API\"),\n    )\n    app.All(\"\u002Fdocs\u002F*\", adaptor.HTTPHandler(http.HandlerFunc(handler.ServeHTTP)))\n    \n    app.Listen(\":8000\")\n}\n```\n\n### Chi\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Fgo-chi\u002Fchi\u002Fv5\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    r := chi.NewRouter()\n    \n    \u002F\u002F Your API routes\n    r.Get(\"\u002Fapi\u002Fusers\", getUsers)\n    \n    \u002F\u002F Mount documentation\n    r.HandleFunc(\"\u002Fdocs\u002F*\", func(w http.ResponseWriter, req *http.Request) {\n        handler := coco.New(\".\u002Fopenapi.json\",\n            coco.Title(\"User API\"),\n        )\n        handler.ServeHTTP(w, req)\n    })\n    \n    http.ListenAndServe(\":8000\", r)\n}\n```\n\n## Configuration Options\n\n### Spec Sources\n\n```go\n\u002F\u002F Load from file path\ncoco.New(\".\u002Fopenapi.json\")\n\n\u002F\u002F Load from byte array\ncoco.New(\"\", coco.Spec(specBytes))\n\n\u002F\u002F Load from remote URL\ncoco.New(\"\", coco.SpecURL(\"https:\u002F\u002Fexample.com\u002Fopenapi.json\"))\n```\n\n### UI Configuration\n\n```go\n\u002F\u002F Set document title\ncoco.Title(\"My API Documentation\")\n\n\u002F\u002F Set theme: \"light\", \"dark\", \"auto\"\ncoco.Theme(\"dark\")\n\n\u002F\u002F Set language: \"en\", \"zh\"\ncoco.Lang(\"en\")\n```\n\n### Feature Toggles\n\n```go\n\u002F\u002F Enable\u002Fdisable debug panel (enabled by default)\ncoco.EnableDebug(true)\n\n\u002F\u002F Enable\u002Fdisable export feature (enabled by default)\ncoco.EnableExport(true)\n\n\u002F\u002F Enable\u002Fdisable history (enabled by default)\ncoco.EnableHistory(true)\n```\n\n## OpenAPI Generation Tools Integration\n\n### Using Huma v2\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"net\u002Fhttp\"\n    \n    \"github.com\u002Fdanielgtaylor\u002Fhuma\u002Fv2\"\n    \"github.com\u002Fdanielgtaylor\u002Fhuma\u002Fv2\u002Fadapters\u002Fhumago\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\nfunc main() {\n    mux := http.NewServeMux()\n    api := humago.New(mux, huma.DefaultConfig(\"My API\", \"1.0.0\"))\n    \n    \u002F\u002F Register your API\n    huma.Register(api, huma.Operation{\n        OperationID: \"get-users\",\n        Method:      http.MethodGet,\n        Path:        \"\u002Fapi\u002Fusers\",\n        Summary:     \"Get users\",\n    }, func(ctx context.Context, input *struct{}) (*struct{}, error) {\n        return &struct{}{}, nil\n    })\n    \n    \u002F\u002F Get OpenAPI spec and mount documentation\n    spec, _ := api.OpenAPI().MarshalJSON()\n    mux.Handle(\"\u002Fdocs\u002F\", coco.New(\"\",\n        coco.Spec(spec),\n        coco.Title(\"My API - Huma\"),\n    ))\n    \n    http.ListenAndServe(\":8000\", mux)\n}\n```\n\n### Using Swag\n\n```go\npackage main\n\nimport (\n    \"net\u002Fhttp\"\n    \"github.com\u002Fleehainuo\u002Fcoco\"\n)\n\n\u002F\u002F @title My API\n\u002F\u002F @version 1.0\n\u002F\u002F @description This is my API\n\u002F\u002F @host localhost:8000\n\u002F\u002F @BasePath \u002Fapi\n\nfunc main() {\n    mux := http.NewServeMux()\n    \n    \u002F\u002F Your API routes\n    mux.HandleFunc(\"\u002Fapi\u002Fusers\", getUsers)\n    \n    \u002F\u002F Mount documentation (swag generates docs\u002Fswagger.json)\n    mux.Handle(\"\u002Fdocs\u002F\", coco.New(\".\u002Fdocs\u002Fswagger.json\",\n        coco.Title(\"My API - Swag\"),\n    ))\n    \n    http.ListenAndServe(\":8000\", mux)\n}\n```\n\nGenerate documentation before running:\n```bash\nswag init\n```\n\n## Themes and Languages\n\n### Theme Options\n\n- `light` - Light theme\n- `dark` - Dark theme\n- `auto` - Follow system (default)\n\n### Language Options\n\n- `en` - English (default)\n- `zh` - Chinese\n\nUsers can switch themes and languages anytime in the top-right corner of the interface.\n\n## Documentation\n\n- **English Docs**: [docs\u002Fen\u002F](.\u002Fdocs\u002Fen\u002F) - Complete English documentation\n- **中文文档**: [docs\u002Fzh\u002F](.\u002Fdocs\u002Fzh\u002F) - 完整的中文使用指南\n- **Documentation Home**: [docs\u002F](.\u002Fdocs\u002F) - Choose your language \u002F 选择你的语言\n\n## Complete Examples\n\nCheck the [example\u002Fframework](.\u002Fexample\u002Fframework) directory for complete examples:\n\n- **net\u002Fhttp** - Standard library examples\n- **Gin** - Gin framework integration\n- **Echo** - Echo framework integration\n- **Fiber** - Fiber v3 framework integration\n- **Chi** - Chi router integration\n\nEach framework provides examples for both Huma and Swag OpenAPI generation methods.\n\n## 📚 Documentation\n\n- **English**: [docs\u002Fen\u002F](.\u002Fdocs\u002Fen\u002F)\n- **中文**: [docs\u002Fzh\u002F](.\u002Fdocs\u002Fzh\u002F)\n\n## 🤝 Contributing\n\nContributions, issues, and suggestions are welcome!\n\nIf you're using Coco or find it helpful, please give us a Star ⭐\n\n## License\n\nMIT License - See [LICENSE](LICENSE) file for details\n\n## Give a Star! ⭐\n\nIf you like this project or are using it to learn or build your solution, please give it a Star to get updates on new releases. Your support matters!\n\n---\n\n**Made with ❤️ by [leehainuo](https:\u002F\u002Fgithub.com\u002Fleehainuo)**\n","Coco 是一个为 Go 开发者设计的优雅且美观的 OpenAPI 文档渲染库。它支持将 OpenAPI\u002FSwagger 规范转换成交互式的 API 文档，具有零依赖、单文件打包的特点，并能无缝集成到任何 Go Web 框架中（如 Gin, Echo, Fiber, Chi, net\u002Fhttp 等）。Coco 采用 Vue 3 和 TailwindCSS 构建，界面美观并支持自动切换明暗主题；其核心功能包括内置的 API 测试、规格导出、请求历史记录等，同时提供了丰富的配置选项以满足不同定制需求。适用于需要快速生成和展示 API 文档的 Go 项目场景，特别适合追求开发体验与文档美观性的开发者。",2,"2026-06-11 04:06:06","CREATED_QUERY"]