View all results
Ferret

Declarative-first data automation

Embed your data logic

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

FQL

One language from source to result

Describe the data, run it against the right runtime, and get structured results back — the program doesn't change when the source does.

Describe in FQL

Define the data you need, the conditions to wait for, and the shape to return.

Run it anywhere

Execute the same program against static documents, rendered pages, APIs, or host values.

Get structured output

Predictable objects and arrays, ready for scripts, tests, services, or jobs.

Move between tools

Visual Studio Code, Playground, CLI, Go or JavaScript embedding, Worker, or Lab. Same language, no rewrite.

Why Ferret

Data automation without custom glue

Ferret is for developers who need repeatable data programs that move from local experiments to production without rewriting the logic for each runtime.

Declarative-first data logic

Compose data with match, for, filter, query, and waitfor; use constrained mutable state only when a workflow needs it.

Capability-based execution

The same program can query a rendered page, an API response, a database row, or a file. FQL adapts to what each value can do.

Embeddable runtime

Run FQL inside Go or JavaScript applications. Provide host functions and control the capabilities scripts can access.

Core plus optional modules

The core runtime stays small. Modules add browsers, documents, databases, protocols, and other integrations when you need them.

Ecosystem

Runtime, tools, and services for FQL

Use Ferret from the terminal, embed it in Go or JavaScript, automate browsers, or connect it to services and internal tools.

FAQ

Frequently asked questions

Why not just use Python or Playwright?

Python and Playwright are excellent general-purpose tools, while Ferret is focused on structured data extraction and repeatable automation.

Instead of writing browser-control code and data-shaping glue for every workflow, Ferret lets you describe the data you want and run that description through a dedicated runtime.

Use Python when you need full control. Use Ferret when the goal is structured extraction, repeatable automation, and a workflow that should stay readable over time.

Why not ask AI to write a scraper?

For a one-time task, that may be enough.

Ferret is useful when the result needs to become more than a disposable script: something you can review, run again, embed in another application, test, debug, and maintain.

AI can help write extraction logic. Ferret gives that logic a smaller, more predictable shape and a runtime designed specifically for structured data workflows.

Is Ferret production-ready?

Ferret v2 is currently in alpha, so the language, tools, and module ecosystem are still evolving.

It is ready for experimentation, feedback, prototypes, internal tools, and early integration work. For production use, expect changes and pin versions carefully.

Ferret v1 is the previous stable line and may still be suitable for existing projects that already depend on it. New projects should start with Ferret v2, since that is where active language, runtime, and ecosystem development is happening.

Is Ferret only for web scraping?

No. Ferret is designed for structured data workflows that benefit from declarative-first, expression-oriented logic and a dedicated execution environment.

Web scraping is a common use case, but Ferret can also work with APIs, databases, files, or any values your own application exposes to it.

How does Ferret compare to other data extraction tools?

Most extraction tools are libraries inside a general-purpose language, or hosted point-and-click services. Ferret is a small language plus a runtime.

That difference is the point: the same FQL program can run in the playground, from the CLI, inside a Go or JavaScript application, or on a self-hosted Worker without being rewritten. Waiting, timeouts, and error behavior are part of the language rather than glue code around it.

If you need arbitrary application logic, a general-purpose language is a better fit. If portable data automation is the product, Ferret keeps the core declarative, testable, and embeddable.

Can I embed Ferret in my own application?

Yes. Ferret can be embedded natively in Go applications or used from Node.js and modern browsers through the @montferret/ferret JavaScript package. Remote execution is also available through the self-hosted Worker service.

This allows you to integrate Ferret into applications, jobs, or internal tools while maintaining control over execution boundaries and the capabilities exposed by the selected host.

That means the same language can be used for local scripts, automation workers, browser-based experiments, and application-specific data workflows.

Embedding is useful when you want users, teams, or internal tools to describe data extraction logic without hard-coding every workflow directly into the host application.

Is there any tooling for Ferret?

Yes. Ferret includes a CLI for running, formatting, validating, and debugging FQL programs.

The official Visual Studio Code integration adds language intelligence, diagnostics, formatting, execution, and debugging directly in the editor. It includes the matching Ferret daemon, so normal use does not require a separate daemon installation.