{"id":35767347,"url":"https://github.com/eddmann/santa-lang-prancer","last_synced_at":"2026-06-10T09:31:45.460Z","repository":{"id":45499214,"uuid":"512858435","full_name":"eddmann/santa-lang-prancer","owner":"eddmann","description":"Prancer - TypeScript tree-walking interpreter for santa-lang with CLI, Web, and Lambda runtimes","archived":false,"fork":false,"pushed_at":"2026-04-13T16:07:27.000Z","size":2587,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T18:09:42.708Z","etag":null,"topics":["advent-of-code","aws-lambda","bun","cli","interpreter","nodejs","prancer","santa-lang","tree-walking-interpreter","typescript"],"latest_commit_sha":null,"homepage":"https://eddmann.com/santa-lang/reindeer/prancer/","language":"TypeScript","has_issues":false,"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/eddmann.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-07-11T17:56:31.000Z","updated_at":"2026-04-13T16:07:11.000Z","dependencies_parsed_at":"2024-12-18T13:53:49.590Z","dependency_job_id":null,"html_url":"https://github.com/eddmann/santa-lang-prancer","commit_stats":null,"previous_names":["eddmann/santa-lang-prancer"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/eddmann/santa-lang-prancer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fsanta-lang-prancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fsanta-lang-prancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fsanta-lang-prancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fsanta-lang-prancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddmann","download_url":"https://codeload.github.com/eddmann/santa-lang-prancer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fsanta-lang-prancer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34146871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"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":["advent-of-code","aws-lambda","bun","cli","interpreter","nodejs","prancer","santa-lang","tree-walking-interpreter","typescript"],"created_at":"2026-01-07T02:18:54.078Z","updated_at":"2026-06-10T09:31:45.208Z","avatar_url":"https://github.com/eddmann.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"https://eddmann.com/santa-lang/\"\u003e\u003cimg src=\"./docs/logo.png\" alt=\"santa-lang\" width=\"400px\" /\u003e\u003c/a\u003e\u003c/p\u003e\n\n# santa-lang Prancer\n\nTree-walking interpreter implementation of [santa-lang](https://eddmann.com/santa-lang/), written in TypeScript.\n\n## Overview\n\nsanta-lang is a functional, expression-oriented programming language designed for solving Advent of Code puzzles. This TypeScript implementation provides a tree-walking interpreter.\n\nKey language features:\n\n- First-class functions and closures with tail-call optimization\n- Pipeline and composition operators for expressive data flow\n- Persistent immutable data structures\n- Lazy sequences and infinite ranges\n- Pattern matching with guards\n- [Rich built-in function library](https://eddmann.com/santa-lang/builtins/)\n- AoC runner with automatic input fetching\n\nMultiple runtime targets are available: CLI and AWS Lambda.\n\n## Architecture\n\n```\nSource Code → Lexer → Parser → Evaluator → Result\n                                   ↓\n                           Environment (Scopes)\n```\n\n| Component       | Description                                          |\n| --------------- | ---------------------------------------------------- |\n| **Lexer**       | Tokenizes source into keywords, operators, literals  |\n| **Parser**      | Builds an Abstract Syntax Tree (AST)                 |\n| **Evaluator**   | Tree-walking interpreter that executes the AST       |\n| **Environment** | Manages variable bindings and closures across scopes |\n\nFor detailed implementation internals, see [ARCHITECTURE.md](docs/ARCHITECTURE.md).\n\n## Installation\n\n### Docker\n\n```bash\ndocker pull ghcr.io/eddmann/santa-lang-prancer:cli-latest\ndocker run --rm ghcr.io/eddmann/santa-lang-prancer:cli-latest --help\n```\n\n### Release Binaries\n\nDownload pre-built binaries from [GitHub Releases](https://github.com/eddmann/santa-lang-prancer/releases):\n\n| Platform              | Artifact                                       |\n| --------------------- | ---------------------------------------------- |\n| Linux (x86_64)        | `santa-lang-prancer-cli-{version}-linux-amd64` |\n| Linux (ARM64)         | `santa-lang-prancer-cli-{version}-linux-arm64` |\n| macOS (Intel)         | `santa-lang-prancer-cli-{version}-macos-amd64` |\n| macOS (Apple Silicon) | `santa-lang-prancer-cli-{version}-macos-arm64` |\n\n### AWS Lambda\n\nLambda layer available: `santa-lang-prancer-lambda-{version}.zip`\n\n## Usage\n\n```bash\n# Run a solution\nsanta-cli solution.santa\n\n# Run tests defined in a solution\nsanta-cli -t solution.santa\n\n# Evaluate inline code\nsanta-cli -e '1 + 2'\n\n# Interactive REPL\nsanta-cli -r\n```\n\n## Example\n\nHere's a complete Advent of Code solution (2015 Day 1):\n\n```santa\ninput: read(\"aoc://2015/1\")\n\npart_one: {\n  input |\u003e fold(0) |floor, direction| {\n    if direction == \"(\" { floor + 1 } else { floor - 1 };\n  }\n}\n\npart_two: {\n  zip(1.., input) |\u003e fold(0) |floor, [index, direction]| {\n    let next_floor = if direction == \"(\" { floor + 1 } else { floor - 1 };\n    if next_floor \u003c 0 { break index } else { next_floor };\n  }\n}\n\ntest: {\n  input: \"()())\"\n  part_one: -1\n  part_two: 5\n}\n```\n\nKey language features shown:\n\n- **`input:`** / **`part_one:`** / **`part_two:`** - AoC runner sections\n- **`|\u003e`** - Pipeline operator (thread value through functions)\n- **`fold`** - Reduce with early exit support via `break`\n- **`test:`** - Inline test cases with expected values\n\n## Building\n\nRequires [Bun](https://bun.sh/) or use Docker:\n\n```bash\n# Install dependencies\nmake lang/install\nmake cli/install\n\n# Run tests\nmake lang/test\nmake cli/test\n\n# Build CLI binaries\nmake cli/build\n\n# Build web application\nmake web/build\n\n# Build Lambda layer\nmake lambda/build\n```\n\n## Development\n\nRun `make help` to see all available targets:\n\n```bash\nmake help          # Show all targets\nmake shell         # Interactive shell in Docker build environment\nmake lang/test     # Run language tests\nmake cli/test      # Run CLI tests\nmake cli/build     # Build CLI binaries\nmake web/build     # Build web application\nmake lambda/build  # Build Lambda layer\n```\n\n## Project Structure\n\n```\n├── src/\n│   ├── lang/              # Core language library\n│   │   ├── lexer/         # Tokenization\n│   │   ├── parser/        # AST construction\n│   │   ├── evaluator/     # Tree-walking interpreter\n│   │   └── runner/        # AoC runner support\n│   ├── cli/               # Command-line interface\n│   ├── web/               # Web application (Next.js)\n│   └── lambda/            # AWS Lambda runtime\n└── examples/              # Example AoC solutions\n```\n\n## Other Reindeer\n\nThe language has been implemented multiple times to explore different execution models and technologies.\n\n| Codename | Type | Language |\n|----------|------|----------|\n| [Comet](https://github.com/eddmann/santa-lang-comet) | Tree-walking interpreter | Rust |\n| [Blitzen](https://github.com/eddmann/santa-lang-blitzen) | Bytecode VM | Rust |\n| [Dasher](https://github.com/eddmann/santa-lang-dasher) | LLVM native compiler | Rust |\n| [Donner](https://github.com/eddmann/santa-lang-donner) | JVM bytecode compiler | Kotlin |\n| [Vixen](https://github.com/eddmann/santa-lang-vixen) | Embedded bytecode VM | C |\n| [Prancer](https://github.com/eddmann/santa-lang-prancer) | Tree-walking interpreter | TypeScript |\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fsanta-lang-prancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddmann%2Fsanta-lang-prancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fsanta-lang-prancer/lists"}