{"id":45364870,"url":"https://github.com/asjard/asjard","last_synced_at":"2026-02-21T14:10:19.548Z","repository":{"id":244207166,"uuid":"787894689","full_name":"asjard/asjard","owner":"asjard","description":"Asjard is a protobuf-driven microservice framework implemented in Go that provides a unified platform for building scalable distributed services. Orchestrates multiple protocols (REST, gRPC, message queues), dynamic configuration management, code generation pipelines, and comprehensive observability features through a single configuration-driven in","archived":false,"fork":false,"pushed_at":"2026-02-03T05:25:32.000Z","size":12855,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-03T18:42:08.448Z","etag":null,"topics":["asjard","code-generation","dynamic-configuration","golang","microservice","multi-protocol-support","protobuf","server"],"latest_commit_sha":null,"homepage":"https://asjard.gitbook.io/","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/asjard.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.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-04-17T11:41:54.000Z","updated_at":"2026-02-03T05:18:41.000Z","dependencies_parsed_at":"2024-09-07T16:52:22.466Z","dependency_job_id":"5a09401f-f86d-4bf8-b2ef-216e11be188c","html_url":"https://github.com/asjard/asjard","commit_stats":null,"previous_names":["asjard/asjard"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/asjard/asjard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asjard%2Fasjard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asjard%2Fasjard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asjard%2Fasjard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asjard%2Fasjard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asjard","download_url":"https://codeload.github.com/asjard/asjard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asjard%2Fasjard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29682751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T13:29:26.630Z","status":"ssl_error","status_checked_at":"2026-02-21T13:26:50.125Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["asjard","code-generation","dynamic-configuration","golang","microservice","multi-protocol-support","protobuf","server"],"created_at":"2026-02-21T14:10:18.900Z","updated_at":"2026-02-21T14:10:19.538Z","avatar_url":"https://github.com/asjard.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GoDoc](https://godoc.org/github.com/asjard/asjard?status.svg)](https://godoc.org/github.com/asjard/asjard)\n[![Go](https://github.com/asjard/asjard/actions/workflows/go.yml/badge.svg)](https://github.com/asjard/asjard/actions/workflows/go.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/asjard/asjard)](https://goreportcard.com/report/github.com/asjard/asjard)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/asjard/asjard)](https://github.com/asjard/asjard/blob/main/go.mod)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/asjard/asjard)\n\n## Asjard\n\nAsjard is a protobuf-driven microservice framework implemented in Go that provides a unified platform for building scalable distributed services. Orchestrates multiple protocols (REST, gRPC, message queues), dynamic configuration management, code generation pipelines, and comprehensive observability features through a single configuration-driven interface.\n\n## Features\n\n- Code Generation\n- Dynamic Configuration\n- Data Stores\n- Error Management\n- OpenAPI Document\n\n## Quick Start\n\n### Install\n\n```bash\ngo get -u github.com/asjard/asjard\n```\n\n### Running in asjard\n\n- define protobuf\n\n```proto\nsyntax = \"proto3\";\n\npackage api.v1.example.docs;\n\n// The target Go package path for generated code.\noption go_package = \"protos-repo/example/api/v1/sample\";\n\nimport \"github.com/asjard/protobuf/http.proto\";\nimport \"github.com/asjard/protobuf/validate.proto\";\n\n// Sample service provides basic greeting operations.\nservice Sample {\n    // SayHello returns a greeting message based on the provided name.\n    // It supports multiple HTTP GET entrypoints for compatibility and routing flexibility.\n    rpc SayHello(HelloRequest) returns (HelloReply) {\n        // Dynamic path mapping (e.g., /helloworld/john)\n        option (asjard.api.http) = {\n            get : \"/helloworld/{name}\"\n        };\n        // Static path mapping for general greetings\n        option (asjard.api.http) = {\n            get : '/hello'\n        };\n    }\n}\n\n// HelloRequest defines the input payload for the SayHello method.\nmessage HelloRequest {\n    // The name of the person to greet.\n    // Validation: Must be provided (required) and no longer than 20 characters.\n    string name = 1 [ (asjard.api.validate).rules = \"required,max=20\" ];\n}\n\n// HelloReply defines the output payload containing the greeting result.\nmessage HelloReply {\n    // The formatted greeting string (e.g., \"Hello, name!\").\n    string message = 1;\n}\n```\n\n- implement in go\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\tpb \"protos-repo/example/api/v1/sample\"\n\n\t\"github.com/asjard/asjard\"\n\t\"github.com/asjard/asjard/pkg/server/grpc\"\n\t\"github.com/asjard/asjard/pkg/server/rest\"\n)\n\ntype SampleAPI struct {\n\tpb.UnimplementedSampleServer\n}\n\nfunc NewSampleAPI() *SampleAPI {\n\treturn \u0026SampleAPI{}\n}\n\nfunc (api *SampleAPI) Start() error { return nil }\nfunc (api *SampleAPI) Stop()        {}\n\n// GRPC server\nfunc (api *SampleAPI) GrpcServiceDesc() *grpc.ServiceDesc { return \u0026pb.Sample_ServiceDesc }\n\n// HTTP server\nfunc (api *SampleAPI) RestServiceDesc() *rest.ServiceDesc { return \u0026pb.SampleRestServiceDesc }\n\nfunc (api *SampleAPI) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {\n\treturn \u0026pb.HelloReply{\n\t\tMessage: \"hello \" + in.Name,\n\t}, nil\n}\n\nfunc main() {\n\tserver := asjard.New()\n\n\tif err := server.AddHandler(SampleAPI{}, rest.Protocol, grpc.Protocol); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tlog.Fatal(server.Start())\n}\n```\n\n### See more examples and documents\n\n- Reference [Document](https://asjard.gitbook.io/docs)\n- Examples [asjard-example](https://github.com/asjard/asjard/tree/develop/_examples)\n- Study in [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/asjard/asjard)\n\n## Benchmark\n\n- Latency\n\n![benchmark_latency](https://raw.githubusercontent.com/asjard/benchmark/main/benchmark_latency.png)\n![concurrency_latency](https://raw.githubusercontent.com/asjard/benchmark/main/concurrency_latency.png)\n\n- Concurrency\n\n![concurrency](https://raw.githubusercontent.com/asjard/benchmark/main/concurrency.png)\n![benchmark](https://raw.githubusercontent.com/asjard/benchmark/main/benchmark.png)\n\n- Allocations\n\n![benchmark_alloc](https://raw.githubusercontent.com/asjard/benchmark/main/benchmark_alloc.png)\n![concurrency_alloc](https://raw.githubusercontent.com/asjard/benchmark/main/concurrency_alloc.png)\n\nMore information see [TestCode](https://github.com/asjard/benchmark)\n\n## ThirdParty\n\nHere are some open source libraries used in this framework\n\n| Repo                                                                | Description                 |\n| ------------------------------------------------------------------- | --------------------------- |\n| [fasthttp](https://github.com/valyala/fasthttp)                     | http protocol               |\n| [fasthttp-router](https://github.com/fasthttp/router)               | http route management       |\n| [grpc](https://google.golang.org/grpc)                              | grpc protocol               |\n| [protobuf](https://google.golang.org/protobuf)                      | protobuf protocol           |\n| [hystrix-go](https://github.com/afex/hystrix-go)                    | circuit breaker             |\n| [fsnotify](https://github.com/fsnotify/fsnotify)                    | configration file listen    |\n| [prometheus-client-go](https://github.com/prometheus/client_golang) | prometheus                  |\n| [etcd](https://go.etcd.io/etcd/client/v3)                           | etcd client                 |\n| [gorm](https://gorm.io/gorm)                                        | database client             |\n| [redis](https://github.com/redis/go-redis/v9)                       | redis client                |\n| [yaml-v2](https://gopkg.in/yaml.v2)                                 | yaml parser                 |\n| [fressache](https://github.com/coocood/freecache)                   | local cache                 |\n| [gnostic](https://github.com/google/gnostic)                        | openapiv3 document generate |\n| [cast](https://github.com/spf13/cast)                               | type convert                |\n| [lumberjack](gopkg.in/natefinch/lumberjack.v2)                      | log                         |\n| [asynq](github.com/hibiken/asynq)                                   | asynq                       |\n| [rabbitmq](github.com/streadway/amqp)                               | rabbitmq                    |\n\n## License\n\n[MIT](https://github.com/asjard/asjard?tab=MIT-1-ov-file)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasjard%2Fasjard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasjard%2Fasjard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasjard%2Fasjard/lists"}