{"id":28964102,"url":"https://github.com/greenpixels/godot-arch","last_synced_at":"2025-06-24T05:02:40.396Z","repository":{"id":298007648,"uuid":"998561343","full_name":"greenpixels/godot-arch","owner":"greenpixels","description":"CLI tool to lint and enforce structure, naming, and organization rules in Godot projects","archived":false,"fork":false,"pushed_at":"2025-06-18T18:30:53.000Z","size":767,"stargazers_count":6,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-18T19:41:23.910Z","etag":null,"topics":["architecture","cli","godot","godot4","linter","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greenpixels.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-06-08T21:45:02.000Z","updated_at":"2025-06-18T18:30:56.000Z","dependencies_parsed_at":"2025-06-08T22:38:51.897Z","dependency_job_id":null,"html_url":"https://github.com/greenpixels/godot-arch","commit_stats":null,"previous_names":["greenpixels/godot-arch"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/greenpixels/godot-arch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenpixels%2Fgodot-arch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenpixels%2Fgodot-arch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenpixels%2Fgodot-arch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenpixels%2Fgodot-arch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greenpixels","download_url":"https://codeload.github.com/greenpixels/godot-arch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenpixels%2Fgodot-arch/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261607940,"owners_count":23184010,"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":["architecture","cli","godot","godot4","linter","rust"],"created_at":"2025-06-24T05:00:36.554Z","updated_at":"2025-06-24T05:02:40.388Z","avatar_url":"https://github.com/greenpixels.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GodotArch](assets/images/godot-arch-logo.png)\n\n\u003e 🚧👷‍♂️ **Please Note:** GodotArch is still in early development. Please report any bugs and issues you find.\n\nAn extremely fast project structure linter four your Godot projects. GodotArch enforces consistent file organization and naming conventions, making them more maintainable and easier to navigate. \n\nIt can check scenes, scripts, nodes, assets, and more. It is also extremely configurable via its `godot-arch.config.yaml`.\n\n## How To Use\n\nIn order to use GodotArch you need to have its executable and configuration inside your project root.\n### 1. Requirements\n- A Godot project developed with `Godot 4.4` or higher \n\n### 2. Installation \u0026 Setup\n- [Download](https://github.com/greenpixels/godot-arch/releases) the latest release for your platform\n- Unpack the contents into your project-root (`godot-arch.config.yaml` and `godot-arch`)\n- (*optional*) customize the configuration in `godot-arch.config.yaml`\n### 3. Usage\n- Execute  `godot-arch` either locally in your terminal or preferrably in your CI via e.g. \"*GitHub-Actions*\"\n\n## Available Rules\nGodotArch comes with a set of preconfigured rules that are a personal recommendation. You can of course customize that behaviour via the `godot-arch.config.yaml` configuration file.\n\n### Rule: `\"Allowed File Location\"`\nChecks whether matched files are allowed to be in the location they are in. For example, if we want `.tscn` files to only be somewhere inside of a `./scenes` folder and `.png` and `.jpeg` only to be inside of `./images` you can declare the rules as:\n\n```yaml\nallowedFileLocations:\n    \"./**/*.tscn\":\n        - ./scenes/**\n    \"./**/*.{png,jpeg}\":\n        - ./images/**\n```\n\n### Rule: `\"Filename Snake Case\"`\nChecks whether the matched files should have their file names be written in snake_case. Examples would be `player_animation_01.png`, `level_01.tscn`, ...\n\nTo adhere every file in your project this rule you can set the includePattern for this rule as such:\n\n```yaml\nincludePatterns:\n    \"rule-filename-snake-case\":\n        - ./**\n```\n\n### Rule: `\"Parent Has Same Name\"`\nChecks whether the matches files are inside a folder that has the same name as the file itself. For example, if we always want `.tscn` and `.gd` files to be placed into a folder with the same name you can declare the rule as:\n\n```yaml\nincludePatterns:\n    \"rule-filename-snake-case\":\n        - ./**/*.tscn\n        - ./**/*.gd\n```\n\nThis would result in a file structure that would look like:\n- /scenes\n  - /player  \n    - player\u0026#46;gd\n    - player\u0026#46;tscn\n\n### Rule: `\"Root Node Is File Name Pascal\"`\nChecks whether the file-name and the root-node-name as `PascalCase` inside a `.tscn` file match for the matched files. Meaning a scene-file that is named `inventory_grid.tscn` should have a root-node that is named `InventoryGrid.tscn`\n\nI would recommend turning this rule on for every `.tscn`-file.\n\n```yaml\nincludePatterns:\n    \"rule-root-node-is-file-name-pascal\":\n        - ./**/*.tscn\n```\n\n### Rule: `\"Scene Nodes Are Pascal Case\"`\nChecks whether the nodes inside of a scene tree are all written in `PascalCase`\n\nI would recommend turning this rule on for every `.tscn`-file.\n\n```yaml\nincludePatterns:\n    \"rule-scene-nodes-pascal-case\":\n        - ./**/*.tscn\n```\n\n## Planned Features\n\n### Maintenance\n- [ ] Write unit tests for core functionality\n\n### Additional Tests\n- [ ] Scripts and Scenes configured as autoload in project settings are actually inside of autoload and vice versa\n- [ ] Root nodes of a scene that contain a script should have that script next to that scene\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenpixels%2Fgodot-arch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreenpixels%2Fgodot-arch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenpixels%2Fgodot-arch/lists"}