Skip to content

Current limitations

LimitationWhyWorkaround
Record update syntax ...recordParser accepts it; runtime throws.Construct a new record explicitly with the fields you want to change.
extern calls in JIT modeJIT has no Salesforce runtime.Run these code paths with vertex run --sf --org <alias> or from a deployed Apex test.
SOQL in Vertex sourceSOQL is not yet part of the language.Wrap the specific queries you need with extern fn around Database.query / queryWithBindings.
while and do/while statementsIntentional: iteration is for..in, recursion, or combinators.Use for..in, List.fold, or recursion.
Mutating methods on collectionsAll collection operations are pure.Rebind: let xs = xs.add(item).
null in user codeIntentional: absence is Option<T>.Use Option<T> with Some / None.
throw / try / catch in user codeIntentional: failure is Result<T, E>.Return Result<T, E> and propagate with ?.
Class inheritanceIntentional: composition over inheritance.Model shared behaviour with interfaces; share implementation via module-level functions.
Static methods on typesIntentional: module-level fn only.Put “static” helpers at module level; readers see them as regular functions.
Parameterised testsNot yet supported.Loop inside an @Test function over a list of cases.
Before/after hooks in testsNot yet supported.Factor shared setup into a helper function called at the top of each test.
FormatterNot yet available.Follow the examples in the tour for idiomatic style.
Raw string literalsNot yet supported.Use explicit escape sequences.
VS Code / JetBrains extensionsNot yet available.Any LSP-capable editor can drive vertex lsp. Zed has a purpose-built extension.

If you hit a limitation in a real project, file an issue at vertex-run/vertex with a minimal reproducing example. The list above is curated; a “thing I tried and it didn’t work” that is not listed is almost always a bug worth reporting.