{"id":38242049,"url":"https://github.com/itrabbit/just","last_synced_at":"2026-01-17T01:14:52.369Z","repository":{"id":57523945,"uuid":"95496799","full_name":"itrabbit/just","owner":"itrabbit","description":"JUST - GoLang package for fast development web micro services","archived":false,"fork":false,"pushed_at":"2018-07-01T19:51:05.000Z","size":248,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-20T03:53:30.359Z","etag":null,"topics":["cli","cors","finalizer","framework","gin","golang","http","https","i18n","just","microservices","network","regex-routing","regex-validator","server","simple","web"],"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/itrabbit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-26T23:04:41.000Z","updated_at":"2024-03-03T09:22:03.000Z","dependencies_parsed_at":"2022-09-15T18:24:15.524Z","dependency_job_id":null,"html_url":"https://github.com/itrabbit/just","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/itrabbit/just","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itrabbit%2Fjust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itrabbit%2Fjust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itrabbit%2Fjust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itrabbit%2Fjust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itrabbit","download_url":"https://codeload.github.com/itrabbit/just/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itrabbit%2Fjust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28491209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"ssl_error","status_checked_at":"2026-01-17T00:43:11.982Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["cli","cors","finalizer","framework","gin","golang","http","https","i18n","just","microservices","network","regex-routing","regex-validator","server","simple","web"],"created_at":"2026-01-17T01:14:51.659Z","updated_at":"2026-01-17T01:14:52.362Z","avatar_url":"https://github.com/itrabbit.png","language":"Go","readme":"# JUST Web Framework\n\n\u003cimg align=\"right\" width=\"159px\" src=\"https://raw.githubusercontent.com/itrabbit/just/master/logo.png\"\u003e\n\n[![Build Status](https://travis-ci.org/itrabbit/just.svg?branch=master)](https://travis-ci.org/itrabbit/just)\n [![CodeCov](https://codecov.io/gh/itrabbit/just/branch/master/graph/badge.svg)](https://codecov.io/gh/itrabbit/just)\n [![GoDoc](https://godoc.org/github.com/itrabbit/just?status.svg)](https://godoc.org/github.com/itrabbit/just)\n\n**JUST** — Web application framework, written in Go (GoLang). Inspired by the Gin (GoLang) and Symfony (PHP). JUST was not created to handle the huge volume of data and the more pre-empting analogues (Gin, Iris, Martini, ...). First I want to achieve comfort and reducing product development time ;-)  \n\n\u003e Ping / Pong example\n\n```go\npackage main\n\nimport \"github.com/itrabbit/just\"\n\nfunc main() {\n\ta := just.New()\n\ta.GET(\"/ping\", func(c *just.Context) just.IResponse {\n\t\treturn c.S().Response(200, just.H{\n\t\t\t\"message\": \"pong\",\n\t\t})\n\t})\n\ta.Run(\":80\")\n}\n```\n\n## CLI \n\n\u003e Install JUST CLI\n\n```sh\ngo install github.com/itrabbit/just/cli/just-cli\n```\n\n### Build i18n file from source\n\n```sh\njust-cli i18n:build -lang=\"en,ru\" -dir=\"{full path to project dir}\" -out=\"i18n.go\"\n```\n\n\u003e Example result i18n:build (i18n.go)\n\n```go\n// The file is generated using the CLI JUST.\n// Change only translation strings!\n// Everything else can be removed when re-generating!\n// - - - - - \n// Last generated time: Sun, 07 Jan 2018 00:56:22 +05\n\npackage main\n\nimport \"github.com/itrabbit/just\"\n\nfunc loadTranslations(t just.ITranslator) {\n\tif t != nil {\n\t\tt.AddTranslationMap(\"en\", just.TranslationMap{\n\t\t\t\"Hello World\": \"Hello World\",\n\t\t\t\"Payload\": \"Payload\",\n\t\t})\n\t\tt.AddTranslationMap(\"ru\", just.TranslationMap{\n\t\t\t\"Hello World\": \"Hello World\",\n\t\t\t\"Payload\": \"Payload\",\n\t\t})\n\t}\n}\n```\n\n\u003e Usage i18n (main.go)\n\n```go\npackage main\n\nimport \"github.com/itrabbit/just\"\n\nfunc main() {\n\t// Create app\n\tapp := just.New()\n\n\t// Use i18n.go\n\tloadTranslations(app.Translator())\n    \n\tapp.GET(\"\", func(c *just.Context) just.IResponse {\n\t\treturn c.Serializer().\n\t\t\tResponse(200, \u0026just.H{\n\t\t\t\t\"msg\":     c.Tr(\"Hello World\"),\n\t\t\t\t\"payload\": c.Tr(\"Payload\"),\n\t\t\t})\n\t})\n\tapp.Run(\":8081\")\n}\n```\n\n## Performance testing (on MacBook Pro 15 (2014))\n\n```\ngoos: darwin\ngoarch: amd64\npkg: github.com/itrabbit/just\n\nBenchmarkOneRoute:\n10000000\t       183 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmarkRecoveryMiddleware:\n10000000\t       176 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmarkLoggerMiddleware:\n10000000\t       173 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmarkManyHandlers:\n10000000\t       174 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmark5Params:\n  500000\t      3708 ns/op\t     720 B/op\t       8 allocs/op\n  \nBenchmarkOneRouteJSON:\n 1000000\t      1059 ns/op\t     592 B/op\t       6 allocs/op\n \nBenchmarkOneRouteHTML:\n  300000\t      4501 ns/op\t    1840 B/op\t      28 allocs/op\n  \nBenchmarkOneRouteSet:\n 3000000\t       420 ns/op\t     384 B/op\t       3 allocs/op\n \nBenchmarkOneRouteString:\n10000000\t       220 ns/op\t      80 B/op\t       2 allocs/op\n\nBenchmarkManyRoutesFist:\n10000000\t       175 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmarkManyRoutesLast:\n10000000\t       194 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmark404:\n10000000\t       169 ns/op\t      48 B/op\t       1 allocs/op\n\nBenchmark404Many:\n 2000000\t       607 ns/op\t      48 B/op\t       1 allocs/op\n```\n\n## Serialize result finishing with filtration fields\n\n```go\npackage main\n\nimport (\n\t\"time\"\n\t\n\t\"github.com/itrabbit/just\"\t\n\t\"github.com/itrabbit/just/components/finalizer\"\n)\n\ntype PhoneNumber struct{\n\tE164 string `json:\"e164\"` \n}\n\ntype User struct {\n\tID          uint64          `json:\"id\"`\n\tPhone       *PhoneNumber    `json:\"phone,omitempty\" group:\"private\" export:\"E164\"`\n\tCreatedAt   time.Time       `json:\"created_at\" group:\"private\"`\n\tUpdatedAt   time.Time       `json:\"update_at\" group:\"private\" exclude:\"equal:CreatedAt\"`\n}\n\nfunc main() {\n\t// Create new JUST application\n\ta := just.New()\n\t\n\t// replace def serializers\n\tfinalizer.ReplaceSerializers(a)\t\n        \n    a.GET(\"/{group:enum(public,private)}\", func(c *just.Context) just.IResponse {\n    \tnow := time.Now()\n    \treturn c.Serializer().\n    \t\t    Response(200, finalizer.Input(\n    \t\t    \t\u0026User{\n    \t\t    \t\tID: 1,\n    \t\t    \t\tPhone: \u0026PhoneNumber{\n    \t\t    \t\t\tE164: \"+79000000000\",\n    \t\t    \t\t},\n    \t\t    \t\tCreatedAt: now,\n    \t\t    \t\tUpdatedAt: now,\n    \t\t    \t}, \n    \t\t    \tc.ParamDef(\"group\", \"public\"),\n    \t\t    ))\n    })    \n    a.Run(\":80\")\n}\n```\n\n\u003e Result GET request http://localhost/public\n\n```json\n{\n    \"id\": 1\n}\n```\n\n\u003e Result GET request http://localhost/private\n\n```json\n{\n    \"id\": 1,\n    \"phone\": \"+79000000000\",\n    \"created_at\": \"2017-12-11T22:23:36.709146+05:00\"    \n}\n```\n\n[More info](/components/finalizer/README.md)\n\n## Routing examples\n\n```\n// Enums\nhttp://localhost/api/{type:enum(object,item)}/{id:integer}\n\n// True / False (0,1,t,f,true,false)\nhttp://localhost/api/trigger/{value:boolean}\n\n// Integer\nhttp://localhost/api/object/{id:integer}\n\n// Float\nhttp://localhost/api/object/{id:float}\n\n// Regexp\nhttp://localhost/api/object/{id:regexp(\\\\d+)}\n\n// String\nhttp://localhost/api/object/{name}\n\n// UUID\nhttp://localhost/api/object/{uuid:uuid}\n```\n\n# Donation to development\n\n`BTC: 1497z5VaY3AUEUYURS5b5fUTehVwv7wosX`\n\n`DASH: XjBr7sqaCch4Lo1A7BctQz3HzRjybfpx2c`\n\n`XRP: rEQwgdCr8Jma3GY2s55SLoZq2jmqmWUBDY`\n\n`PayPal / Yandex Money: garin1221@yandex.ru`\n\n## License\n\nJUST is licensed under the [MIT](LICENSE).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitrabbit%2Fjust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitrabbit%2Fjust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitrabbit%2Fjust/lists"}