{"id":52091274,"url":"https://github.com/aether-lang-dev/skirae","last_synced_at":"2026-08-04T06:01:27.512Z","repository":{"id":374076844,"uuid":"1261921447","full_name":"aether-lang-dev/skirae","owner":"aether-lang-dev","description":"Temp port of skir.build (in order to push aeb and aether development) ","archived":false,"fork":false,"pushed_at":"2026-07-06T20:39:07.000Z","size":6665,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-31T20:21:58.406Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","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/aether-lang-dev.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2026-06-07T10:36:33.000Z","updated_at":"2026-07-31T17:31:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aether-lang-dev/skirae","commit_stats":null,"previous_names":["aether-lang-dev/skirae"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/aether-lang-dev/skirae","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aether-lang-dev%2Fskirae","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aether-lang-dev%2Fskirae/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aether-lang-dev%2Fskirae/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aether-lang-dev%2Fskirae/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aether-lang-dev","download_url":"https://codeload.github.com/aether-lang-dev/skirae/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aether-lang-dev%2Fskirae/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36263568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-04T02:00:06.901Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-08-04T06:01:26.832Z","updated_at":"2026-08-04T06:01:27.506Z","avatar_url":"https://github.com/aether-lang-dev.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skir\n\nSkir began as Tyler Fibonacci's TypeScript implementation of a compact schema\nlanguage for generating strongly typed bindings. This repository keeps the\noriginal ISC license and gives credit to that work; the current branch is a\nspeculative native-Aether rewrite meant to showcase Aether itself.\n\nThis is not a donation back to the original Skir project. It is a local\nexperiment in replacing the Node/TypeScript core with:\n\n- Aether for the CLI and schema authoring DSL.\n- aeb for build and test targets.\n- Aeocha for BDD-style tests.\n- External generator binaries for language-specific bindings.\n\n## Achievements\n\nThe port has changed the shape of the project substantially:\n\n- **No root npm package**: `package.json` and `package-lock.json` are gone.\n  Package metadata now belongs to generated language bindings, not to Skir's\n  own build.\n- **No TypeScript core**: the previous `src/*.ts` implementation and tests were\n  removed. The old tree had 44 TypeScript files and about 21.5k TypeScript\n  source lines.\n- **No npm dependency graph**: the pre-port lockfile was about 3,174 lines and\n  pulled runtime packages such as `glob`, `yaml`, `zod`, `watcher`,\n  `skir-internal`, and the `skir-*-gen` packages, plus TypeScript/Mocha/ESLint\n  dev tooling. The native repo has no npm install step.\n- **Native CLI**: `bin/skir` builds and runs `aether/skir.ae`. The current\n  native binary is about 112 KiB locally.\n- **Aether schema DSL**: `skir_schema` builds schema IR directly. `.skir` is no\n  longer the intended intermediate for this showcase path.\n- **Native binding generators**: each `generators/\u003clanguage\u003e/.build.ae` leaf\n  builds one native Aether generator binary. TypeScript and Python emit package\n  metadata; every target emits language files from `skir-ir.json`.\n- **Binding smoke leaves**: each `bindings/\u003clanguage\u003e/.build.ae` leaf generates\n  a fixture binding from `fixtures/greet/schema.ae`, builds it with the\n  matching aeb language SDK, and declares its toolchain with\n  `build.prereq(...)` for `aeb --prereqs` / remote-toolchain routing.\n- **Reference-only Node sources**: local `genrs/` clones can be used to compare\n  against the historical TypeScript generators, but they are ignored and not\n  part of this repository.\n- **aeb-native build/test targets**: `.build.ae` builds the CLI leaf and\n  `.tests.ae` runs Aeocha tests.\n\nLocal rough timing, not a benchmark: after the binary already exists,\n`bin/skir version` runs in about 5-6 ms on this machine. A first wrapper run that\nhas to rebuild the binary took about 0.54s.\n\n## Commands\n\n```sh\nbin/skir init\nbin/skir gen\nbin/skir format --ci\nbin/skir snapshot\nbin/skir version\n```\n\n`bin/skir` builds `aether/skir.ae` with `ae build` on demand and runs\n`build/skir-ae`.\n\n## Build And Test\n\n```sh\n/home/paul/scm/aeb/aeb .build.ae\n/home/paul/scm/aeb/aeb .tests.ae\n```\n\nThe root build target builds the native CLI leaf. Generator binaries are built\nthrough explicit leaves such as:\n\n```sh\n/home/paul/scm/aeb/aeb generators/typescript/.build.ae\n/home/paul/scm/aeb/aeb bindings/typescript/.build.ae\n/home/paul/scm/aeb/aeb --prereqs bindings/typescript/.build.ae\n```\n\nThe test target compiles and runs `tests/skir_aeocha.ae`, which exercises the\nschema DSL, the native CLI smoke path, generator handoff for every supported\nlanguage target, and binding smoke leaves for locally available toolchains.\n\n## Schema DSL\n\nSchemas are Aether programs. A minimal schema program looks like this:\n\n```aether\nimport skir_schema (document, structure, field, record_name, field_name,\n                    string_type)\n\nmain() {\n    document(\"skirout/skir-ir.json\") {\n        structure(record_name(\"Greeting\")) {\n            field(field_name(\"message\"), string_type())\n        }\n    }\n}\n```\n\nThe DSL emits schema IR JSON directly. That makes Aether the authoring language\nfor schemas, not a generator of `.skir` text. The benefit is that schemas can\nstill read declaratively while using normal Aether helpers, conditionals, loops,\nand module imports when useful.\n\n## Project Layout\n\n```text\nskir.json\nskir-src/\n  hello_world.ae\ngenerators/\n  cpp/\n  csharp/\n  dart/\n  gleam/\n  go/\n  java/\n  kotlin/\n  moonbit/\n  python/\n  rust/\n  swift/\n  typescript/\n  zig/\nbindings/\n  cpp/\n  csharp/\n  dart/\n  gleam/\n  go/\n  java/\n  kotlin/\n  moonbit/\n  python/\n  rust/\n  swift/\n  typescript/\n  zig/\nfixtures/\n  greet/\n```\n\n`skir gen` runs schema programs under `skir-src/**/*.ae` and writes:\n\n```text\n\u003coutDir\u003e/skir-ir.json\n```\n\nThe generated IR is the handoff point for language-specific binding generators.\n\n## Config\n\n```json\n{\n  \"generators\": [\n    { \"kind\": \"ir\", \"outDir\": \"./skirout\" },\n    {\n      \"kind\": \"external\",\n      \"outDir\": \"./bindings/typescript\",\n      \"command\": \"target/build/generators/typescript/bin/skir-typescript-gen\"\n    },\n    {\n      \"kind\": \"external\",\n      \"outDir\": \"./bindings/python\",\n      \"command\": \"target/build/generators/python/bin/skir-python-gen\"\n    }\n  ]\n}\n```\n\nWhen `command` is present, Skir runs:\n\n```text\n\u003ccommand\u003e \u003coutDir\u003e/skir-ir.json \u003coutDir\u003e\n```\n\nThat keeps the core native and lets each target-language generator evolve as a\nseparate executable. In this repo, `generators/\u003clanguage\u003e/.build.ae` builds the\ngenerator binary and `bindings/\u003clanguage\u003e/.build.ae` validates generated output\nwith the matching aeb SDK. The TypeScript generator emits `package.json`; the\nPython generator emits `pyproject.toml`.\n\n## Status\n\nThis is speculative and intentionally incomplete. The current goal is to show a\ncoherent Aether-native toolchain shape: Aether CLI, Aether schema DSL, aeb\ntargets, Aeocha tests, no Node runtime dependency, and no `.skir` text\nintermediate on the main path.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faether-lang-dev%2Fskirae","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faether-lang-dev%2Fskirae","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faether-lang-dev%2Fskirae/lists"}