Skip to content

Feather

Effortlessly add a command shell to your application: for your users, and your agents.

Feather Logo

Interactive Playground

Try Feather directly in your browser - powered by WebAssembly

Feather Script
Canvas

What Feather is a good fit for

Feather is built for short, interactive programs:

  • Give agents access to your program - like Chrome DevTools, but for your application
  • Configure servers at runtime - hot-reload configuration without restarts
  • Quake-style consoles - add developer consoles to games and applications
  • Configuration file format - use a real programming language for config
  • User customization - let users script and extend your software

Just like Bash and zsh let you drive a Unix system, Feather lets you drive your application in the same spirit.

When to use something else

Feather is not suited for programming in the large.

Features that support this are omitted intentionally:

No I/O by default: Feather cannot communicate with the outside world, until you explicitly provide facilities for doing so.

No packaging/import system: if your Feather program grows large, you need to decide whether you move this logic to the host, or provide the means of structuring code, like sourcing scripts from somewhere yourself.

Performance will never be the top priority: Feather is there to let you elegantly call code in your probably already optimized host application. A Feather script becoming slow is a sign that you need to move logic to the host application.

If you need large scale, performant programming in an embeddable programming language, you are looking for Lua.

Feather is lightweight glue

Feather is designed to be embedded into a host language.

The core implementation provides the language semantics, but all memory allocations, I/O, Unicode and floating point operations are provided by the host.

Chances are that if you are embedding a scripting language in 2025, your host language already has an implementation of everything and duplicating Unicode tables or getting two event loops to play nice with each other is more trouble than it's worth.

Feather provides libraries for using Feather directly in your programming language.

Supported Platforms

Go

The reference host implementation, with an easy embedding API.

Quickly expose functions and structs from your program for manipulation through Feather.

Get started →

JavaScript / WASM

Run in browsers and Node.js via WebAssembly. Works anywhere WASM runs.

Host bindings for the node.js and the browser are provided.

Get started →

Swift

Host bindings for Swift, to allow end users of apps to change their behavior at runtime.

Make any app as configurable as neovim and Emacs.

Java

Java is pretty dynamic already, but not jshell is clunky and other languages bring their own implementation of everything.

Target use cases: runtime configuration of webserver, user-scriptable cross-platform GUI apps.

Intentionally not supported Platforms

Ruby

Ruby can already be programmed at runtime in Ruby.

The introduction of Boxes in Ruby 4, and mruby cover all possible use cases.

Python

Python is already dynamic and untrusted user code can be executed in WASM-based Python interpreters.