{"id":38779085,"url":"https://github.com/rolandzwaga/eligian","last_synced_at":"2026-01-17T12:21:08.626Z","repository":{"id":318908692,"uuid":"1076281358","full_name":"rolandzwaga/eligian","owner":"rolandzwaga","description":"A DSL for Eligius presentations","archived":false,"fork":false,"pushed_at":"2025-12-19T15:53:56.000Z","size":3358,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-21T22:51:48.782Z","etag":null,"topics":["dsl","language","programming"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/rolandzwaga.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2025-10-14T16:34:53.000Z","updated_at":"2025-12-19T15:54:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rolandzwaga/eligian","commit_stats":null,"previous_names":["rolandzwaga/eligian"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rolandzwaga/eligian","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rolandzwaga%2Feligian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rolandzwaga%2Feligian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rolandzwaga%2Feligian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rolandzwaga%2Feligian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rolandzwaga","download_url":"https://codeload.github.com/rolandzwaga/eligian/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rolandzwaga%2Feligian/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28508464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T11:50:55.898Z","status":"ssl_error","status_checked_at":"2026-01-17T11:50:55.569Z","response_time":85,"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":["dsl","language","programming"],"created_at":"2026-01-17T12:21:05.817Z","updated_at":"2026-01-17T12:21:08.601Z","avatar_url":"https://github.com/rolandzwaga.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eligian: DSL \u0026 Compiler for Eligius Story Telling Engine\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-20.x-green.svg)](https://nodejs.org/)\n\n**Eligian** is a domain-specific language (DSL) and compiler for the [Eligius Story Telling Engine](https://github.com/rolandzwaga/eligius). It dramatically reduces the verbosity of Eligius JSON configurations by 70-80% while providing type safety, IDE support, and a more intuitive syntax for creating timeline-based interactive presentations.\n\nFor a full current spec of the language check [this](./LANGUAGE_SPEC.md)\n\n\u003e **📝 File Extension**: Eligian programs use the **`.eligian`** file extension (e.g., `my-timeline.eligian`).\n\n**NOTE:** This is very much a work in progress still, so the language is in flux, half-ready and far from suitable for anything production level.\n\n## 🎯 What is Eligius?\n\n[Eligius](https://github.com/rolandzwaga/eligius) is a JavaScript engine that triggers arbitrary functionality according to a timeline provider (video, audio, requestAnimationFrame, etc.). It's designed for:\n\n- **Video annotations**: Overlay text, graphics, or interactive elements synchronized with video playback\n- **Presentation software**: Create slide decks with timed transitions and animations\n- **Interactive infographics**: Build data visualizations that unfold over time\n- **Audio-driven experiences**: Synchronize visuals with audio narration or music\n\nEligius is **not** a game or animation engine—it's a **Story Telling Engine** focused on narratives structured around time.\n\n## 🚨 The Problem: JSON Verbosity\n\nEligius is configured entirely through JSON, which becomes unwieldy for complex presentations. Eligian solves this with a concise, readable syntax.\n\n### Example: Before \u0026 After\n\n**Before (Eligius JSON)** - verbose and error-prone:\n```json\n{\n  \"actions\": [\n    {\n      \"name\": \"fadeIn\",\n      \"startOperations\": [\n        {\n          \"systemName\": \"selectElement\",\n          \"operationData\": {\n            \"selector\": \"parameter:selector\"\n          }\n        },\n        {\n          \"systemName\": \"animate\",\n          \"operationData\": {\n            \"animationProperties\": {\n              \"opacity\": 1\n            },\n            \"animationDuration\": \"parameter:duration\"\n          }\n        }\n      ],\n      \"endOperations\": []\n    }\n  ]\n}\n```\n\n**After (Eligian DSL)** - clean and intuitive:\n```eligian\naction fadeIn(selector, duration) [\n  selectElement(selector)\n  animate({opacity: 1}, duration)\n]\n```\n\n**70-80% less code**, with the same functionality!\n\n## ✨ Key Features\n\n### 🎨 Concise, Readable Syntax\n- **Action definitions**: Define reusable operations with parameters and JSDoc documentation\n- **Timeline operations**: 45+ built-in operations from Eligius (DOM, animation, data, events, etc.)\n- **Custom actions**: Call your own defined actions alongside built-in operations\n- **Control flow**: `if/else` conditionals, `for` loops, `break/continue` statements\n- **Variable references**: Access loop variables (`@@item`), system properties (`@@currentItem`, `@@loopIndex`)\n- **Asset imports**: CSS, HTML, and library file imports with validation\n- **Event actions**: Runtime event handlers with compile-time validation\n\n### 🔒 Type-Safe Compilation\n- **Compile-time validation**: Catch errors before runtime\n- **Type checking**: Optional type annotations with inference (TypeScript-inspired)\n- **Semantic validation**: Duplicate detection, scope checking, constraint validation\n- **Source location tracking**: Error messages show exact line/column with helpful hints\n\n### 🚀 IDE Support via VS Code Extension\n- **Syntax highlighting**: Keywords, identifiers, literals beautifully colored\n- **Code completion**:\n  - ✅ Operation names with descriptions and parameter info\n  - ✅ Custom action names with signatures\n  - ✅ Event action skeleton generation (43 Eligius events)\n  - ✅ Loop variables and system properties\n  - ✅ JSDoc template auto-generation (`/**` + Enter)\n  - Context-aware filtering (only valid items at cursor position)\n- **Live preview**: Compile and preview timelines in real-time with CSS hot-reload\n- **Real-time diagnostics**: Error detection as you type\n- **CSS validation**: Class name validation with \"Did you mean?\" suggestions\n- **Hover documentation**: View JSDoc, CSS rule locations, and type information\n\n### ⚡ Powerful Compiler\n- Built with **Langium** (language workbench) and **TypeScript**\n- **Multi-stage pipeline**: Parse → Validate → Type Check → Transform → Optimize → Emit\n- **Metadata generation**: Auto-generates operation registry from Eligius source\n- **Optimization**: Constant folding, dead code elimination\n- **Source maps**: Track DSL locations through to JSON output\n\n### 🧪 Comprehensive Testing\n- **1,758 tests passing** across all packages\n- Grammar parsing tests\n- Semantic validation tests\n- Type system tests (Typir integration)\n- Compiler pipeline tests\n- Code completion tests\n- CSS validation tests\n- JSDoc documentation tests\n- 81.72% code coverage\n\n## 📦 Project Structure\n\nEligian is organized as a **monorepo** with three packages:\n\n```\npackages/\n├── language/                 # Langium grammar and language server\n│   ├── src/\n│   │   ├── eligian.langium          # DSL grammar definition\n│   │   ├── eligian-validator.ts     # Semantic validation rules\n│   │   ├── eligian-completion-provider.ts  # Code completion\n│   │   ├── type-system-typir/       # Typir-based type system\n│   │   ├── compiler/                # AST → JSON transformer\n│   │   ├── completion/              # Completion modules\n│   │   ├── css/                     # CSS validation and hover\n│   │   ├── jsdoc/                   # JSDoc parsing and generation\n│   │   └── __tests__/               # Comprehensive test suites\n│   └── package.json\n│\n├── cli/                      # Command-line compiler\n│   ├── src/\n│   │   └── main.ts\n│   └── package.json\n│\n└── extension/                # VS Code extension\n    ├── src/\n    │   ├── extension/               # Extension entry point\n    │   │   ├── preview/             # Live preview manager\n    │   │   └── commands/            # Extension commands\n    │   └── language/                # Language server entry point\n    └── package.json\n```\n\n## 🏗️ Architecture\n\n### Technology Stack\n\n- **Language**: TypeScript (compiled to JavaScript for Node.js runtime)\n- **Grammar Framework**: [Langium](https://langium.org/) - TypeScript-based language workbench\n- **Build Tools**: esbuild (fast bundling), Vitest (testing), Biome (linting/formatting)\n- **Target Platform**: Node.js 20+ (CLI), VS Code 1.80+ (extension)\n\n### Compilation Pipeline\n\nThe compiler uses a **six-stage pipeline**:\n\n```\nDSL Source (.eligian)\n    ↓\n[1] Parse (Langium) → AST\n    ↓\n[2] Validate → Validated AST (semantic checks)\n    ↓\n[3] Type Check → Typed AST (optional type annotations + inference)\n    ↓\n[4] Transform → Eligius Configuration Object\n    ↓\n[5] Optimize → Optimized Configuration (constant folding, etc.)\n    ↓\n[6] Emit → Eligius JSON\n```\n\nEach stage has comprehensive error handling with source location tracking.\n\n### Design Principles\n\nFollowing our [project constitution](.specify/memory/constitution.md):\n\n1. **Simplicity First**: Clear, well-documented code over clever abstractions\n2. **Comprehensive Testing**: 379 tests covering all components\n3. **Functional Programming**: Immutable external API, internal mutation allowed for performance\n4. **Type Safety**: Leverage TypeScript's type system\n5. **Developer Experience**: Clear error messages with source locations and actionable hints\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- **Node.js**: v20 or later (LTS recommended)\n- **pnpm**: v8 or later (package manager)\n- **VS Code**: v1.80 or later (for extension)\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/rolandzwaga/eligian.git\ncd eligian\n\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm run build\n\n# Run tests\npnpm test\n```\n\n### Your First Eligian Program\n\nCreate `example.eligian`:\n\n```eligian\n// Import CSS styles\nstyles \"./styles.css\"\n\n// Define a reusable fade-in action\naction fadeIn(selector: string, duration: number) [\n  selectElement(selector)\n  animate({opacity: 1}, duration)\n]\n\n// Define a timeline with events\ntimeline \"My First Timeline\" in \"#app\" using raf {\n\n  // Event at 0 seconds: fade in the title\n  at 0s..2s [\n    fadeIn(\"#title\", 1000)\n  ] [\n    selectElement(\"#title\")\n    animate({opacity: 0}, 500)\n  ]\n\n  // Event at 2 seconds: show multiple items with a loop\n  at 2s..5s for (item in [\"#item1\", \"#item2\", \"#item3\"]) {\n    fadeIn(@@item, 500)\n    wait(200)\n  }\n\n  // Event at 5 seconds: conditional logic\n  at 5s..5s if (true) {\n    log(\"Timeline complete!\")\n  }\n}\n```\n\n### Preview in VS Code\n\nThe easiest way to see your Eligian program in action:\n\n```bash\n# 1. Open example.eligian in VS Code\n# 2. Press Ctrl+Shift+P → \"Eligian: Start Preview\"\n# 3. Edit your file - preview updates in real-time\n```\n\n### Compile to Eligius JSON (CLI)\n\n```bash\n# CLI is in development - for now, use the VS Code extension preview\n# The compiled JSON is generated automatically when you use the preview\n```\n\n## 📚 DSL Syntax Overview\n\n### Action Definitions\n\nDefine reusable actions with parameters:\n\n```eligian\naction fadeIn(selector, duration) [\n  selectElement(selector)\n  animate({opacity: 1}, duration)\n]\n\n// Call the action\nfadeIn(\"#title\", 500)\n```\n\n### Type Annotations (Optional)\n\nAdd type hints for better IDE support:\n\n```eligian\naction fadeIn(selector: string, duration: number) [\n  selectElement(selector)\n  animate({opacity: 1}, duration)\n]\n```\n\nTypes are **optional** - the compiler infers types from operation usage if not specified.\n\n### Control Flow\n\n**If/Else Conditionals**:\n```eligian\naction processItem(item) [\n  if (@@loopIndex === 0) {\n    selectElement(item)\n  } else {\n    animate(item, {opacity: 0.5})\n  }\n]\n```\n\n**For Loops**:\n```eligian\naction animateAll(items) [\n  for (item in items) {\n    fadeIn(@@item, 500)  // @@item is the loop variable\n  }\n]\n```\n\n**Break/Continue**:\n```eligian\nfor (item in items) {\n  if (@@currentItem.skip) {\n    continue  // Skip to next iteration\n  }\n  if (@@currentItem.stop) {\n    break  // Exit loop\n  }\n  processItem(@@currentItem)\n}\n```\n\n### Variable References\n\nAccess system properties with `@@` prefix:\n\n- `@@item` - Current loop variable (alias for `@@currentItem` in loops)\n- `@@currentItem` - Current item in a loop\n- `@@loopIndex` - Current loop index (0-based)\n- `@@loopLength` - Total loop iterations\n\n### Built-in Operations\n\n45+ operations from Eligius, including:\n\n**DOM Operations**:\n```eligian\nselectElement(selector)\ncreateElement(tagName, attributes)\nremoveElement(selector)\n```\n\n**Animation**:\n```eligian\nanimate(properties, duration)\nsetStyle(selector, property, value)\n```\n\n**Data Management**:\n```eligian\nsetData(key, value)\ngetData(key)\nmergeData(key, value)\n```\n\n**Control Flow**:\n```eligian\nrunAction(actionName, ...args)\ndelay(milliseconds)\n```\n\nSee the [complete list of Eligius operations](https://github.com/rolandzwaga/eligius/tree/main/src/operation#operations) in the Eligius repository.\n\n### Comments\n\n```eligian\n// Single-line comment\n\n/* Multi-line\n   comment */\n```\n\n## 🎨 VS Code Extension\n\n### Features\n\n- ✅ **Syntax Highlighting**: Keywords, identifiers, literals\n- ✅ **Code Completion**:\n  - Operation names (45+ operations) with descriptions\n  - Custom action names with parameter signatures and JSDoc\n  - Event action skeletons (43 Eligius events with auto-generated handlers)\n  - JSDoc template generation (`/**` + Enter above actions)\n  - Loop variables (`@@item`, `@@currentItem`, etc.)\n  - Smart sorting (most relevant items first)\n- ✅ **Live Preview**: Compile and preview timelines in real-time with CSS hot-reload\n- ✅ **Real-time Validation**: Error detection as you type with helpful hints\n- ✅ **Hover Information**:\n  - JSDoc documentation on action hover\n  - CSS class/ID source locations with rule snippets\n  - Type information from Typir type system\n- ✅ **CSS Support**:\n  - Import CSS files with `styles \"./file.css\"`\n  - Real-time class name validation with \"Did you mean?\" suggestions\n  - Hot-reload CSS changes without restarting timeline\n- ⏳ **Quick Fixes**: Automatic corrections (planned)\n\n### Installation (Development)\n\n1. Open the project in VS Code\n2. Press **F5** to launch Extension Development Host\n3. Create a `.eligian` file in the development window\n4. Start typing to see code completion!\n\n### Usage\n\n**Trigger Code Completion**:\n- Type operation name: `sel` → suggests `selectElement`\n- Type custom action: Start typing action name → suggests defined actions with JSDoc\n- Type `on event ` → triggers event action skeleton completion (43 Eligius events)\n- Type `/**` above an action + Enter → generates JSDoc template\n- Type `@@` → suggests loop variables and system properties\n- Press `Ctrl+Space` to manually trigger\n\n**CSS Support**:\n- Add `styles \"./styles.css\"` to import CSS files\n- Edit CSS file → preview hot-reloads automatically (no timeline restart)\n- Typo in class name? → Get \"Did you mean?\" suggestions with Levenshtein distance\n\n**Compile \u0026 Preview**:\n- Press `Ctrl+Shift+P` → \"Eligian: Start Preview\"\n- Edit your `.eligian` file - preview updates in real-time\n- Edit imported CSS files - styles hot-reload in preview\n- Compilation errors shown in preview panel with source locations\n\n## 🧪 Development\n\n### Setup\n\n```bash\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm run build\n\n# Run tests\npnpm test\n\n# Watch mode (rebuild on changes)\npnpm run watch\n```\n\n### Project Scripts\n\n```bash\npnpm run build                    # Build all packages\npnpm run clean                    # Remove build artifacts\npnpm test                         # Run all tests\npnpm run check                    # Biome format \u0026 lint\npnpm run langium:generate         # Generate Langium AST types\npnpm run generate:metadata        # Generate operation metadata\npnpm run generate:registry        # Generate operation registry\n```\n\n### Testing\n\n```bash\n# Run all tests\npnpm test\n\n# Run specific package tests\ncd packages/language \u0026\u0026 pnpm test\n\n# Run specific test file\ncd packages/language \u0026\u0026 pnpm test completion.spec.ts\n\n# Watch mode\npnpm test -- --watch\n\n# Coverage report\npnpm test -- --coverage\n```\n\n### Code Quality\n\nThis project uses **Biome** for formatting and linting:\n\n```bash\n# Format and lint (auto-fix)\npnpm run check\n\n# Lint only\npnpm run lint\n\n# CI check (no modifications)\npnpm run ci\n```\n\nAll code changes must pass Biome checks before commit (Constitution Principle XI).\n\n## 📖 Documentation\n\n- **[Project Constitution](.specify/memory/constitution.md)**: Core principles and guidelines\n- **[DSL Grammar](packages/language/src/eligian.langium)**: Complete grammar definition\n- **[Language Specification](LANGUAGE_SPEC.md)**: Full language specification\n- **[Type System (Typir)](packages/language/src/type-system-typir/README.md)**: Type checking and inference\n- **[Completion System](packages/language/src/completion/)**: Code completion modules\n- **[CSS Validation](specs/013-css-class-and/)**: CSS class validation with Levenshtein suggestions\n- **[JSDoc Support](specs/020-jsdoc-style-comments/)**: JSDoc template generation and hover\n- **[Feature Specs](specs/)**: Feature specifications and implementation plans\n\n### Recent Feature Specs\n\n- **[JSDoc Documentation](specs/020-jsdoc-style-comments/)**: JSDoc template generation and hover (complete)\n- **[Typir Type System](specs/021-type-system-typir/)**: Typir-based type checking (complete)\n- **[CSS Validation](specs/013-css-class-and/)**: CSS class validation with hot-reload (complete)\n- **[CSS Live Reload](specs/011-preview-css-support/)**: CSS hot-reload in preview (complete)\n- **[Event Actions](specs/028-event-actions-the/)**: Runtime event handlers (complete)\n\n## 🗺️ Project Status\n\n### Completed Features ✅\n\n- ✅ **Core Language**: Grammar, parser, AST with Langium\n- ✅ **Validation**: Semantic validation, scope checking, duplicate detection\n- ✅ **Type System (Typir)**: Type annotations, type inference, type checking with Typir\n- ✅ **Compiler**: AST → JSON transformation with constant folding optimization\n- ✅ **Control Flow**: If/else, for loops, break/continue keywords\n- ✅ **Code Completion**: Operations, actions, event skeletons, JSDoc templates\n- ✅ **Live Preview**: Real-time compilation and preview with CSS hot-reload\n- ✅ **CSS Support**: Import CSS files, class validation, hot-reload\n- ✅ **JSDoc**: Template auto-generation and hover documentation\n- ✅ **Event Actions**: Runtime event handlers with validation (43 events)\n- ✅ **Library Imports**: Import actions from `.eligian` library files\n- ✅ **Asset Loading**: CSS and HTML file imports with validation\n- ✅ **Metadata Generation**: Auto-generated operation registry from Eligius source\n\n### In Progress 🚧\n\n- 🚧 **CLI Compiler**: Command-line interface (architecture ready, implementation pending)\n\n### Planned ⏳\n\n- ⏳ **Source Maps**: Debug support with source locations\n- ⏳ **Package Publishing**: NPM package and VS Code marketplace\n- ⏳ **Performance Profiling**: Optimize compilation and validation performance\n\n**Test Coverage**: 1,758 tests passing (81.72% coverage)\n\n## 🎯 Architecture Highlights\n\n### Loop Control Syntactic Sugar\n\nClean `break` and `continue` keywords that compile to Eligius operations:\n\n```eligian\nfor (item in items) {\n  if (@@currentItem.skip) {\n    continue  // → continueForEach()\n  }\n  if (@@currentItem.stop) {\n    break  // → breakForEach()\n  }\n}\n```\n\nSee [examples/break-continue-demo.eligian](examples/break-continue-demo.eligian) for usage examples.\n\n### Type System\n\nOptional TypeScript-inspired type system with inference:\n\n```eligian\n// Type annotations (optional)\naction fadeIn(selector: string, duration: number) [\n  selectElement(selector)  // Type-checked!\n  animate({opacity: 1}, duration)\n]\n\n// Type inference (no annotations needed)\naction fadeIn(selector, duration) [\n  selectElement(selector)  // Infers selector: string\n  animate({opacity: 1}, duration)  // Infers duration: number\n]\n```\n\nSee [Type System README](packages/language/src/type-system/README.md) for details.\n\n### Code Completion\n\nSmart, context-aware completions with intelligent sorting:\n\n1. **Loop variables first**: `@@item` (most relevant in loops)\n2. **System properties**: `@@currentItem`, `@@loopIndex`\n3. **Action parameters**: Available parameters in current scope\n4. **Literals last**: `true`, `false`, `null`\n\nOperations show full documentation including:\n- Description from JSDoc\n- Parameter names and types\n- Dependencies and outputs\n- Usage examples\n\nSee [Code Completion Spec](specs/002-code-completion-i/) for implementation details.\n\n## 🤝 Related Projects\n\n- **[Eligius](https://github.com/rolandzwaga/eligius)**: The Story Telling Engine this DSL targets\n- **[Langium](https://langium.org/)**: Language workbench used for grammar and language server\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## 👥 Contributors\n\n- **Roland Zwaga** - Creator of Eligius and Eligian DSL\n- **Claude Code** - AI pair programmer assisting with implementation\n\n## 🙏 Acknowledgments\n\n- **TypeFox** for creating Langium\n- The TypeScript and Node.js communities\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/rolandzwaga/eligian/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/rolandzwaga/eligian/discussions)\n- **Eligius Documentation**: [Eligius Docs](https://github.com/rolandzwaga/eligius/tree/main/docs)\n\n---\n\n**Built with ❤️ using TypeScript and Langium**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frolandzwaga%2Feligian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frolandzwaga%2Feligian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frolandzwaga%2Feligian/lists"}