{"id":23401880,"url":"https://github.com/codef0x/cira","last_synced_at":"2026-03-01T00:32:08.143Z","repository":{"id":178132129,"uuid":"661339492","full_name":"CodeF0x/cira","owner":"CodeF0x","description":"🎟️ Minimalistic Ticketing System REST API — with Authentication, Search Filters \u0026 More","archived":false,"fork":false,"pushed_at":"2025-06-19T13:04:21.000Z","size":57,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-22T13:46:29.049Z","etag":null,"topics":["api","backend","crud","rest-api","rust","sqlite","ticketing-system"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/CodeF0x.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-07-02T14:37:13.000Z","updated_at":"2025-06-19T13:02:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"d68588a0-dffe-441b-b695-7e56411f521d","html_url":"https://github.com/CodeF0x/cira","commit_stats":null,"previous_names":["codef0x/cira-backend","codef0x/cira"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/CodeF0x/cira","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeF0x%2Fcira","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeF0x%2Fcira/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeF0x%2Fcira/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeF0x%2Fcira/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeF0x","download_url":"https://codeload.github.com/CodeF0x/cira/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeF0x%2Fcira/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29956195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T22:53:01.873Z","status":"ssl_error","status_checked_at":"2026-02-28T22:52:50.699Z","response_time":90,"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":["api","backend","crud","rest-api","rust","sqlite","ticketing-system"],"created_at":"2024-12-22T11:19:56.782Z","updated_at":"2026-03-01T00:32:08.097Z","avatar_url":"https://github.com/CodeF0x.png","language":"Rust","readme":"\u003e Warning: You should probably not use this in production or with any data that is sensitive as the authentication\r\n\u003e system\r\n\u003e is made very amateurish.\r\n\r\n# Cira - a minimalistic ticket system backend\r\n\r\nCira is a minimalistic ticket system backend for small and simple projects.\r\nYou could even use it as an overcomplicated todo app.\r\n\r\nThe only thing it does is to provide an api.\r\nThe rest is up to you.\r\nCreate a native desktop or smartphone app, or keep in the web as most ticket boards to.\r\nYou decide, the possibilities are endless.\r\n\r\n## Features\r\n\r\nCira gives you the foundation to:\r\n\r\n- create and delete tickets\r\n- update tickets after creation\r\n- group tickets by labels\r\n- assign tickets to users\r\n- filter tickets by labels, assignee, status and labels\r\n- authentication with bearer tokens\r\n\r\n## Run Locally\r\n\r\nSimply clone the repository, set up the database and compile the application locally.\r\nThen start it.\r\nYou are required to have installed: [the rust programming language](https://rust-lang.org),\r\n[git](https://git-scm.com/), [diesel](https://diesel.rs), [sqlite](https://www.sqlite.org/)\r\n\r\n```bash\r\ngit clone https://github.com/CodeF0x/cira.git\r\ncd cira\r\ncargo install diesel_cli --no-default-features --features \"sqlite\"\r\ndiesel setup\r\ncargo build --release\r\n./target/release/cira\r\n```\r\n\r\nIf you're on Debian and get `error: linking with 'cc' failed: exit status: 1`, make sure to have `build-essential`\r\ninstalled. Same goes for other distros (build-essential might be called different / have an equivalent).\r\n\r\nIf this error accours while installing `diesel_cli`, try `sudo apt install -y libsqlite3-dev libpq-dev libmysqlclient-dev`.\r\n\r\nThere are some default values set in the .env file, you can adjust them as you wish.\r\nKeep in mind to change the code as well.\r\n\u003e ⚠️ Be sure to update both `HASH_SECRET` and `JWT_SECRET` to something cryptographically safe! \r\n\r\nIf everything went well and there is no output after running the last command, cira is listening on port `8080`.\r\n\r\nYou can also launch it in a screen or in a container, so it runs without an active shell session.\r\n\r\n## Running Tests\r\n\r\nTo run tests, set up a fake database that is independent of the actual production database.\r\nYou need to have installed [diesel](https://diesel.rs), [sqlite](https://www.sqlite.org/) and [rust](https://rust-lang.org).\r\n\r\n```bash\r\ndiesel migration run --database-url test-backend.sqlite\r\ncargo test\r\n```\r\n\r\n## API Reference\r\n\r\n#### Create a new ticket\r\n\r\n```http\r\n  POST /tickets\r\n```\r\n\r\nYour payload must be valid JSON and contain the following properties:\r\n\r\n| Property        | Type            | Description                                                                   |\r\n|:----------------|:----------------|:------------------------------------------------------------------------------|\r\n| `title`         | `string`        | **Required**. The title of your ticket                                        |\r\n| `body`          | `string`        | **Required**. The body of your ticket                                         |\r\n| `labels`        | `Array\u003cstring\u003e` | **Required**. Labels of your ticket                                           |\r\n| `status`        | `string`        | **Required**. The status of your ticket (set it to \"Open\")                    |\r\n| `assigned_user` | `id \\| null`    | **Optional**. A user the ticket should be assigned to. Can be omitted or null |\r\n\r\nPossible Status options:\r\n\r\n- `Open`\r\n- `Closed`\r\n\r\nPossible Label options:\r\n\r\n- `Feature`\r\n- `Bug`\r\n- `WontFix`\r\n- `Done`\r\n- `InProgress`\r\n\r\nCreates a new ticket and returns it.\r\n\r\n#### Get tickets\r\n\r\n```http\r\n  GET /tickets\r\n```\r\n\r\nGet all tickets.\r\n\r\n#### Delete ticket\r\n\r\n```http\r\n  DELETE /tickets/{id}\r\n```\r\n\r\nURL parameters:\r\n\r\n| Property | Type     | Description                        |\r\n|:---------|:---------|:-----------------------------------|\r\n| `id`     | `number` | **Required**. The id of the ticket |\r\n\r\nDeletes a ticket and returns it.\r\n\r\n#### Edit a ticket\r\n\r\n```http\r\n  POST /tickets/{id}\r\n```\r\n\r\nURL parameters:\r\n\r\n| Property | Type     | Description                        |\r\n|:---------|:---------|:-----------------------------------|\r\n| `id`     | `number` | **Required**. The id of the ticket |\r\n\r\nYour payload must be valid JSON and contain the following properties:\r\n\r\n| Property        | Type            | Description                                                                   |\r\n|:----------------|:----------------|:------------------------------------------------------------------------------|\r\n| `title`         | `string`        | **Required**. The title of your ticket                                        |\r\n| `body`          | `string`        | **Required**. The body of your ticket                                         |\r\n| `labels`        | `Array\u003cstring\u003e` | **Required**. Labels of your ticket                                           |\r\n| `status`        | `string`        | **Required**. The status of your ticket (set it to \"Open\")                    |\r\n| `assigned_user` | `id \\| null`    | **Optional**. A user the ticket should be assigned to. Can be omitted or null |\r\n\r\nPossible Status options:\r\n\r\n- `Open`\r\n- `Closed`\r\n\r\nPossible Label options:\r\n\r\n- `Feature`\r\n- `Bug`\r\n- `WontFix`\r\n- `Done`\r\n- `InProgress`\r\n\r\nUpdates a ticket and returns it.\r\n\r\n#### Sign up\r\n\r\n```\r\n  POST /users\r\n```\r\n\r\nYour payload must be valid JSON and contain the following properties:\r\n\r\n| Property       | Type     | Description                            |\r\n|:---------------|:---------|:---------------------------------------|\r\n| `display_name` | `string` | **Required**. The user's display name  |\r\n| `email`        | `string` | **Required**. The user's email address |\r\n| `password`     | `string` | **Required**. The user's password      |\r\n\r\nCreate a new user and return it.\r\n\r\n#### Filter tickets\r\n\r\n```http\r\n  POST /filter\r\n```\r\n\r\nYour payload must be valid JSON and contain the following properties:\r\n\r\n| Property        | Type                    | Description                                                     |\r\n|:----------------|:------------------------|:----------------------------------------------------------------|\r\n| `title`         | `string \\| null`        | **Optional**. Title to search for. Can be omitted or null       |\r\n| `labels`        | `Array\u003cstring\u003e \\| null` | **Optional**. Labels to search for. Can be omitted or null      |\r\n| `status`        | `string \\| null`        | **Optional**. Status to search for. Can be omitted or null      |\r\n| `assigned_user` | `id \\| null`            | **Optional**. Assignee id to search for. Can be omitted or null |\r\n\r\nLets you filter for tickets and return results.\r\n\r\n## Contributing\r\n\r\nContributions are always welcome!\r\n\r\nEither by submitting issues, pull requests or just general constructive feedback in the form of issues,\r\nemails or direct messages on Telegram.\r\n\r\n## License\r\n\r\n[MIT](https://choosealicense.com/licenses/mit/)\r\n\r\nMIT or \"I do not care what you do with this as long as you don't claim it to be your own\"-license.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodef0x%2Fcira","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodef0x%2Fcira","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodef0x%2Fcira/lists"}