Describe in FQL
Define the data you need, the conditions to wait for, and the shape to return.
Declarative-first data automation
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
Describe the data, run it against the right runtime, and get structured results back — the program doesn't change when the source does.
Define the data you need, the conditions to wait for, and the shape to return.
Execute the same program against static documents, rendered pages, APIs, or host values.
Predictable objects and arrays, ready for scripts, tests, services, or jobs.
Visual Studio Code, Playground, CLI, Go or JavaScript embedding, Worker, or Lab. Same language, no rewrite.
Why Ferret
Ferret is for developers who need repeatable data programs that move from local experiments to production without rewriting the logic for each runtime.
Compose data with match, for, filter, query, and waitfor; use constrained mutable state only when a workflow needs it.
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.
Run FQL inside Go or JavaScript applications. Provide host functions and control the capabilities scripts can access.
The core runtime stays small. Modules add browsers, documents, databases, protocols, and other integrations when you need them.
Get started
Run examples in the v2 playground, nothing to install.
Open playground Editor pathGet language intelligence, diagnostics, formatting, Run and Debug actions, breakpoints, and a bundled Ferret daemon.
Install from Marketplace Local pathRun FQL locally, automate tasks, work with local files.
Install locally Production pathEmbed Ferret in Go or JavaScript, or use a self-hosted Worker.
Choose an integrationEcosystem
Use Ferret from the terminal, embed it in Go or JavaScript, automate browsers, or connect it to services and internal tools.
The declarative-first, expression-oriented language, compiler, standard library, and embeddable execution engine for FQL programs.
Runtime repo Core Runtime bindingThe Ferret runtime compiled to WebAssembly and exposed to Node.js and modern browsers through @montferret/ferret.
JavaScript docsCommand-line tooling for running scripts locally, testing ideas, and wiring Ferret into shell workflows.
CLI repo Developer tools Browser IDEA browser-based environment for trying FQL examples and sharing focused experiments.
Try Ferret Developer tools TestingA test runner for Ferret-powered UI and data checks, built for repeatable scenarios.
Lab repo Developer tools Official integrationLanguage intelligence, diagnostics, formatting, execution, and native debugging for FQL, backed by the bundled Ferret daemon.
Visual Studio Code docsFAQ
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.
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.
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.
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.
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.
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.
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.
Learn more