Skip to content

Ferret

Declarative data automation. Extract with intent.

Ferret is an open-source, declarative-first, expression-oriented language and embeddable runtime for querying, transforming, and automating structured data — whether it lives in your application, on the web, behind an API, in a database, or in a file.

Website · Documentation · Getting Started · Module Registry

let page = web::html::open(
    "https://mockery.ferretlang.org/scenarios/ecommerce/products/"
)

let products = page[~ css`.product-card`]

return for product in products
    return {
        name: product[~ css`.product-title`],
        price: product[~ css`.product-price`],
        url: product[~ css`:attr("href", .product-link)`]
    }

Ferret keeps data logic in FQL while the host decides which capabilities are available. Run scripts locally, embed the runtime into an application, extend it with modules, or expose a configured runtime to external tooling.

Run Ferret where the logic needs to live

Mode Use it for
CLI Local scripts, automation, CI, formatting, inspection, debugging, and module workflows.
Go Embed the native Ferret runtime and expose application data, functions, resources, and capabilities directly to FQL.
JavaScript / WebAssembly Run Ferret from Node.js or modern browsers through the official WASM runtime.
Remote runtimes Execute and debug against configured runtimes through the Universal API and Wire.

Ferret is designed to complement general-purpose languages rather than replace them. The host application owns integrations, resources, and the execution boundary; FQL owns portable data querying, transformation, synchronization, and automation logic.

The ecosystem

Area Projects
Language & runtimes Ferret — language, compiler, VM, standard library, and embeddable Go runtime.
ferret-js — Ferret runtime for JavaScript, browsers, and Node.js, powered by WebAssembly.
Developer tools CLI — command-line workflow for FQL.
Lab — test runner for Ferret programs and automation scenarios.
ferretd — developer service for language intelligence, execution, debugging, module resolution, and runtime inspection.
Editorium — official editor integrations for Ferret.
Runtime integration Universal API — common contracts for runtimes, compiled plans, sessions, output, diagnostics, and debugging.
Wire — remote runtime protocol and Go SDK for executing and debugging Ferret across a transport boundary.
Worker — containerized Ferret runtime for remote execution.
Modules & ecosystem Contrib — official optional modules and integrations.
Registry — discover modules and the documentation published with their releases.
Barn — registry infrastructure behind the Ferret module ecosystem.

A small language with a host-controlled runtime

Ferret started with web extraction and browser automation, but the core model is broader: FQL operates on values and capabilities supplied by its environment.

That separation lets the same language work with application objects, documents, APIs, databases, browser-backed pages, files, and custom resources without turning the language itself into a collection of hard-coded integrations.

Ferret is especially useful when data logic should be portable, reviewable, testable, and able to evolve independently from the host application.

Ferret v2

Ferret v2 is currently in active alpha development.

v2 expands Ferret with a more complete language, a redesigned runtime and embedding model, reusable compiled plans and isolated sessions, modules and registry infrastructure, modern debugging support, and additional host environments.

New users should start with v2. Alpha releases are intended for experimentation, feedback, prototypes, internal tools, and early integrations; language and API details may still change before the stable release.

Read the documentation · Run your first script · Follow Ferret releases

Contributing

Ferret is open source, and contributions are welcome across the language, runtime, tooling, modules, documentation, and ecosystem projects.

Start with the repository that interests you, join the conversation in GitHub Discussions, or visit the contact page for help, bug-reporting guidance, security contacts, and other ways to get involved.

Contributors

Thanks to everyone who has helped build Ferret.

Ferret contributors

Pinned Loading

  1. cli cli Public

    Ferret CLI

    Go 26 6

  2. ferret ferret Public

    Declarative data automation language and Go runtime for structured extraction workflows.

    Go 6k 324

  3. lab lab Public

    Test runner for Ferret

    Go 13 3

  4. contrib contrib Public

    A curated collection of optional modules for Ferret, with additional functions, types, and integrations.

    Go 1

  5. chromium chromium Public

    Dockerized headless Chromium

    Shell 16 8

  6. editorium editorium Public

    Official editor integrations for Ferret.

    TypeScript

Repositories

Showing 10 of 30 repositories
  • editorium Public

    Official editor integrations for Ferret.

    MontFerret/editorium's past year of commit activity
    TypeScript 0 Apache-2.0 0 0 0 Updated Sep 16, 2026
  • ferret Public

    Declarative data automation language and Go runtime for structured extraction workflows.

    MontFerret/ferret's past year of commit activity
    Go 6,011 Apache-2.0 324 11 (3 issues need help) 1 Updated Sep 16, 2026
  • .github Public
    MontFerret/.github's past year of commit activity
    0 0 0 0 Updated Sep 16, 2026
  • ferret-js Public

    Ferret runtime for JavaScript, browsers, and Node.js.

    MontFerret/ferret-js's past year of commit activity
    TypeScript 7 Apache-2.0 1 1 1 Updated Sep 16, 2026
  • ferretd Public

    A long-running Ferret developer service that provides language intelligence, script execution, debugging, module resolution, and runtime inspection for tools such as the CLI, Lab, and editor integrations.

    MontFerret/ferretd's past year of commit activity
    Go 0 Apache-2.0 0 0 0 Updated Sep 16, 2026
  • montferret.github.io Public

    Website for Ferret project

    MontFerret/montferret.github.io's past year of commit activity
    SCSS 2 MIT 7 0 0 Updated Sep 16, 2026
  • worker Public

    Containerized Ferret worker

    MontFerret/worker's past year of commit activity
    Go 15 Apache-2.0 8 12 (2 issues need help) 1 Updated Sep 16, 2026
  • cli Public

    Ferret CLI

    MontFerret/cli's past year of commit activity
    Go 26 Apache-2.0 6 2 0 Updated Sep 16, 2026
  • lab Public

    Test runner for Ferret

    MontFerret/lab's past year of commit activity
    Go 13 Apache-2.0 3 1 (1 issue needs help) 0 Updated Sep 16, 2026
  • api Public
    MontFerret/api's past year of commit activity
    Go 0 Apache-2.0 0 0 0 Updated Sep 15, 2026