Reference¶
Object conversion¶
To convert values between starlark and Python, JSON is currently being used as an intermediate format, which defines the scope of what is convertible. This, however, is subject to change.
References to Source Locations¶
- class starlark.ResolvedSpan¶
- begin¶
A
ResolvedPos.
- end¶
A
ResolvedPos.
Diagnostics¶
- exception starlark.StarlarkError¶
- class starlark.Lint¶
- __str__()¶
Return str(self).
- resolved_location¶
- severity¶
A
EvalSeverity.
Dialect¶
- class starlark.Dialect¶
-
- enable_types¶
A value of type
DialectTypes.
Note
These attributes are only writable (not readable) for the moment.
Type checking¶
- class starlark.Interface¶
Opaque for now.
AST¶
Values¶
- class starlark.OpaquePythonObject(obj)¶
An ‘opaque’ Python object that can be passed to Starlark. It cannot be interacted with from the Starlark side. Upon conversion from Starlark to Python, the original wrapped object reappears.
Added in version 2025.2.5.
Decimal¶
This package preserves Python Decimal values without precision loss.
Decimals passed from Python stay as precise decimal values in Starlark and
round-trip back to Python as Decimal objects.
>>> import decimal
>>> import starlark as sl
>>> glb = sl.Globals.extended_by([sl.LibraryExtension.RustDecimal])
>>> mod = sl.Module()
>>> # Pass Python decimals to Starlark
>>> mod["amount"] = decimal.Decimal("100.25")
>>> program = """
... # Create decimals in Starlark with RustDecimal()
... result = amount * 2 + RustDecimal('0.75')
... # Control precision with scale() and round_dp()
... pi = RustDecimal("3.14159")
... pi.scale() # Returns 5 (number of decimal places)
... pi.round_dp(2) # Returns RustDecimal("3.14")
... result
... """
>>> ast = sl.parse("prog.star", program)
>>> val = sl.eval(mod, ast, glb)
>>> assert val == decimal.Decimal("201.25")
Implementation notes:
Starlark
RustDecimaloperations use rust_decimal semantics (28 decimal places maximum, Banker’s rounding)Python
Decimaloperations use Python semantics (configurable via context)Conversion preserves exact values without precision loss
Python’s
decimal.getcontext()is not consulted during conversionUse
round_dp(n)to explicitly control decimal places before or after conversion
Globals¶
Modules¶
- class starlark.Module¶
–
- __getitem__(key, /)¶
Return self[key].
- __setitem__(key, value, /)¶
Set self[key] to value.
- freeze() FrozenModule¶
–
- class starlark.FrozenModule¶
- call(name, *args, **kwargs)¶
Added in version 2025.2.2.
Changed in version 2025.2.3: Added support for keyword arguments.
- call_with(options, name, /, *args, **kwargs)¶
Like
call(), but takes anEvalOptionsbundle carrying resource limits and cooperative cancellation, and returns anEvalResult. Because options are explicit,**kwargsis passed through unchanged to the Starlark callee — there are no reserved keyword names.
Loaders¶
- class starlark.FileLoader(load_func: Callable[[str], FrozenModule])¶
–
Parsing and Evaluation¶
- class starlark.EvalOptions(*, check_cancelled: Callable[[], bool] | None = None, max_callstack_size: int | None = None)¶
–
Bundle of per-evaluation options passed to
eval_with()andFrozenModule.call_with(). All fields are keyword-only in the constructor and read-only afterwards. Instances are safe to share across evaluations.- check_cancelled¶
Optional zero-argument callable invoked periodically during evaluation (roughly every 1000 bytecode instructions). A truthy return aborts evaluation with
StarlarkError; a raised Python exception propagates to the caller. The callback must not access the module passed toeval_with(): the module is locked during evaluation and re-entry will deadlock. Cancellation is scoped to a singleeval_with()/FrozenModule.call_with()call; nestedeval_with()calls (e.g. from aFileLoader) need their own callback.
- max_callstack_size¶
Optional positive integer cap on Starlark call stack depth.
- class starlark.EvalResult¶
Rich result of an evaluation returned by
eval_with()andFrozenModule.call_with(). Currently wraps only the return value; future post-eval readouts (tick counts, profile output, coverage) will land as additional read-only fields.- value¶
The value returned by the evaluation, after Object conversion.
- starlark.parse(filename: str, content: str, dialect: Dialect | None = None) AstModule¶
–
Parse Starlark source code as a string and return an AST.
- starlark.eval(module: Module, ast: AstModule, globals: Globals, file_loader: FileLoader | None = None) object¶
–
- Returns:
the value returned by the evaluation, after Object conversion.
If you need to pass evaluator options (cooperative cancellation, resource limits), use
eval_with()instead.
- starlark.eval_with(options: EvalOptions, module: Module, ast: AstModule, globals: Globals, /, file_loader: FileLoader | None = None) EvalResult¶
–
Like
eval(), but takes anEvalOptionsbundle carrying resource limits and cooperative cancellation, and returns anEvalResultwrapping the evaluation’s return value.- Parameters:
options – An
EvalOptionsbundle. SeeEvalOptionsfor the semantics of each field.- Returns:
An
EvalResultwhosevalueis the evaluation’s return, after Object conversion.