{"id":13491304,"url":"https://github.com/nylki/aframe-lsystem-component","last_synced_at":"2026-03-04T21:36:51.319Z","repository":{"id":57174219,"uuid":"61196534","full_name":"nylki/aframe-lsystem-component","owner":"nylki","description":"L-System/LSystem component for A-Frame to draw 3D turtle graphics. Using Lindenmayer as backend.","archived":false,"fork":false,"pushed_at":"2018-07-03T10:21:44.000Z","size":1907,"stargazers_count":39,"open_issues_count":3,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-29T01:35:45.319Z","etag":null,"topics":["aframe","fractal","lindenmayer","lsystem","procedural-generation","turtle-graphics"],"latest_commit_sha":null,"homepage":"http://nylki.github.io/aframe-lsystem-component","language":"JavaScript","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/nylki.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":"2016-06-15T09:43:21.000Z","updated_at":"2025-04-02T18:02:05.000Z","dependencies_parsed_at":"2022-09-02T12:11:22.729Z","dependency_job_id":null,"html_url":"https://github.com/nylki/aframe-lsystem-component","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/nylki/aframe-lsystem-component","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nylki%2Faframe-lsystem-component","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nylki%2Faframe-lsystem-component/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nylki%2Faframe-lsystem-component/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nylki%2Faframe-lsystem-component/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nylki","download_url":"https://codeload.github.com/nylki/aframe-lsystem-component/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nylki%2Faframe-lsystem-component/sbom","scorecard":{"id":699919,"data":{"date":"2025-08-18","repo":{"name":"github.com/nylki/aframe-lsystem-component","commit":"df91c09d8a80fbeba5b2b551ea81b0d1901b5402"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":1.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.2.0 not signed: https://api.github.com/repos/nylki/aframe-lsystem-component/releases/11755258","Warn: release artifact 0.1.12 not signed: https://api.github.com/repos/nylki/aframe-lsystem-component/releases/7397353","Warn: release artifact 0.2.0 does not have provenance: https://api.github.com/repos/nylki/aframe-lsystem-component/releases/11755258","Warn: release artifact 0.1.12 does not have provenance: https://api.github.com/repos/nylki/aframe-lsystem-component/releases/7397353"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"81 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-c6rq-rjc2-86v2","Warn: Project is vulnerable to: GHSA-wxhq-pm8v-cw75","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-9vvw-cc9w-f27h","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-hr2v-3952-633q","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-qrmc-fj45-qfc2","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-xf7w-r453-m56c","Warn: Project is vulnerable to: GHSA-8mmm-9v2q-x3f9","Warn: Project is vulnerable to: GHSA-44pw-h2cw-w3vq","Warn: Project is vulnerable to: GHSA-jp4x-w63m-7wgm","Warn: Project is vulnerable to: GHSA-c429-5p7v-vgjp","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-fvqr-27wr-82fm","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-f9cm-qmx5-m98h","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-wrvr-8mpx-r7pp","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-gqgv-6jq5-jjj9","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-6g33-f262-xjp4","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-wpg7-2c88-r8xv","Warn: Project is vulnerable to: GHSA-2m39-62fm-q8r3","Warn: Project is vulnerable to: GHSA-325j-24f4-qv5x","Warn: Project is vulnerable to: GHSA-mf6x-7mm4-x2g7","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-fq6p-x6j3-cmmq","Warn: Project is vulnerable to: GHSA-g7q5-pjjr-gqvp","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-w5p7-h5w8-2hfq","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T04:57:36.070Z","repository_id":57174219,"created_at":"2025-08-22T04:57:36.070Z","updated_at":"2025-08-22T04:57:36.070Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30094142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"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":["aframe","fractal","lindenmayer","lsystem","procedural-generation","turtle-graphics"],"created_at":"2024-07-31T19:00:55.458Z","updated_at":"2026-03-04T21:36:51.265Z","avatar_url":"https://github.com/nylki.png","language":"JavaScript","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"## aframe-lsystem-component\n\nA L-System component for [A-Frame](https://aframe.io) which use the L-System library [lindenmayer](https://github.com/nylki/lindenmayer) as backend.\nIt renders L-Systems via the *turtle graphic* technique to create procedurally generated geometry.\n\n[![](https://cloud.githubusercontent.com/assets/1710598/18224914/273eab36-71e6-11e6-82a5-826e0f603ea1.jpg)\n](http://nylki.github.io/aframe-lsystem-component/)\n\n### Properties\n\n| Property               | Description                                                                                           | Default Value |\n| ---------------------- | ----------------------------------------------------------------------------------------------------- | -------       |\n| axiom                  | (string) Initiator/initial string/axiom.                                                              | `'F'`           |\n| productions             | (string) Productions `from`:`to`. Separate by acomma. eg: `productions: F:FF, X:F+X+F`                                                    | `'F:F'`       |\n| iterations             | (int) How many times the productions should be applied                                                         | `1`          |\n| angle                  | (number) Degree change to apply for rotation symbols like, `+`, `-`, `\u003e`, `\u003c` etc.                                           | `45.0`        |\n| segmentMixins          | (list) For any symbol you want to be rendered, you need to assign them [mixins](https://aframe.io/docs/0.3.0/core/mixins.html) here. Let's say you want F and X to be rendered, then you could write `segmentMixins: F:blue line X:big sphere`. You may define multiple mixins per symbol if you plan to use `!` and `'` in your L-System to increment/decrement the mixin index, which directly relates to your *segmentMixins*. Eg. `F: red line,blue line,green line` with an Axiom `F!F!F` will produce exactly three lines with those colors. Be sure though to actually define mixins you want to use in you assets. Take a look at some of the examples to get a better idea how this works, eg. the [multi-mixin example](https://github.com/nylki/aframe-lsystem-component/blob/master/examples/multiple%20mixins/index.html).  |         |\n| scaleFactor            | (number) If you use `!` and `'` in your L-System (see also `segmentMixins` above), this factor controls the size decrease/increase of subsequent segments. | `1.0` |\n\n\n#### advanced properties\nUsually you don't need to touch the following, but in some situations, you might need or want to.\n\n| Property               | Description                                                                                           | Default Value |\n| ---------------------- | ----------------------------------------------------------------------------------------------------- | -------       |\n| translateAxis          | (string) `'x'`, `'y'` or `'z'`, defines the axis on which to translate along when adding a segment (or moving the *turtle* via lowercase symbols of segments). Changing this to `'x'` is often necessary if you 1:1 copy examples from a textbook. | `'y'`        |\n| mergeGeometries        | (boolean) Set false if you want an Object3D per segment. Degrades rendering performance when `false`! | `true`        |\n\n### Usage\nA very basic L-System entity could look like:\n\n```.html\n\u003ca-entity lsystem=\"axiom: F; productions: F:F-F++F angle:40 iterations:3 segmentMixins: F:line\"\u003e\u003c/a-entity\u003e\n```\nPlease refer to the examples for some practical usage examples.\n\nIf you want to learn more about L-Systems in general, I recommend the [overview article at wikipedia](https://en.wikipedia.org/wiki/L-system).\nAnd if you want to dive deep in, you can read the [Algorithmic Beauty of Plants](http://algorithmicbotany.org/papers/#abop), the classic by Aristid Lindenmayer and Przemyslaw Prusinkiewicz.\n\nIn case you are already familiar with L-Systems or turtle graphics,\nhere is a list of all supported symbols and their interpretation in this component:\n\n- `+` rotates Y around defined angles\n- `-` rotates Y around defined -angles\n- `\u0026` rotates Z around defined angles\n- `^` rotates Z around defined -angles\n- `\\` rotates X around defined -angles\n- `\u003c` rotates X around defined -angles\n- `/` rotates X around defined angles\n- `\u003e` rotates X around defined angles\n- `|` rotates Y around defined 180 degree\n- `!` increments segment index (next `segmentMixin` per symbol if defined). Also applies `scaleFactor` to next segments.\n- `'` decrements segment index (previous `segmentMixin` per symbol if defined). Also applies 1.0 / `scaleFactor` to next segments.\n- `[` starts branch\n- `]` ends branch\n\nBesides those *turtle graphic* symbols, you define your own symbols like `F` for drawing actual geometry like lines or flowers.\nHowever if you want your symbol to be rendered, you need to define an entry in `segmentMixins`, like so:\n\n```.html\n\u003ca-entity lsystem=\"axiom: A; productions: A:A+B; segmentMixins: A:line B:blue sphere\"\u003e\u003c/a-entity\u003e\n```\nBe sure that you define your [mixins](https://aframe.io/docs/0.3.0/core/mixins.html) in your `\u003ca-assets\u003e` at the beginning of your scene.\nA fallback geometry and material if you don't define your segmentMixins is not yet implemented, but will be soon :)\n\n\n\nIt's also possible to use context sensitive productions like:\n```.html\n\u003ca-entity lsystem=\"axiom: AABC; productions: A\u003cA\u003eB:A+A segmentMixins: A:line B:small line C:big line\"\u003e\u003c/a-entity\u003e\n```\n\nParametric and stochastic productions are not yet implemented in the component.\nNative JS function parsing for productions, as the backend library allows, might added to this\ncomponent, but is not yet done.\n\nPlease take a look at the examples to get an idea how to use the component. PRs are welcome! :)\n\n#### Browser Installation\n\nInstall and use by directly including the [browser files](dist):\n\n```.html\n\u003chead\u003e\n  \u003ctitle\u003eMy A-Frame Scene\u003c/title\u003e\n  \u003cscript src=\"https://aframe.io/releases/0.3.0/aframe.min.js\"\u003e\u003c/script\u003e\n  \u003cscript src=\"https://raw.githubusercontent.com/nylki/aframe-lsystem-component/master/dist/aframe-lsystem-component.min.js\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e\n  \u003ca-scene\u003e\n  \n   \u003ca-assets\u003e\n     \u003ca-mixin id=\"line\" geometry=\"primitive: box; height: 0.2; width: 0.4; depth: 0.2;\"\u003e\u003c/a-mixin\u003e\n     \u003ca-mixin id=\"blue\" material=\"color: #45b5c8;\"\u003e\u003c/a-mixin\u003e\n   \u003c/a-assets\u003e\n    \n    \u003ca-entity lsystem=\"axiom: F+F; productions: F:F-F++F\" segmentMixins: F:blue line\u003e\u003c/a-entity\u003e\n    \n  \u003c/a-scene\u003e\n\u003c/body\u003e\n```\n\n#### NPM Installation\n\nInstall via NPM:\n\n```bash\nnpm install aframe-lsystem-component\n```\n\nThen register and use.\n\n```js\nrequire('aframe');\nrequire('aframe-lsystem-component');\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnylki%2Faframe-lsystem-component","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnylki%2Faframe-lsystem-component","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnylki%2Faframe-lsystem-component/lists"}