{"id":13456883,"url":"https://github.com/xtclang/xvm","last_synced_at":"2026-03-09T12:09:23.978Z","repository":{"id":38005233,"uuid":"196110471","full_name":"xtclang/xvm","owner":"xtclang","description":"Ecstasy and XVM","archived":false,"fork":false,"pushed_at":"2026-03-03T17:05:31.000Z","size":109358,"stargazers_count":210,"open_issues_count":55,"forks_count":22,"subscribers_count":13,"default_branch":"master","last_synced_at":"2026-03-03T21:07:02.443Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xtclang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2019-07-10T01:46:15.000Z","updated_at":"2026-03-03T16:53:17.000Z","dependencies_parsed_at":"2023-10-01T18:46:52.965Z","dependency_job_id":"eb3082dd-924f-4d37-9bc2-0c344b5723f4","html_url":"https://github.com/xtclang/xvm","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/xtclang/xvm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtclang%2Fxvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtclang%2Fxvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtclang%2Fxvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtclang%2Fxvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xtclang","download_url":"https://codeload.github.com/xtclang/xvm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtclang%2Fxvm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30294909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T11:12:22.024Z","status":"ssl_error","status_checked_at":"2026-03-09T11:10:54.577Z","response_time":61,"last_error":"SSL_read: 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":[],"created_at":"2024-07-31T08:01:29.528Z","updated_at":"2026-03-09T12:09:23.959Z","avatar_url":"https://github.com/xtclang.png","language":"Java","readme":"# Welcome to Ecstasy! #\n\nThis is the public repository for the Ecstasy language ([xtclang.org](http://xtclang.org/)) and the\nEcstasy virtual machine (XVM) project.\n\n## Quick Start\n\n**Want to try Ecstasy right now? Here's the fastest way:**\n\n### Option 1: Homebrew (macOS/Linux) - Recommended\n```bash\n# Install Homebrew if you don't have it: https://brew.sh/\nbrew tap xtclang/xvm \u0026\u0026 brew install xdk-latest\n\n# Create your first Ecstasy program\necho 'module HelloWorld { void run() { @Inject Console console; console.print(\"Hello, World!\"); } }' \u003e HelloWorld.x\n\n# Compile and run it\nxtc build HelloWorld.x  // NOTE: Legacy shortcut \"xcc\" is the same as \"xtc build\"\nxtc run HelloWorld      // NOTE: Legacy shortcut \"xec\" is the same as \"xtc build\"\n```\n\n### Option 2: Docker - Works everywhere\n```bash\n# Create your first program\necho 'module HelloWorld { void run() { @Inject Console console; console.print(\"Hello, World!\"); } }' \u003e HelloWorld.x\n\n# Compile and run using Docker\ndocker run --rm -v $(pwd):/workspace ghcr.io/xtclang/xvm:latest xtc build /workspace/HelloWorld.x\ndocker run --rm -v $(pwd):/workspace ghcr.io/xtclang/xvm:latest xtc run /workspace/HelloWorld\n```\n\n### Option 3: Build from source\n```bash\ngit clone https://github.com/xtclang/xvm.git\ncd xvm\n./gradlew xdk:installDist\nexport PATH=$PWD/xdk/build/install/xdk/bin:$PATH\n\n# Now you can use xtc commands\n```\n\n**Next Steps:**\n- [Learn Ecstasy Language Basics](https://github.com/xtclang/xvm/wiki)\n- [XDK Development Kit Guide](#installation-options) (below)\n- [Docker Development Guide](docker/README.md)\n- [GitHub Actions \u0026 CI Documentation](.github/GITHUB_WORKFLOWS.md)\n\n---\n\n## Documentation Navigation\n\nThis repository contains comprehensive documentation organized hierarchically:\n\n### Core Documentation\n- **[Main README](README.md)** (this file) - Platform overview, quickstart, and XDK installation\n- **[Contributing Guide](CONTRIBUTING.md)** - How to contribute to the Ecstasy project\n- **[Code of Conduct](CODE_OF_CONDUCT.md)** - Community guidelines and expectations\n\n### Build \u0026 Development\n- **[Building XTC From Source](doc/build.md)** - Build tasks, distributions, clean semantics, debugging, versioning, and publishing\n- **[Git Workflow](doc/git-workflow.md)** - Rebase-only linear history, branch workflow, and GitHub branch protection\n- **[Gradle Fundamentals](doc/assumed-gradle-knowledge.md)** - Essential Gradle concepts for developers new to Gradle\n\n### Tools \u0026 CLI\n- **[XTC CLI Reference](doc/xtc-cli.md)** - Command-line tools: `xtc init`, `xtc build`, `xtc run`, `xtc test`\n- **[Docker Guide](docker/README.md)** - Container development, build instructions, and CI integration\n- **[GitHub Actions](/.github/GITHUB_WORKFLOWS.md)** - CI/CD pipeline, workflows, and automation documentation\n\n### Language Documentation\n- **[Ecstasy Language Wiki](https://github.com/xtclang/xvm/wiki)** - Language specification, tutorials, and examples\n- **[XTC Language Website](http://xtclang.org/)** - Official language website and resources\n- **[Core Documentation](doc/DOCUMENTATION.md)** - Language specification files, BNF grammar, and VM instruction set\n\n---\n\n## What is Ecstasy?\n\n\u003ctable style=\"border-collapse: collapse; border: none; border-spacing: 0; padding: 0;\"\u003e\n\u003ctr style=\"border: none;\"\u003e\u003ctd style=\"border: none; padding: 0;\"\u003e\n\n![Ecstasy](./doc/logo/x.jpg \"The Ecstasy Project\")\n\n\u003c/td\u003e\u003ctd style=\"border: none; padding: 0;\"\u003e\n\nEcstasy is an application programming language, designed to enable modular development and long-term\nsustainability of secure, \"serverless cloud\" applications. Ecstasy leverages a reactive,\nevent-driven, service- and fiber-based execution model within a container-based architecture to\nachieve energy-efficient, high-density, autonomically-managed deployments. In a nut-shell, Ecstasy\nis designed to be secure, easy to deploy, easy to monitor, easy to manage, and easy to evolve.\n\n\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\nThe Ecstasy project includes: a development kit (the Ecstasy development kit, the \"xdk\") that is\nproduced from this git repo; a programming language specification; a core set of runtime modules\n(libraries); a portable, type-safe, and verifiable Intermediate Representation (IR); a\nproof-of-concept interpreted runtime; a JIT compiler targeting the JVM (in development); and a\ntool-chain with both Java and Ecstasy implementations being actively developed.\n\nThe Ecstasy language supports first class modules, including versioning and conditionality; first\nclass functions, including currying and partial application; type-safe object orientation,\nincluding support for auto-narrowing types, type-safe covariance, mixins, and duck-typed interfaces;\ntype inference; first class deeply-immutable types; first class asynchronous services, including\nboth automatic `async/await`-style and promises-based (`@Future`) programming models; and first\nclass software containers, including resource injection and transitively-closed, immutable type\nsystems. _And much, much more._\n\nRead more at: [https://github.com/xtclang/xvm/wiki](https://github.com/xtclang/xvm/wiki)\n\nFind out more about [how you can contribute to Ecstasy](CONTRIBUTING.md).\n\nAnd please respect our [code of conduct](CODE_OF_CONDUCT.md) and each other.\n\n## Installation Options\n\n### Package Managers (Recommended for Development)\n\n**Homebrew (macOS/Linux) - CI Snapshots:**\n\nHomebrew provides continuously updated `xdk-latest` builds from our CI pipeline:\n\n```bash\n# Install Homebrew if you have not already done so: https://brew.sh/\nbrew tap xtclang/xvm \u0026\u0026 brew install xdk-latest\n\n# Upgrade to latest CI build (choose one):\nbrew update \u0026\u0026 brew upgrade xdk-latest  # Standard approach\nbrew reinstall xdk-latest               # Alternative: always gets latest\n```\n\nNote: Homebrew delivers CI snapshots for development. Each snapshot gets a unique timestamp-based\nversion (e.g., `0.4.4-SNAPSHOT.20250831181403`). You must run `brew update` first to refresh the\ntap, then `brew upgrade xdk-latest` will detect the newer build. Alternatively, `brew reinstall`\nalways installs the latest snapshot. Stable releases will be available through other package managers.\n\n#### How Snapshot Releases Work\n\nOur CI system maintains a single, continuously updated snapshot release:\n\n- **Release Name**: `XDK Snapshot Builds`\n- **GitHub Tag**: `xdk-snapshots`\n- **Download URL**: `https://github.com/xtclang/xvm/releases/download/xdk-snapshots/xdk-0.4.4-SNAPSHOT.zip`\n\n**Automatic Overwrite Process:**\n1. Every push to `master` triggers the CI pipeline\n2. The existing `xdk-snapshots` release is **completely deleted**\n3. A new release with the same tag is created with the latest build\n4. The Homebrew formula gets dynamic versioning: `0.4.4-SNAPSHOT.{timestamp}`\n\nThis ensures:\n- Only **one** snapshot release exists (never accumulates old releases)\n- Download URL remains consistent for automation\n- `brew update` works correctly due to timestamp-qualified versioning\n- Always reflects the latest master commit\n\n#### Snapshots vs. Stable Releases\n\n**Current Status**: The XDK is currently in active development using snapshot versioning (e.g., `0.4.4-SNAPSHOT`).\n\n**Snapshots in Maven Ecosystem**:\n- **Snapshots** (`*-SNAPSHOT`) are development builds that can change frequently\n- Maven/Gradle automatically checks for newer snapshot versions during builds\n- Intended for active development, testing, and CI/CD pipelines\n- Not suitable for production use due to changing behavior\n\n**Stable Releases** (coming soon):\n- **Fixed versions** (e.g., `0.5.0`, `1.0.0`) are immutable once published\n- Provide stability guarantees and semantic versioning\n- Cached permanently by build systems - no automatic updates\n- Suitable for production applications\n\n**Next Release Timeline**: We will publish the next non-snapshot version of the XDK as soon as all build infrastructure updates are complete. This will mark the transition from active development snapshots to stable, production-ready releases with proper semantic versioning.\n\n#### GitHub Workflows and Automation\n\nOur project uses comprehensive GitHub workflows for continuous integration, dependency management, and automated releases.\n\n**For complete documentation of our CI/CD pipeline, GitHub Actions, custom actions, manual workflow controls, Dependabot configuration, and all automation details, see:**\n\n**[.github/GITHUB_WORKFLOWS.md - XVM GitHub Workflows and Actions](.github/GITHUB_WORKFLOWS.md)**\n\nThis includes:\n- **CI/CD Pipeline**: Multi-platform builds, testing, Docker images, and publishing\n- **Dependabot**: Automated dependency updates for Gradle, GitHub Actions, and Docker\n- **Manual Controls**: Workflow dispatch options and monitoring commands\n- **Custom Actions**: Reusable automation components\n- **Future Improvements**: Planned enhancements and simplifications\n\n**Quick CI Overview**:\n1. **Build \u0026 Test**: Multi-platform builds (Ubuntu + Windows) with comprehensive testing\n2. **Snapshot Release**: Automated GitHub releases with XDK distribution packages\n3. **Homebrew Integration**: Automatic updates to [xtclang/homebrew-xvm](https://github.com/xtclang/homebrew-xvm) tap\n4. **Docker Images**: Multi-architecture container builds published to `ghcr.io/xtclang/xvm`\n\n**Homebrew Configuration**:\n- **Target Branch**: Controlled by `HOMEBREW_TAP_BRANCH` repository variable (currently: `lagergren/brew-tap`)\n- **Auto-generated Formula**: Version, SHA256, and dependencies computed automatically from build\n\n*Last updated: 2025-08-25*\n\n**Windows:**\n\n* Visit [http://xtclang.org/xdk-latest.html](http://xtclang.org/xdk-latest.html) for Windows installer\n\n### Docker Container\n\nUse the official XDK Docker image for development or CI:\n\n```bash\n# Run XDK commands in container\ndocker run --rm -v $(pwd):/workspace ghcr.io/xtclang/xvm:latest xtc build /workspace/MyModule.x\ndocker run --rm -v $(pwd):/workspace ghcr.io/xtclang/xvm:latest xtc run /workspace/MyModule\n\n# Interactive development shell\ndocker run -it --rm -v $(pwd):/workspace ghcr.io/xtclang/xvm:latest bash\n```\n\n**Multi-platform Support**: The XDK Docker image supports both `linux/amd64` and `linux/arm64` architectures, running natively on macOS (Intel/Apple Silicon), Windows (via WSL2), and Linux systems.\n\n**Development Container Support**: This project includes a devcontainer configuration at `.devcontainer/devcontainer.json` for VSCode development.\n\n**For complete Docker documentation, build instructions, CI integration, and advanced usage, see:**\n**[docker/README.md](docker/README.md)**\n\n### XTC Command-Line Tools\n\nThe XDK provides the `xtc` unified command-line tool for working with Ecstasy projects:\n\n| Command | Description |\n|---------|-------------|\n| `xtc init` | Create a new XTC project with standard structure |\n| `xtc build` | Compile Ecstasy source files (legacy alias: `xcc`) |\n| `xtc run` | Execute an Ecstasy module (legacy alias: `xec`) |\n| `xtc test` | Run tests in an Ecstasy module using xunit |\n\nFor full CLI documentation, see the **[XTC CLI Reference](doc/xtc-cli.md)**.\n\n### Building from Source\n\nPrerequisites:\n* **Bootstrap JVM**: Any Java 17+ to run the Gradle wrapper (just to bootstrap the build)\n* **Target JDK**: Gradle toolchain automatically provisions the correct JDK version for building XTC\n* **Gradle**: Not required to be pre-installed (project includes Gradle Wrapper)\n\n```bash\ngit clone https://github.com/xtclang/xvm.git\ncd xvm\n./gradlew build\n./gradlew xdk:installDist\nexport PATH=$PWD/xdk/build/install/xdk/bin:$PATH\n```\n\n**Note:** The Gradle build system uses a toolchain to automatically download and configure the correct Java version if it's not already installed. No manual Java installation is typically required.\n\nFor detailed build tasks, distribution options, environment configuration, debugging, and publishing, see **[Building XTC From Source](doc/build.md)**.\n\n## Development\n\n### XTC Plugin and Build System Testing\n\nFor comprehensive examples of using the XTC Gradle plugin and testing XTC applications, see the [**manualTests**](manualTests/build.gradle.kts) inline documentation. This project demonstrates:\n\n- XTC Gradle plugin configuration and usage\n- Build lifecycle best practices and caching\n- Configuration cache compatibility\n- Custom task creation and testing scenarios\n- Debugging and troubleshooting XTC builds\n\nThe manualTests project serves as both integration tests and comprehensive documentation for the XTC build system.\n\n### Git Workflow\n\nWe use a **rebase-only, linear history** workflow. Never merge from master to branches - always rebase. For the full workflow including branch setup, conflict resolution, commit cleanup, and GitHub branch protection, see the **[Git Workflow Guide](doc/git-workflow.md)**.\n\n## Status\n\nVersion 0.4. That's way _before_ version 1.0. In other words, Ecstasy is about as mature as\nWindows 3.1 was.\n\n**Warning:** The Ecstasy project is not yet certified for production use. This is a large and\nextremely ambitious project, and _it may yet be several years before this project is certified for\nproduction use_.\n\nOur goal is to always honestly communicate the status of this project, and to respect those who\ncontribute and use the project by facilitating a healthy, active community, and a useful,\nhigh-quality project. Whether you are looking to learn about language design and development,\ncompiler technology, or the applicability of language design to the serverless cloud, we have a\nplace for you here. Feel free to lurk. Feel free to fork the project. Feel free to contribute.\n\nWe only \"_get one chance to make a good first impression_\", and we are determined not to waste it.\nWe will not ask developers to waste their time attempting to use an incomplete project, so if you\nare here for a work reason, it's probably still a bit too early for you to be using this for your\nday job. On the other hand, if you are here to learn and/or contribute, then you are right on time!\nOur doors are open.\n\n## License\n\nThe license for source code is Apache 2.0, unless explicitly noted. We chose Apache 2.0 for its\ncompatibility with almost every reasonable use, and its compatibility with almost every license,\nreasonable or otherwise.\n\nThe license for documentation (including any the embedded markdown API documentation and/or\nderivative forms thereof) is Creative Commons CC-BY-4.0, unless explicitly noted.\n\nTo help ensure clean IP (which will help us keep this project free and open source), pull requests\nfor source code changes require a signed contributor agreement to be submitted in advance. We use\nthe Apache contributor model agreements (modified to identify this specific project), which can be\nfound in the [license](./license) directory. Contributors are required to sign and submit an Ecstasy\nProject Individual Contributor License Agreement (ICLA), or be a named employee on an Ecstasy\nProject Corporate Contributor License Agreement (CCLA), both derived directly from the Apache\nagreements of the same name. (Sorry for the paper-work! We hate it, too!)\n\nThe Ecstasy name is a trademark owned and administered by The Ecstasy Project. Unlicensed use of the\nEcstasy trademark is prohibited and will constitute infringement.\n\nAll content of the project not covered by the above terms is probably an accident that we need to be\nmade aware of, and remains (c) The Ecstasy Project, all rights reserved.\n\n## Layout\n\nThe project is organized as a number of subprojects, with the important ones to know about being:\n\n* The Ecstasy core library is in the [xvm/lib_ecstasy](./lib_ecstasy) directory, and is conceptually\n  like `stdlib` for C, or `rt.jar` for Java. When the XDK is built, the resulting module is located\n  at `xdk/lib/ecstasy.xtc`. This module contains portions of the Ecstasy tool chain, including the\n  lexer and parser. (Ecstasy source files use an `.x` extension, and are compiled into a single\n  module file with an `.xtc` extension.)\n\n* The Java tool chain (including an Ecstasy compiler and interpreter) is located in the\n  [xvm/javatools](./javatools) directory. When the XDK is built, the resulting `.jar` file is\n  located at `xdk/javatools/javatools.jar`.\n\n* There is an Ecstasy library in [xvm/javatools_bridge](./javatools_bridge) that is used by the Java\n  interpreter to bootstrap the runtime. When the XDK is built, the resulting module is located at\n  `xdk/javatools/javatools_bridge.xtc`.\n\n* The wiki documentation is [online](https://github.com/xtclang/xvm/wiki). There is an\n  [introduction to Ecstasy](https://github.com/xtclang/xvm/wiki/lang-intro) that is being written\n  for new users. The wiki source code will (eventually) be found in the `xvm/wiki` project directory,\n  and (as a distributable) in the `xdk/doc` directory of the built XDK.\n\n* Various other directories will have a `README.md` file that explains their purpose.\n\nTo download the entire project from the terminal, you will need\n[git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed. From the terminal,\ngo to the directory where you want to create a local copy of the Ecstasy project, and:\n\n```\ngit clone https://github.com/xtclang/xvm.git\n```\n\n(There is excellent online documentation for git at\n[git-scm.com](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository).)\n\nTo build the entire project, use the included Gradle Wrapper (recommended method):\n\n```\n./gradlew build\n```\n\nOr on Windows:\n\n```\nC:\\\u003e gradlew.bat build\n```\n\n**Note:** Always use the Gradle Wrapper (`./gradlew`) rather than a system-installed Gradle binary to ensure the correct Gradle version is used.\n\nNote that Windows may require the `JAVA_TOOLS_OPTIONS` environment variable to be set to\n`-Dfile.encoding=UTF-8` in the Environment Variables window that can be accessed from Control Panel.\nThis allows the Java compiler to automatically handle UTF-8 encoded files, and several of the Java\nsource files used in the Ecstasy toolchain contain UTF-8 characters. Also, to change the default\nencoding used in Windows, go to the \"Administrative\" tab of the \"Region\" settings Window (also\naccessed from Control Panel), click the \"Change system locale...\" button and check the box labeled\n\"Beta: Use UTF-8 for worldwide language support\".\n\nInstructions for getting started can be found in our [Contributing to Ecstasy](CONTRIBUTING.md)\ndocument.\n\n## Related Repositories\n\nThe xtclang organization maintains several repositories supporting the Ecstasy ecosystem:\n\n### Core Platform\n- **[platform](https://github.com/xtclang/platform)** - Ecstasy \"Platform as a Service\" implementation for cloud deployment\n\n### Distribution \u0026 Packaging\n- **[xdk-release](https://github.com/xtclang/xdk-release)** - Cross-platform XDK distribution and release automation\n- **[homebrew-xvm](https://github.com/xtclang/homebrew-xvm)** - Homebrew tap for macOS/Linux XDK installations\n\n### Research \u0026 Extensions\n- **[jmixin](https://github.com/xtclang/jmixin)** - Java port of Ecstasy mixin functionality for research and comparison\n\n## Questions?\n\nTo submit a contributor agreement, sign up for very hard work, fork over a giant\npile of cash, or in case of emergency: \"info _at_ xtclang _dot_ org\", but please\nunderstand if we cannot respond to every e-mail. Thank you.\n","funding_links":[],"categories":["Uncategorized","JVM语言","Java"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxtclang%2Fxvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxtclang%2Fxvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxtclang%2Fxvm/lists"}