A list of awesome things related to the Starlark language.
Starlark is a simple, Python-like language designed to be embedded in another application to provide configuration or scripting abilities.
-
There are 3 known implementations of the Starlark language:
- starlark-go - an implementation in Go.
- starlark-rust - an implementation in Rust.
- starlark/java - an implementation in Java built for Bazel, that may not be suitable for use in other applications.
-
Bindings:
- HarikrishnanBalagopal/starlark-webasm - a webassembly package for starlark-go.
- python-starlark-go - Python bindings for Starlark in Go.
- starlark-pyo3 - Python bindings for Starlark in Rust.
- A practical introduction to the Starlark language by Laurent Le Brun, 2024.
- An Overview of the Starlark language by Laurent Le Brun, 2024.
- Embedding Starlark (Part 1) — Configure Go Programs with Starlark Scripts by Vladimir Vivien, 2023.
- GothamGo 2017: A Go implementation of the Skylark Configuration Language by Alan Donovan, 2017.
- Buildifier - The official code formatter & linter. It can also apply automated fixes (e.g. remove unused loads).
- Moonlark - Starlark parser in C with Lua bindings. py2star - a basic converter from Python to Starlark.
- Stardoc - A documentation generator originally designed for Bazel.
- Starlark Online Playground - A web playground for Starlark.
- Starlark Playground - Starlark Playground is a web-based starlark editor. It uses the golang implementation of starlark running on a server to present a monaco editor set to python syntax.
Libraries that can be useful for the applications that embed Starlark:
- Skycfg - a library for Starlark to generate Protocol Buffer messages.
- starlark-go-nethttp - a wrapper
around a minimal subset of
net/http package
for use within starlark-go. - starlark-re - an implementation
of Python's
re
module for Starlark in Go. - Starlet - a Go wrapper for the Starlark in Go that simplifies script execution, provides data conversion, and offers useful Starlark libraries and extensions.
- Starlib - Qri's standard library for Starlark in Go that includes packages for regular expressions, reading XLSX documents, parsing ZIP archive, and other functionality.
- Starlight - a wrapper around the Starlark interpreter in Go.
- starstruct - a library for converting
between Starlark in Go's
StringDict
type and Go structs. - Startype - a library that implements two-way conversion between Starlark in Go API types and regular Go types.
Some IDEs have a plugin for Bazel. Otherwise, consider using a Python mode.
- Starpls - a language server for Starlark.
- /r/starlark/ - a subreddit for Starlark.
List of projects that use Starlark.
- AsCode - a tool to define infrastructure as code using the Starlark language on top of Terraform.
- AutoKitteh - a developer platform for workflow automation and orchestration. It is a code-based alternative to no/low-code platforms. Workflows can be defined using Starlark.
- Bazel - a fast, scalable, multi-language and extensible build system. Starlark has been designed for Bazel.
- Buck2 - a build system from Meta, using Starlark in a similar way as Bazel.
- bramble - a purely functional build system and package manager, using Starlark as the configuration language.
- Copybara - a tool for transforming and moving code between repositories. It embeds Starlark to configure the workflow.
- clace - web app development and deployment platform for internal tools. It allows easy and secure hosting of multiple web apps, in any language/framework, on a single machine.
- Delve - a debugger for the Go programming language, aiming to provide a simple, full featured debugging tool for Go. Delve uses Starlark as a a scripting language.
- Drone - a self-service Continuous Delivery platform. It supports Starlark scripting as an alternate to yaml configurations.
- envd - a CLI to build the docker images for machine learning development and production environments.
- FizzBee - a system design language for verifying distributed systems in cloud, micro-services, and event-driven applications. It uses Starlark to offer an intuitive, Python-like syntax, making it accessible for everyday software developers.
- Isopod - created by Cruise Automation is a DSL framework for Kubernetes configuration. It renders Kubernetes objects as Protocol Buffers.
- Kurtosis - a developer tool for engineers to package and run environments of containerized services for development, testing, and production. Starlark is used as the DSL for defining those environments in a deterministic, portable, and readable way, without compromising usability for complex cases.
- lucicfg - a tool for generating low-level configuration files from Starlark, used by Chromium CI.
- Pixlet - a runtime and UX toolkit for generating animations for small LED displays, such as Tidbyt. Starlark is used to write applets whose outputs are WebP animations.
- gnetlark - a web server with handlers written in Starlark.
- qri is versioned, scriptable, exportable, collaborative datasets. It uses Starlark to describe transformations.
- realm - an Adversary Emulation Framework with a focus on scalability, reliability, and automation. It is highly performant and is designed for engagements of any size. See how they use Starlark.
- recur - a command-line tool that retries a command with exponential backoff plus jitter to mitigate the thundering herd problem. The success condition is written as a Starlark expression.
- Tilt - manages local development instances for teams that deploy to Kubernetes. Tilt files are written in Starlark.
- Vela - a continuous integration and delivery platform. It supports Starlark scripting as an alternative to YAML.
- VGS - a data security platform that simplifies secure data storage, compliance, and sharing through tokenization and a vault-like infrastructure. Read their announcement and their documentation to see how they use Starlark to let their customer process sensitive data in a secure way.
- ytt - a templating tool, built on top of Starlark, that understands YAML structure allowing you to focus on your data instead of how to properly escape it. Read also IBM's blog post about it.