{"id":21195599,"url":"https://github.com/openpeeps/bag","last_synced_at":"2025-10-10T14:09:59.810Z","repository":{"id":168757700,"uuid":"599121647","full_name":"openpeeps/bag","owner":"openpeeps","description":"Validate form input data in a fancy way. Written in Nim language","archived":false,"fork":false,"pushed_at":"2025-01-20T00:16:12.000Z","size":54,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T13:17:45.214Z","etag":null,"topics":["bag","form","form-validation","input-validation","nim-lang"],"latest_commit_sha":null,"homepage":"https://openpeeps.github.io/bag","language":"Nim","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/openpeeps.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-08T13:55:12.000Z","updated_at":"2025-01-20T00:16:13.000Z","dependencies_parsed_at":"2024-04-24T01:54:53.795Z","dependency_job_id":"3231d56b-b21c-4356-ae62-e13e75404fd0","html_url":"https://github.com/openpeeps/bag","commit_stats":null,"previous_names":["openpeeps/bag"],"tags_count":0,"template":false,"template_full_name":"openpeeps/pistachio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpeeps%2Fbag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpeeps%2Fbag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpeeps%2Fbag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openpeeps%2Fbag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openpeeps","download_url":"https://codeload.github.com/openpeeps/bag/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252941416,"owners_count":21828872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bag","form","form-validation","input-validation","nim-lang"],"created_at":"2024-11-20T19:29:05.406Z","updated_at":"2025-10-10T14:09:59.792Z","avatar_url":"https://github.com/openpeeps.png","language":"Nim","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/openpeeps/bag/blob/main/.github/logo.png\" width=\"64px\"\u003e\u003cbr\u003e\n  Validate HTTP input data in a fancy way.\u003cbr\u003e👑 Written in Nim language\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ccode\u003enimble install bag\u003c/code\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://openpeeps.github.io/bag\"\u003eAPI reference\u003c/a\u003e\u003cbr\u003e\n  \u003cimg src=\"https://github.com/openpeeps/bag/workflows/test/badge.svg\" alt=\"Github Actions\"\u003e | \u003cimg src=\"https://github.com/openpeep/bag/workflows/docs/badge.svg\" alt=\"Github Actions\"\u003e\n\u003c/p\u003e\n\n## 😍 Key Features\n- [x] Macro-based validation\n- [x] Framework agnostic\n- [x] i18n support\n- [x] Based on [Valido package](https://github.com/openpeeps/valido)\n- [x] Open Source | `MIT` License\n- [x] Written in 👑 Nim language\n\n## Examples\n\n```nim\n# can be a seq/array containing a key/value tuple (string, string)\nvar data = [(\"email\", \"test@example.com\"), (\"password\", \"123admin\")]\n\n# create a new bag\nbag data:\n  email: tEmail or \"auth.error.email\"\n  password: tPassword or \"auth.error.password\":\n    min: 8 or \"auth.error.password.min\"\n  *remember: tCheckbox  # `*` prefix makes field optional\ndo:\n  for err in inputBag.getErrors:\n    echo err\n```\n\nFor more examples, check in [unittests](https://github.com/openpeeps/bag/blob/main/tests/test1.nim)\n\n### ❤ Contributions \u0026 Support\n- 🐛 Found a bug? [Create a new Issue](https://github.com/openpeeps/bag/issues)\n- 👋 Wanna help? [Fork it!](https://github.com/openpeeps/bag/fork)\n- 😎 [Get €20 in cloud credits from Hetzner](https://hetzner.cloud/?ref=Hm0mYGM9NxZ4)\n\n### 🎩 License\nBag | MIT license. [Made by Humans from OpenPeeps](https://github.com/openpeeps).\u003cbr\u003e\nCopyright \u0026copy; 2025 OpenPeeps \u0026 Contributors \u0026mdash; All rights reserved.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenpeeps%2Fbag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenpeeps%2Fbag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenpeeps%2Fbag/lists"}