[package]
edition = "2024"
rust-version = "1.92"
name = "mech"
version = "0.3.3"
authors = ["Corey Montella <corey@mech-lang.org>"]
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Mech is a programming language for building reactive systems like robots, games, and animations."
homepage = "https://mech-lang.org"
documentation = "https://docs.mech-lang.org"
readme = "README.md"
keywords = [
"mech",
"language",
"programming",
"dataflow",
"runtime",
]
categories = [
"science::robotics",
"science",
"game-engines",
"web-programming",
]
license = "Apache-2.0"
repository = "https://github.com/mech-lang/mech"
[package.metadata.winres]
OriginalFilename = "MECH.EXE"
LegalCopyright = "Copyright © 2026"
[badges.gitlab]
branch = "main"
repository = "mech-lang/mech"
[badges.maintenance]
status = "actively-developed"
[features]
async = []
atom = [
"mech-core/atom",
"mech-interpreter/atom",
"mech-syntax/atom",
]
base = [
"baselib",
"pretty_print",
"serde",
"compiler",
"program",
"mika",
"statements_default",
"subscript_default",
"state_machines",
"formatter",
"mechfs",
"serve",
"run",
"repl",
"build",
"whos",
"async",
"trace",
"mech-core/base",
"mech-interpreter/base",
"mech-syntax/base",
]
baselib = [
"bool",
"string",
"f64",
"c64",
"r64",
"set",
"map",
"table",
"tuple",
"record",
"atom",
"enum",
"row_vectord",
"vectord",
"matrixd",
"subscript_range",
"logical_indexing",
"subscript_formula",
"variable_define",
"variable_assign",
"kind_define",
"kind_annotation",
"variables",
"functions",
"formulas",
]
bool = [
"mech-core/bool",
"mech-interpreter/bool",
"mech-syntax/bool",
]
build = ["compiler"]
c64 = [
"complex",
"mech-core/c64",
"mech-interpreter/c64",
"mech-syntax/c64",
]
compiler = [
"anyhow",
"console",
"tempfile",
"zip",
"mech-core/compiler",
"mech-interpreter/compiler",
"mech-syntax/compiler",
]
complex = [
"f64",
"numbers",
"mech-core/complex",
"mech-interpreter/complex",
"mech-syntax/complex",
]
default = [
"baselib",
"pretty_print",
"serde",
"compiler",
"program",
"mika",
"u8",
"u16",
"u32",
"u64",
"u128",
"i8",
"i16",
"i32",
"i64",
"i128",
"f32",
"f64",
"c64",
"r64",
"statements_default",
"subscript_default",
"state_machines",
"formatter",
"mechfs",
"serve",
"run",
"repl",
"build",
"whos",
"async",
"trace",
"mech-core/default",
"mech-interpreter/default",
"mech-syntax/default",
]
dot_indexing = [
"subscript",
"mech-core/dot_indexing",
"mech-interpreter/dot_indexing",
"mech-syntax/dot_indexing",
]
dynamic_matrix = [
"matrixd",
"vectord",
"row_vectord",
"mech-core/dynamic_matrix",
"mech-interpreter/dynamic_matrix",
"mech-syntax/dynamic_matrix",
]
enum = [
"mech-core/enum",
"mech-interpreter/enum",
"mech-syntax/enum",
]
f32 = [
"floats",
"mech-core/f32",
"mech-interpreter/f32",
"mech-syntax/f32",
]
f64 = [
"floats",
"mech-core/f64",
"mech-interpreter/f64",
"mech-syntax/f64",
]
fixed_matrix = [
"matrix4",
"matrix3",
"matrix2",
"matrix1",
"matrix2x3",
"matrix3x2",
"mech-core/fixed_matrix",
"mech-interpreter/fixed_matrix",
"mech-syntax/fixed_matrix",
]
fixed_row_vector = [
"row_vector4",
"row_vector3",
"row_vector2",
"mech-core/fixed_row_vector",
"mech-interpreter/fixed_row_vector",
"mech-syntax/fixed_row_vector",
]
fixed_vector = [
"vector4",
"vector3",
"vector2",
"mech-core/fixed_vector",
"mech-interpreter/fixed_vector",
"mech-syntax/fixed_vector",
]
floats = [
"numbers",
"mech-core/floats",
"mech-interpreter/floats",
"mech-syntax/floats",
]
formatter = ["mech-syntax/formatter"]
formulas = [
"mech-core/formulas",
"mech-interpreter/formulas",
"mech-syntax/formulas",
]
functions = [
"symbol_table",
"mech-core/functions",
"mech-interpreter/functions",
"mech-syntax/functions",
]
i128 = [
"signed_ints",
"mech-core/i128",
"mech-interpreter/i128",
"mech-syntax/i128",
]
i16 = [
"signed_ints",
"mech-core/i16",
"mech-interpreter/i16",
"mech-syntax/i16",
]
i32 = [
"signed_ints",
"mech-core/i32",
"mech-interpreter/i32",
"mech-syntax/i32",
]
i64 = [
"signed_ints",
"mech-core/i64",
"mech-interpreter/i64",
"mech-syntax/i64",
]
i8 = [
"signed_ints",
"mech-core/i8",
"mech-interpreter/i8",
"mech-syntax/i8",
]
kind_annotation = [
"functions",
"mech-core/kind_annotation",
"mech-interpreter/kind_annotation",
"mech-syntax/kind_annotation",
]
kind_define = [
"kind_annotation",
"statements",
"mech-core/kind_define",
"mech-interpreter/kind_define",
"mech-syntax/kind_define",
]
logical_indexing = [
"subscript",
"vectord",
"bool",
"mech-core/logical_indexing",
"mech-interpreter/logical_indexing",
"mech-syntax/logical_indexing",
]
map = [
"mech-core/map",
"mech-interpreter/map",
"mech-syntax/map",
]
matrix = [
"mech-core/matrix",
"mech-interpreter/matrix",
"mech-syntax/matrix",
]
matrix1 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix1",
"mech-interpreter/matrix1",
"mech-syntax/matrix1",
]
matrix2 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix2",
"mech-interpreter/matrix2",
"mech-syntax/matrix2",
]
matrix2x3 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix2x3",
"mech-interpreter/matrix2x3",
"mech-syntax/matrix2x3",
]
matrix3 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix3",
"mech-interpreter/matrix3",
"mech-syntax/matrix3",
]
matrix3x2 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix3x2",
"mech-interpreter/matrix3x2",
"mech-syntax/matrix3x2",
]
matrix4 = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrix4",
"mech-interpreter/matrix4",
"mech-syntax/matrix4",
]
matrix_horzcat = ["matrix"]
matrix_vertcat = ["matrix"]
matrixd = [
"matrix",
"matrix_horzcat",
"matrix_vertcat",
"mech-core/matrixd",
"mech-interpreter/matrixd",
"mech-syntax/matrixd",
]
mechfs = ["formatter"]
mika = [
"mech-syntax/mika",
"mech-core/mika",
]
no_std = [
"mech-core/no_std",
"mech-interpreter/no_std",
"mech-syntax/no_std",
]
numbers = [
"mech-core/numbers",
"mech-interpreter/numbers",
"mech-syntax/numbers",
]
pretty_print = [
"mech-core/pretty_print",
"mech-interpreter/pretty_print",
"mech-syntax/pretty_print",
]
program = [
"mech-core/program",
"mech-interpreter/program",
"mech-syntax/program",
]
r64 = [
"rational",
"mech-core/r64",
"mech-interpreter/r64",
"mech-syntax/r64",
]
rational = [
"i64",
"numbers",
"mech-core/rational",
"mech-interpreter/rational",
"mech-syntax/rational",
]
record = [
"tuple",
"kind_annotation",
"mech-core/record",
"mech-interpreter/record",
"mech-syntax/record",
]
repl = []
row_vector2 = [
"matrix",
"matrix_horzcat",
"mech-core/row_vector2",
"mech-interpreter/row_vector2",
"mech-syntax/row_vector2",
]
row_vector3 = [
"matrix",
"matrix_horzcat",
"mech-core/row_vector3",
"mech-interpreter/row_vector3",
"mech-syntax/row_vector3",
]
row_vector4 = [
"matrix",
"matrix_horzcat",
"mech-core/row_vector4",
"mech-interpreter/row_vector4",
"mech-syntax/row_vector4",
]
row_vectord = [
"matrix",
"matrix_horzcat",
"mech-core/row_vectord",
"mech-interpreter/row_vectord",
"mech-syntax/row_vectord",
]
run = ["mechfs"]
serde = [
"mech-core/serde",
"mech-interpreter/serde",
"mech-syntax/serde",
]
serve = ["mechfs"]
set = [
"mech-core/set",
"mech-interpreter/set",
"mech-syntax/set",
]
signed_ints = [
"numbers",
"mech-core/signed_ints",
"mech-interpreter/signed_ints",
"mech-syntax/signed_ints",
]
state_machines = [
"functions",
"mech-interpreter/state_machines",
]
statements = [
"mech-core/statements",
"mech-interpreter/statements",
"mech-syntax/statements",
]
statements_default = [
"variable_assign",
"variable_define",
"kind_define",
]
stdlib = [
"bool",
"string",
"u8",
"u16",
"u32",
"u64",
"u128",
"i8",
"i16",
"i32",
"i64",
"i128",
"f32",
"f64",
"c64",
"r64",
"set",
"map",
"table",
"tuple",
"record",
"atom",
"enum",
"matrix1",
"matrix2",
"matrix3",
"matrix4",
"matrix2x3",
"matrix3x2",
"row_vector2",
"row_vector3",
"row_vector4",
"vector2",
"vector3",
"vector4",
"row_vectord",
"vectord",
"matrixd",
"subscript_range",
"logical_indexing",
"swizzle",
"subscript_formula",
"dot_indexing",
"variable_define",
"variable_assign",
"kind_define",
"kind_annotation",
"variables",
"functions",
"formulas",
]
string = [
"mech-core/string",
"mech-interpreter/string",
"mech-syntax/string",
]
subscript = [
"mech-core/subscript",
"mech-interpreter/subscript",
"mech-syntax/subscript",
]
subscript_default = [
"subscript_slice",
"subscript_range",
"logical_indexing",
"swizzle",
"subscript_formula",
"dot_indexing",
]
subscript_formula = [
"subscript_slice",
"formulas",
"mech-core/subscript_formula",
"mech-interpreter/subscript_formula",
"mech-syntax/subscript_formula",
]
subscript_range = [
"subscript_slice",
"vectord",
"mech-core/subscript_range",
"mech-interpreter/subscript_range",
"mech-syntax/subscript_range",
]
subscript_slice = [
"subscript",
"vectord",
"mech-core/subscript_slice",
"mech-interpreter/subscript_slice",
"mech-syntax/subscript_slice",
]
swizzle = [
"subscript",
"mech-core/swizzle",
"mech-interpreter/swizzle",
"mech-syntax/swizzle",
]
symbol_table = [
"mech-core/symbol_table",
"mech-interpreter/symbol_table",
"mech-syntax/symbol_table",
]
table = [
"vectord",
"record",
"kind_annotation",
"mech-core/table",
"mech-interpreter/table",
"mech-syntax/table",
]
trace = ["mech-interpreter/trace"]
tuple = [
"mech-core/tuple",
"mech-interpreter/tuple",
"mech-syntax/tuple",
]
u128 = [
"unsigned_ints",
"mech-core/u128",
"mech-interpreter/u128",
"mech-syntax/u128",
]
u16 = [
"unsigned_ints",
"mech-core/u16",
"mech-interpreter/u16",
"mech-syntax/u16",
]
u32 = [
"unsigned_ints",
"mech-core/u32",
"mech-interpreter/u32",
"mech-syntax/u32",
]
u64 = [
"unsigned_ints",
"mech-core/u64",
"mech-interpreter/u64",
"mech-syntax/u64",
]
u8 = [
"unsigned_ints",
"mech-core/u8",
"mech-interpreter/u8",
"mech-syntax/u8",
]
unsigned_ints = [
"numbers",
"mech-core/unsigned_ints",
"mech-interpreter/unsigned_ints",
"mech-syntax/unsigned_ints",
]
variable_assign = [
"statements",
"mech-core/variable_assign",
"mech-interpreter/variable_assign",
"mech-syntax/variable_assign",
]
variable_define = [
"statements",
"functions",
"mech-core/variable_define",
"mech-interpreter/variable_define",
"mech-syntax/variable_define",
]
variables = [
"variable_define",
"symbol_table",
"mech-core/variables",
"mech-interpreter/variables",
"mech-syntax/variables",
]
vector2 = [
"matrix",
"matrix_vertcat",
"mech-core/vector2",
"mech-interpreter/vector2",
"mech-syntax/vector2",
]
vector3 = [
"matrix",
"matrix_vertcat",
"mech-core/vector3",
"mech-interpreter/vector3",
"mech-syntax/vector3",
]
vector4 = [
"matrix",
"matrix_vertcat",
"mech-core/vector4",
"mech-interpreter/vector4",
"mech-syntax/vector4",
]
vectord = [
"matrix",
"matrix_vertcat",
"mech-core/vectord",
"mech-interpreter/vectord",
"mech-syntax/vectord",
]
whos = [
"pretty_print",
"variables",
"symbol_table",
]
[lib]
name = "mech"
path = "src/lib.rs"
[[bin]]
name = "interpreter2"
path = "src/bin/interpreter2.rs"
[[bin]]
name = "mech"
path = "src/bin/mech.rs"
[[bin]]
name = "mechc"
path = "src/bin/mechc.rs"
required-features = ["compiler"]
[[test]]
name = "bytecode"
path = "tests/bytecode.rs"
[[test]]
name = "interpreter"
path = "tests/interpreter.rs"
[dependencies.anyhow]
version = "1.0.102"
optional = true
[dependencies.ariadne]
version = "0.6.0"
[dependencies.base64]
version = "0.22.1"
[dependencies.bincode]
version = "2.0.1"
features = ["serde"]
[dependencies.chrono]
version = "0.4.44"
[dependencies.clap]
version = "4.5.60"
features = ["cargo"]
[dependencies.colored]
version = "3.1.1"
[dependencies.console]
version = "0.16.2"
optional = true
[dependencies.crossbeam-channel]
version = "0.5.15"
[dependencies.crossterm]
version = "0.29.0"
[dependencies.csv]
version = "1.4.0"
[dependencies.ctrlc]
version = "3.5.2"
[dependencies.include_dir]
version = "0.7.4"
features = ["glob"]
[dependencies.indexmap]
version = "2.13.0"
features = ["serde"]
[dependencies.indicatif]
version = "0.18.4"
[dependencies.mech-core]
version = "0.3.3"
default-features = false
[dependencies.mech-interpreter]
version = "0.3.3"
default-features = false
[dependencies.mech-syntax]
version = "0.3.3"
default-features = false
[dependencies.nom]
version = "7.1.3"
[dependencies.notify]
version = "8.2.0"
[dependencies.rand]
version = "0.9.2"
[dependencies.reqwest]
version = "0.13.2"
features = ["blocking"]
[dependencies.serde]
version = "1.0.228"
[dependencies.serde_derive]
version = "1.0.228"
[dependencies.serde_json]
version = "1.0.149"
[dependencies.sevenz-rust]
version = "0.6.1"
[dependencies.tabled]
version = "0.20.0"
[dependencies.tempfile]
version = "3.26.0"
optional = true
[dependencies.tokio]
version = "1.50.0"
features = ["full"]
[dependencies.warp]
version = "0.3.7"
features = ["compression"]
[dependencies.zip]
version = "5.1.1"
optional = true
[dev-dependencies.nalgebra]
version = "0.34.1"
[build-dependencies.winres]
version = "0.1.12"