diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
old mode 100755
new mode 100644
index 6f3658602..594fb4c00
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,148 +1,73 @@
-name: CI
-on: [push]
-
-jobs:
- build_matrix:
-    strategy:
-      matrix:
-        os: [ubuntu-latest, windows-latest, macos-latest]
-    runs-on: ${{ matrix.os }}
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v3
-
-      - uses: krdlab/setup-haxe@v1
-        with:
-          haxe-version: 4.3.0
-
-      - name: Set Haxelib
-        run: |
-          haxe -version
-          haxelib dev hxcpp .
-          
-      - name: Set Version
-        run: haxe -cp tools/version --run Write ${{github.run_number}} > version.env
-
-
-      - name: Build Tool
-        run: |
-          cd tools/hxcpp
-          haxe compile.hxml
-
-        
-      - name: Check XCode
-        if: startsWith(matrix.os,'macos')
-        run: xcode-select -p
-          
-      - name: Build Cppia
-        run: |
-          cd project
-          haxe compile-cppia.hxml -D HXCPP_M64
-          
-      - name: Clean Project
-        if: startsWith(matrix.os,'ubuntu')
-        run: |
-          rm -rf project/cppia_bin
-
-      - name: Archive Linux Results
-        if: startsWith(matrix.os,'ubuntu')
-        uses: actions/upload-artifact@v3
-        with:
-          name: linux-64
-          path: |
-             bin/Linux64/Cppia
-             tools
-             toolchain
-             version.env
-             src
-             run.n
-             include
-             hxcpp.n
-             haxelib.json
-             Changes.md
-             hxcpp
-             test
-             docs
-             project
-             README.md
-             build-tool
-             java
-             haxelib.xml
-             LICENSE.txt
-
-      - name: Archive Windows Results
-        if: startsWith(matrix.os,'windows')
-        uses: actions/upload-artifact@v3
-        with:
-          name: windows-64
-          path: |
-            bin/Windows64/Cppia.exe
-
-      - name: Archive Mac Results
-        if: startsWith(matrix.os,'macos')
-        uses: actions/upload-artifact@v3
-        with:
-          name: mac-64
-          path: |
-            bin/Mac64/Cppia
- release:
-    name: Release
-    needs: build_matrix
-    runs-on: ubuntu-latest
-    steps:
-        - name: Download Linux
-          uses: actions/download-artifact@v3
-          with:
-             name: linux-64
-             path: hxcpp
-
-        - name: Download Mac
-          uses: actions/download-artifact@v3
-          with:
-             name: mac-64
-             path: hxcpp/bin/Mac64/
-
-        - name: Download Windows
-          uses: actions/download-artifact@v3
-          with:
-             name: windows-64
-             path: hxcpp/bin/Windows64/
-
-        - name: List Files
-          run: ls -R
-
-        - name: Get Version
-          run: |
-             cat hxcpp/version.env
-             cat hxcpp/version.env >> $GITHUB_ENV
-             rm hxcpp/version.env
-
-        - name: Zip release
-          run: |
-             mv hxcpp hxcpp-${{ env.hxcpp_release }}
-             zip -r hxcpp-${{ env.hxcpp_release }}.zip hxcpp-${{ env.hxcpp_release }} 
-      
-        - name: Create Release
-          id: create_release
-          uses: actions/create-release@v1
-          env:
-            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          with:
-            tag_name: v${{ env.hxcpp_release }}
-            release_name: Release ${{ env.hxcpp_release }}
-            draft: false
-            prerelease: false
-
-        - name: Upload Release Asset
-          id: upload-release-asset 
-          uses: actions/upload-release-asset@v1
-          env:
-            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          with:
-            upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps 
-            asset_path: ./hxcpp-${{ env.hxcpp_release }}.zip
-            asset_name: hxcpp-${{ env.hxcpp_release }}.zip
-            asset_content_type: application/zip
-
-
-
+name: main
+on: [push, pull_request]
+
+jobs:
+  Windows32:
+    strategy:
+      fail-fast: false
+      matrix:
+        haxe: [ 4.3.4, latest ]
+    uses: ./.github/workflows/test.yml
+    name: Test Windows (32bit)
+    with:
+      haxe: ${{ matrix.haxe  }}
+      arch: 32
+      sep: \
+      ext: .dll
+      os: windows-latest
+
+  Windows64:
+    strategy:
+      fail-fast: false
+      matrix:
+        haxe: [ 4.3.4, latest ]
+    uses: ./.github/workflows/test.yml
+    name: Test Windows (64bit)
+    with:
+      haxe: ${{ matrix.haxe  }}
+      arch: 64
+      sep: \
+      ext: .dll
+      os: windows-latest
+
+  MacOS:
+    strategy:
+      fail-fast: false
+      matrix:
+        haxe: [ 4.3.4, latest ]
+    uses: ./.github/workflows/test.yml
+    name: Test MacOS
+    with:
+      haxe: ${{ matrix.haxe  }}
+      arch: 64
+      sep: /
+      ext: .dylib
+      os: macos-latest
+
+  Linux32:
+    strategy:
+      fail-fast: false
+      matrix:
+        haxe: [ 4.3.4, latest ]
+    uses: ./.github/workflows/test.yml
+    name: Test Linux (32bit)
+    with:
+      haxe: ${{ matrix.haxe  }}
+      arch: 32
+      sep: /
+      ext: .dso
+      os: ubuntu-latest
+
+  Linux64:
+    strategy:
+      fail-fast: false
+      matrix:
+        haxe: [ 4.3.4, latest ]
+    uses: ./.github/workflows/test.yml
+    name: Test Linux (64bit)
+    with:
+      haxe: ${{ matrix.haxe  }}
+      arch: 64
+      sep: /
+      ext: .dso
+      os: ubuntu-latest
\ No newline at end of file
diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
new file mode 100644
index 000000000..d2bface2f
--- /dev/null
+++ b/.github/workflows/package.yml
@@ -0,0 +1,148 @@
+name: package
+on:
+  push:
+    branches: [master]
+
+jobs:
+  Package:
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest, windows-latest, macos-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+
+      - uses: Aidan63/setup-haxe@e4b347bc45596200a68804b232be9d73f80868a6
+        with:
+          haxe-version: 4.3.4
+
+      - name: Set Haxelib
+        run: |
+          haxe -version
+          haxelib dev hxcpp .
+          
+      - name: Set Version
+        run: haxe -cp tools/version --run Write ${{github.run_number}} > version.env
+
+
+      - name: Build Tool
+        run: |
+          cd tools/hxcpp
+          haxe compile.hxml
+
+        
+      - name: Check XCode
+        if: startsWith(matrix.os,'macos')
+        run: xcode-select -p
+          
+      - name: Build Cppia
+        run: |
+          cd project
+          haxe compile-cppia.hxml -D HXCPP_M64
+          
+      - name: Clean Project
+        if: startsWith(matrix.os,'ubuntu')
+        run: |
+          rm -rf project/cppia_bin
+
+      - name: Archive Linux Results
+        if: startsWith(matrix.os,'ubuntu')
+        uses: actions/upload-artifact@v3
+        with:
+          name: linux-64
+          path: |
+             bin/Linux64/Cppia
+             tools
+             toolchain
+             version.env
+             src
+             run.n
+             include
+             hxcpp.n
+             haxelib.json
+             Changes.md
+             hxcpp
+             test
+             docs
+             project
+             README.md
+             build-tool
+             java
+             haxelib.xml
+             LICENSE.txt
+
+      - name: Archive Windows Results
+        if: startsWith(matrix.os,'windows')
+        uses: actions/upload-artifact@v3
+        with:
+          name: windows-64
+          path: |
+            bin/Windows64/Cppia.exe
+
+      - name: Archive Mac Results
+        if: startsWith(matrix.os,'macos')
+        uses: actions/upload-artifact@v3
+        with:
+          name: mac-64
+          path: |
+            bin/Mac64/Cppia
+
+  Release:
+    needs: Package
+    runs-on: ubuntu-latest
+    steps:
+        - name: Download Linux
+          uses: actions/download-artifact@v3
+          with:
+             name: linux-64
+             path: hxcpp
+
+        - name: Download Mac
+          uses: actions/download-artifact@v3
+          with:
+             name: mac-64
+             path: hxcpp/bin/Mac64/
+
+        - name: Download Windows
+          uses: actions/download-artifact@v3
+          with:
+             name: windows-64
+             path: hxcpp/bin/Windows64/
+
+        - name: List Files
+          run: ls -R
+
+        - name: Get Version
+          run: |
+             cat hxcpp/version.env
+             cat hxcpp/version.env >> $GITHUB_ENV
+             rm hxcpp/version.env
+
+        - name: Zip release
+          run: |
+             mv hxcpp hxcpp-${{ env.hxcpp_release }}
+             zip -r hxcpp-${{ env.hxcpp_release }}.zip hxcpp-${{ env.hxcpp_release }} 
+      
+        - name: Create Release
+          id: create_release
+          uses: actions/create-release@v1
+          env:
+            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          with:
+            tag_name: v${{ env.hxcpp_release }}
+            release_name: Release ${{ env.hxcpp_release }}
+            draft: false
+            prerelease: false
+
+        - name: Upload Release Asset
+          id: upload-release-asset 
+          uses: actions/upload-release-asset@v1
+          env:
+            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          with:
+            upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps 
+            asset_path: ./hxcpp-${{ env.hxcpp_release }}.zip
+            asset_name: hxcpp-${{ env.hxcpp_release }}.zip
+            asset_content_type: application/zip
\ No newline at end of file
diff --git a/.github/workflows/setup/action.yml b/.github/workflows/setup/action.yml
new file mode 100644
index 000000000..01f2c6b47
--- /dev/null
+++ b/.github/workflows/setup/action.yml
@@ -0,0 +1,35 @@
+name: setup
+inputs:
+  haxe:
+    required: true
+    type: string
+runs:
+  using: composite
+  steps:
+    - name: install haxe
+      uses: Aidan63/setup-haxe@e4b347bc45596200a68804b232be9d73f80868a6
+      with:
+        haxe-version: ${{ inputs.haxe }}
+
+    - name: install haxe libraries
+      shell: pwsh
+      run: |
+        haxelib install utest
+        haxelib git hx4compat https://github.com/HaxeFoundation/hx4compat
+        haxelib dev hxcpp ${{ github.workspace }}
+        haxelib list
+
+    - name: install native libraries
+      if: runner.os == 'Linux'
+      shell: pwsh
+      run: sudo apt-get install -qqy gcc-multilib g++-multilib
+
+    - name: build run.n
+      working-directory: tools/run
+      shell: pwsh
+      run: haxe compile.hxml
+
+    - name: build hxcpp
+      working-directory: tools/hxcpp
+      shell: pwsh
+      run: haxe compile.hxml
\ No newline at end of file
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 000000000..da7c478cd
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,230 @@
+name: test
+on:
+  workflow_call:
+    inputs:
+      haxe:
+        required: true
+        type: string
+      arch:
+        required: true
+        type: string
+      sep:
+        required: true
+        type: string
+      ext:
+        required: true
+        type: string
+      os:
+        required: true
+        type: string
+
+jobs:
+  haxe:
+    runs-on: ${{ inputs.os }}
+    name: haxe
+    defaults:
+      run:
+        working-directory: test/haxe
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: build
+        run: haxe compile.hxml --debug -D HXCPP_M${{ inputs.arch }}
+      - name: run
+        run: bin${{ inputs.sep }}TestMain-debug
+
+  cffi:
+    runs-on: ${{ inputs.os }}
+    name: cffi
+    defaults:
+      run:
+        working-directory: test/cffi
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: build project
+        working-directory: test/cffi/project
+        run: haxelib run hxcpp build.xml -Ddebug -DHXCPP_M${{ inputs.arch }}
+      - name: build
+        run: haxe compile.hxml --debug -D HXCPP_M${{ inputs.arch }}
+      - name: build (utf8)
+        run: haxe compile-utf8.hxml --debug -D HXCPP_M${{ inputs.arch }}
+      - name: build (neko)
+        run: haxe compile-neko.hxml --debug -D HXCPP_M${{ inputs.arch }}
+      - name: copy
+        run: cp project/ndll/*/prime${{ inputs.ext }} bin/neko/prime.ndll
+      - name: run
+        run: bin${{ inputs.sep }}cpp${{ inputs.sep }}TestMain-debug
+      - name: run (utf8)
+        run: bin${{ inputs.sep }}cpp-utf8${{ inputs.sep }}TestMain-debug
+      - name: run (neko)
+        if: inputs.arch == '64'
+        working-directory: test/cffi/bin/neko
+        run: neko TestMain.n
+
+  telemetry:
+    strategy:
+      fail-fast: false
+      matrix:
+        mode: [ debug, release ]
+        include:
+          - suffix: -debug
+            mode: debug
+    runs-on: ${{ inputs.os }}
+    name: telemetry (${{ matrix.mode }})
+    defaults:
+      run:
+        working-directory: test/telemetry
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: build
+        run: haxe compile.hxml ${{ matrix.suffix }} -D HXCPP_M${{ inputs.arch }}
+      - name: run
+        run: bin${{ inputs.sep }}TestMain${{ matrix.suffix }}
+
+  debugger:
+    runs-on: ${{ inputs.os }}
+    name: debugger
+    defaults:
+      run:
+        working-directory: test/debugger
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: build
+        run: haxe compile.hxml -D HXCPP_M${{ inputs.arch }}
+      - name: run
+        run: bin${{ inputs.sep }}App-debug
+        
+  native:
+      runs-on: ${{ inputs.os }}
+      name: native
+      defaults:
+        run:
+          working-directory: test/native
+      steps:
+        - name: checkout
+          uses: actions/checkout@v4
+        - name: setup
+          uses: ./.github/workflows/setup
+          with:
+            haxe: ${{ inputs.haxe }}
+        - name: build
+          run: haxe compile.hxml -D HXCPP_M${{ inputs.arch }}
+        - name: run
+          run: bin${{ inputs.sep }}Native
+
+  std:
+      runs-on: ${{ inputs.os }}
+      name: std
+      defaults:
+        run:
+          working-directory: test/std
+      steps:
+        - name: checkout
+          uses: actions/checkout@v4
+        - name: setup
+          uses: ./.github/workflows/setup
+          with:
+            haxe: ${{ inputs.haxe }}
+        - name: install mariadb
+          if: runner.os == 'Linux'
+          run: |
+            set -ex
+            sudo rm -R /var/lib/mysql/
+            curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup > mariadb_repo_setup
+            curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup.sha256 > mariadb_repo_setup.sha256
+            sha256sum --check mariadb_repo_setup.sha256
+            sudo bash mariadb_repo_setup
+            sudo apt-get update -qqy
+            sudo apt-get remove -qqy mysql-common
+            sudo apt-get autoremove -qqy
+            sudo apt-get install -qqy mariadb-server
+        - name: configure mariadb
+          if: runner.os == 'Linux'
+          run: |
+            set -ex
+            sudo systemctl unmask mysql.service
+            sudo systemctl start mysql
+            sudo mysql -u root -e "create database hxcpp; grant all privileges on hxcpp.* to hxcpp@localhost identified by 'hxcpp'; flush privileges;"
+        - name: build
+          run: haxe compile${{ inputs.arch }}.hxml
+        - name: run
+          run: cpp${{ inputs.arch }}${{ inputs.sep }}Test
+
+  cppia:
+    strategy:
+      fail-fast: false
+      matrix:
+        mode: [ interp, jit ]
+        include:
+          - suffix: -jit
+            mode: jit
+    runs-on: ${{ inputs.os }}
+    name: cppia (${{ matrix.mode }})
+    defaults:
+      run:
+        working-directory: test/cppia
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: build host
+        run: haxe compile-host.hxml -D HXCPP_M${{ inputs.arch }}
+      - name: build client
+        run: haxe compile-client.hxml -D HXCPP_M${{ inputs.arch }}
+      - name: run
+        run: bin${{ inputs.sep }}CppiaHost bin${{ inputs.sep }}client.cppia ${{ matrix.suffix }}
+
+  suite:
+    runs-on: ${{ inputs.os }}
+    name: haxe test suite
+    defaults:
+      run:
+        working-directory: haxe/tests/unit
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: checkout haxe (latest)
+        if: inputs.haxe == 'latest'
+        uses: actions/checkout@v4
+        with:
+          repository: HaxeFoundation/haxe
+          path: haxe
+      - name: checkout haxe (stable)
+        if: inputs.haxe != 'latest'
+        uses: actions/checkout@v4
+        with:
+          repository: HaxeFoundation/haxe
+          path: haxe
+          ref: ${{ inputs.haxe }}
+      - name: setup
+        uses: ./.github/workflows/setup
+        with:
+          haxe: ${{ inputs.haxe }}
+      - name: install haxe libs
+        run: haxelib install compile-cpp.hxml --always
+      - name: build
+        run: haxe compile-cpp.hxml -D HXCPP_M${{ inputs.arch }} -D no_http
+      - name: run
+        run: bin${{ inputs.sep }}cpp${{ inputs.sep }}TestMain-debug
\ No newline at end of file
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
deleted file mode 100644
index c4108d2c1..000000000
--- a/azure-pipelines.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-variables:
-  - group: variables-haxe
-  - name: AZURE_PIPELINES_REPO_URL
-    value: $(Build.Repository.Uri)
-  - name: AZURE_PIPELINES_BRANCH
-    value: $(Build.SourceBranchName)
-  - name: HXCPP_COMPILE_CACHE
-    value: $(Agent.TempDirectory)/hxcache
-
-stages:
-  - stage: StageTest
-    jobs:
-      - template: tools/azure-pipelines/build.yml
-        parameters:
-          name: Linux64
-          vmImage: ubuntu-20.04
-          platform: linux64
-          arch: 64
-      - template: tools/azure-pipelines/build.yml
-        parameters:
-          name: Linux32
-          vmImage: ubuntu-20.04
-          platform: linux64
-          arch: 32
-      - template: tools/azure-pipelines/build.yml
-        parameters:
-          name: Mac
-          vmImage: macOS-12
-          platform: mac
-          arch: 64
-      - template: tools/azure-pipelines/build.yml
-        parameters:
-          name: Windows64
-          vmImage: windows-2019
-          platform: windows
-          arch: 64
-      - template: tools/azure-pipelines/build.yml
-        parameters:
-          name: Windows32
-          vmImage: windows-2019
-          platform: windows
-          arch: 32
diff --git a/tools/azure-pipelines/build.yml b/tools/azure-pipelines/build.yml
index d83d0cb71..e69de29bb 100644
--- a/tools/azure-pipelines/build.yml
+++ b/tools/azure-pipelines/build.yml
@@ -1,160 +0,0 @@
-parameters:
-  name: ''
-  vmImage: ''
-  arch: '' # hxcpp's target arch (HXCPP_Mxx), can be '32' or '64'
-  platform: '' # can be linux64, mac, windows, or windows64
-  listPlatform32: ['linux32', 'windows']
-  listPlatform64: ['linux64', 'mac', 'windows64']
-
-jobs:
-  - job: ${{ parameters.name }}
-    pool:
-      vmImage: ${{ parameters.vmImage }}
-    variables:
-      ${{ if startsWith(parameters.vmImage, 'ubuntu-') }}:
-        libExt: .dso
-        sep: '/'
-      ${{ if contains(parameters.vmImage, 'mac') }}:
-        libExt: .dylib
-        sep: '/'
-      ${{ if contains(parameters.vmImage, 'win') }}:
-        libExt: .dll
-        sep: '\'
-    steps:
-      - ${{ if startsWith(parameters.vmImage, 'ubuntu-') }}:
-        - script: |
-            set -ex
-            sudo rm -R /var/lib/mysql/
-            # mariadb
-            curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup > mariadb_repo_setup
-            curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup.sha256 > mariadb_repo_setup.sha256
-            sha256sum --check mariadb_repo_setup.sha256
-            sudo bash mariadb_repo_setup
-            sudo apt-get update -qqy
-            sudo apt-get remove -qqy mysql-common
-            sudo apt-get autoremove -qqy
-            sudo apt-get install -qqy mariadb-server
-            # remaining packages
-            sudo apt-get install -qqy gcc-multilib g++-multilib
-          displayName: Install dependencies
-        - script: |
-            set -ex
-            sudo systemctl unmask mysql.service
-            sudo systemctl start mysql
-            sudo mysql -u root -e "create database hxcpp; grant all privileges on hxcpp.* to hxcpp@localhost identified by 'hxcpp'; flush privileges;"
-          displayName: Configure MariaDB
-      - template: install-neko-snapshot.yaml
-        parameters:
-          platform: ${{ parameters.platform }}
-      - template: install-haxe-snapshot.yaml
-        parameters:
-          platform: ${{ parameters.platform }}
-      - script: |
-          set -ex
-          mkdir -p ~/haxelib
-          haxelib setup ~/haxelib
-          haxelib install utest
-          haxelib git hx4compat https://github.com/HaxeFoundation/hx4compat
-          haxelib dev hxcpp $(Build.SourcesDirectory)
-          haxelib list
-        displayName: Install Haxe libraries
-      - script: haxe compile.hxml
-        workingDirectory: tools/run
-        displayName: Build run.n
-      - script: haxe compile.hxml
-        workingDirectory: tools/hxcpp
-        displayName: Build hxcpp
-      - script: haxe compile-cppia.hxml
-        workingDirectory: project
-        displayName: Build cppia
-
-      # cffi
-      - script: haxelib run hxcpp build.xml -debug -DHXCPP_M${{parameters.arch}}
-        workingDirectory: test/cffi/project
-        displayName: Build cffi project
-      - bash: |
-          set -ex
-          haxe compile.hxml      -debug -D HXCPP_M${{parameters.arch}}
-          haxe compile-utf8.hxml -debug -D HXCPP_M${{parameters.arch}}
-          haxe compile-neko.hxml -debug -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/cffi
-        displayName: cffi test - Compile
-      - script: bin$(sep)cpp$(sep)TestMain-debug
-        workingDirectory: test/cffi
-        displayName: cffi test - Run
-      - script: bin$(sep)cpp-utf8$(sep)TestMain-debug
-        workingDirectory: test/cffi
-        displayName: cffi-utf8 test - Run
-      - ${{ if or(and(containsValue(parameters.listPlatform32, parameters.platform), eq(parameters.arch, '32')), and(containsValue(parameters.listPlatform64, parameters.platform), eq(parameters.arch, '64'))) }}:
-        - bash: cp test/cffi/project/ndll/*/prime$(libExt) test/cffi/bin/neko/prime.ndll
-          displayName: Copy prime.ndll
-        - script: neko TestMain.n
-          workingDirectory: test/cffi/bin/neko
-          displayName: cffi-neko test - Run
-
-      # haxe
-      - script: haxe compile.hxml -debug -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/haxe
-        displayName: haxe test - Compile
-      - script: bin$(sep)TestMain-debug
-        workingDirectory: test/haxe
-        displayName: haxe test - Run
-
-      # telemetry, should work in debug and non-debug modes
-      - script: haxe compile.hxml -debug -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/telemetry
-        displayName: telemetry test (debug) - Compile
-      - script: bin$(sep)TestMain-debug
-        workingDirectory: test/telemetry
-        displayName: telemetry test (debug) - Run
-      - script: haxe compile.hxml -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/telemetry
-        displayName: telemetry test - Compile
-      - script: bin$(sep)TestMain
-        workingDirectory: test/telemetry
-        displayName: telemetry test - Run
-
-      # std
-      - script: haxe compile${{parameters.arch}}.hxml
-        workingDirectory: test/std
-        displayName: std test - Compile
-      - script: cpp${{parameters.arch}}$(sep)Test
-        workingDirectory: test/std
-        displayName: std test - Run
-
-      # debugger
-      - script: haxe compile.hxml -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/debugger
-        displayName: debugger test - Compile
-      - script: bin$(sep)App-debug
-        workingDirectory: test/debugger
-        displayName: debugger test - Run
-
-      # native
-      - script: haxe compile.hxml -D HXCPP_M${{parameters.arch}}
-        workingDirectory: test/native
-        displayName: native test - Compile
-      - script: bin$(sep)Native
-        workingDirectory: test/native
-        displayName: native test - Run
-
-      # haxe unit test
-      - bash: |
-          set -ex
-          HAXE_VERSION=`haxe -version`
-          HAXE_HASH=`[[ "$HAXE_VERSION" =~ ^.+\+(.+) ]] && echo ${BASH_REMATCH[1]}`
-          git clone -q https://github.com/HaxeFoundation/haxe.git
-          pushd haxe
-          git reset --hard "$HAXE_HASH"
-          git clean -fdx
-          popd
-        displayName: haxe unit test - Clone haxe repo
-      - script: haxelib install compile-cpp.hxml --always
-        workingDirectory: haxe/tests/unit
-        displayName: haxe unit test - Install haxelibs
-      - script: haxe compile-cpp.hxml -D HXCPP_M${{parameters.arch}} -D no_http
-        workingDirectory: haxe/tests/unit
-        displayName: haxe unit test - Compile
-      - script: bin$(sep)cpp$(sep)TestMain-debug
-        workingDirectory: haxe/tests/unit
-        displayName: haxe unit test - Run
diff --git a/tools/azure-pipelines/install-haxe-snapshot.yaml b/tools/azure-pipelines/install-haxe-snapshot.yaml
deleted file mode 100644
index 48b14fb33..000000000
--- a/tools/azure-pipelines/install-haxe-snapshot.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-parameters:
-  platform: '' # can be linux64, mac, windows, or windows64
-
-steps:
-  - ${{ if startsWith(parameters.platform, 'windows') }}:
-    - powershell: |
-        Invoke-WebRequest https://build.haxe.org/builds/haxe/${{parameters.platform}}/haxe_latest.zip -OutFile $(Agent.TempDirectory)/haxe_latest.zip
-        Expand-Archive $(Agent.TempDirectory)/haxe_latest.zip -DestinationPath $(Agent.TempDirectory)
-        Remove-Item $(Agent.TempDirectory)/haxe_latest.zip
-        $HAXEPATH = Get-Item $(Agent.TempDirectory)/haxe_*
-        $HAXE_STD_PATH = "$HAXEPATH\std"
-        Write-Host "##vso[task.prependpath]$HAXEPATH"
-        Write-Host "##vso[task.setvariable variable=HAXE_STD_PATH]$HAXE_STD_PATH"
-      displayName: Install Haxe using snapshot from S3
-  - ${{ if not(startsWith(parameters.platform, 'windows')) }}:
-    - bash: |
-        set -ex
-        DOWNLOADDIR=$(Agent.TempDirectory)
-        curl -sSL https://build.haxe.org/builds/haxe/${{parameters.platform}}/haxe_latest.tar.gz -o $(Agent.TempDirectory)/haxe_latest.tar.gz
-        tar -xf $(Agent.TempDirectory)/haxe_latest.tar.gz -C $(Agent.TempDirectory)
-        rm $(Agent.TempDirectory)/haxe_latest.tar.gz
-        HAXEPATH=`echo $(Agent.TempDirectory)/haxe_*`
-        sudo mkdir -p /usr/local/bin
-        sudo mkdir -p /usr/local/share/haxe
-        sudo ln -s $HAXEPATH/{haxe,haxelib}  /usr/local/bin/
-        sudo ln -s $HAXEPATH/std             /usr/local/share/haxe/std
-        set +x
-        echo "##vso[task.setvariable variable=HAXE_STD_PATH]/usr/local/share/haxe/std"
-      displayName: Install Haxe using snapshot from S3
-  - script: haxe -version
-    displayName: Print Haxe version
\ No newline at end of file
diff --git a/tools/azure-pipelines/install-neko-snapshot.yaml b/tools/azure-pipelines/install-neko-snapshot.yaml
deleted file mode 100644
index fda19bd94..000000000
--- a/tools/azure-pipelines/install-neko-snapshot.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-parameters:
-  platform: '' # can be linux64, mac, windows, or windows64
-
-steps:
-  - ${{ if startsWith(parameters.platform, 'windows') }}:
-    - powershell: |
-        Invoke-WebRequest https://build.haxe.org/builds/neko/${{parameters.platform}}/neko_latest.zip -OutFile $(Agent.TempDirectory)/neko_latest.zip
-        Expand-Archive $(Agent.TempDirectory)/neko_latest.zip -DestinationPath $(Agent.TempDirectory)
-        $NEKOPATH = Get-ChildItem $(Agent.TempDirectory)/neko-*-win
-        Write-Host "##vso[task.prependpath]$NEKOPATH"
-        Write-Host "##vso[task.setvariable variable=NEKOPATH]$NEKOPATH"
-      displayName: Install Neko using snapshot from S3
-  - ${{ if not(startsWith(parameters.platform, 'windows')) }}:
-    - bash: |
-        set -ex
-        DOWNLOADDIR=$(Agent.TempDirectory)
-        curl -sSL https://build.haxe.org/builds/neko/${{parameters.platform}}/neko_latest.tar.gz -o $(Agent.TempDirectory)/neko_latest.tar.gz
-        tar -xf $(Agent.TempDirectory)/neko_latest.tar.gz -C $(Agent.TempDirectory)
-        NEKOPATH=`echo $(Agent.TempDirectory)/neko-*-*`
-        sudo mkdir -p /usr/local/bin
-        sudo mkdir -p /usr/local/lib/neko
-        sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools}  /usr/local/bin/
-        sudo ln -s $NEKOPATH/libneko.*                      /usr/local/lib/
-        sudo ln -s $NEKOPATH/*.ndll                         /usr/local/lib/neko/
-        set +x
-        echo "##vso[task.prependpath]$NEKOPATH"
-        echo "##vso[task.setvariable variable=NEKOPATH]$NEKOPATH"
-      displayName: Install Neko using snapshot from S3
-  - ${{ if eq(parameters.platform, 'linux64') }}:
-    - bash: sudo ldconfig
-      displayName: ldconfig
-  - script: neko -version 2>&1
-    displayName: Print Neko version
\ No newline at end of file