It's Shannon. Let's print a query out. You built this with the filter bar, the way you always do. Now press the braces. Same view. Same rows. Same engine. This is only what you already said, written down.
What the builder was saying all along.
Every saved view in RowFold is already a query. RQL prints it as a sentence — the same rows, the same engine, in words you can read, diff and paste into a message. It is never the first way to build anything, and never required.
{ } control and the search box · reads only, no write verbs · builders unchangedA receipt, not a source file
You build a view the way you always do — filter chips, a sort, some columns. Press the braces and the same thing is written down:
Invoices
where Status is not Paid and Due in last 30 days
sort by Due asc
Same view, same rows, same engine. Nothing was replaced and nothing new ran — this is a printout of a decision you already made, which is why it opens read-only and why most people will never open it at all.
That button sits on the view toolbar beside Filter and Sort, on every table in every workspace, from today. The other door needs no button at all — type a clause into the grid’s search box and it takes it.
Both appear wherever you can already reshape the view: any admin, and anyone on a personal view of their own. Pressing it reads — there are no write verbs in the language, so the worst it can do is show you a sentence.
You never start from an empty box
Two things hand you a statement already written.
- The filter bar you were already using prints one — press the braces and your chips, your sort and your layout are written down.
- The search box takes one. Type a clause instead of a term and it lands as ordinary filter chips.
Which matters for a reason that has nothing to do with convenience. “Won deals this quarter” does not say which date it means — a deal has a created date, a closed date and a paid date, and something has to choose. Every other product makes that choice invisibly. Printed as a statement, the choice is a word you can see and change:
Deals
where Stage is Won
during Created in this quarter vs previous ← its guess. yours to change.
Fifteen keystrokes, and the rest is Tab
The honest measure of “is it easy to write” is how many keystrokes are not Tab. The grammar is keyword-led so that at every position the legal next thing is a short, typed list — and that list is the visual builder's own dropdown, rendered inline. Same eligibility rules, same source, so autocomplete is never a second opinion about what the server can run.
before after in last between is empty> < >= <= betweenis in — then that field's actual optionsgroup byonly fields the database can group onsum ofonly numeric fieldshavingonly the aliases you declared in showNames in the text, ids underneath. Rename a field and every mention of it re-prints — forty saved reports do not break.
Two doors, pointing opposite ways
The { } control on the view toolbar opens the panel that reads a query back. The grid search box you already use is the other door: type a clause instead of a term and the magnifier becomes braces, in place, with nothing moving. Press enter and it lands as ordinary filter chips.
It flips only when a clause keyword starts what you typed and it parses — so a customer genuinely called “Where & Sons Ltd” is still just a search, and the failure direction is always back to searching.
Say what no builder can
This is the part that is not convenience. RowFold's engine already compares periods, breaks a report down two ways at once, walks a relationship without a bridging column, and filters groups rather than records. No single screen of controls can offer all four at once. One sentence can:
Orders
where Status is Won and Amount > 10000
and {Company.Region} is "North West"
during Closed in this quarter vs previous
group by {Company.Region} across Stage
show sum of Amount as Revenue
having Revenue > 50000
sort by Revenue desc limit 20
One grammar, so you learn it once — but not one surface yet. A view carries the table, the where and the sort by, and a view is where the braces open today; the period, the second axis, the measures, the having and the limit are the report half of the same sentence. The grammar reads all of it and the panel prints all of it. Write a clause a view cannot carry and it comes back named, one line per clause — which is the third promise below, and worth checking rather than believing.
It tells you what it will do, before it does it
Press compile and it does not answer valid or invalid. It tells you what is about to happen — and most of that is good news, so it is not written like an apology:
Margin is a Formula, so this term can't compile to SQL. The run will sample — and say so.
3 of 4 terms pushed to the database.
period narrows first ceiling 20,000 sampled · and says soThis is the same discipline as the rest of the product: a read that hit its ceiling says it sampled rather than presenting a prefix as an answer. RQL just says it before you spend the time.
What it will not do
- It never writes. There are no create, update or delete verbs and there will not be. RQL narrows to a set; the bulk bar you already have acts on it.
- It never becomes the only way. Every visual builder stays exactly where it is. There is one small control on the toolbar and one clause you can type into search, and most people will use neither.
- It never quietly drops a clause. Write something a view has no control for and applying it says so, by name, instead of keeping the half it understood and telling you nothing.
- It never shows you what you cannot see. Completion is trimmed to your permissions on the server, per request, and a name you may not see is refused with the same message as a name that does not exist.
What the builder was saying all along.
So, where does one come from. Almost never from an empty box. The bar you were already using prints one. A saved report opens as one. An Ask answer carries one, behind the same braces. Or just say what you want, in plain words. It writes the statement, and hands it to you to check. Which is the point. It had to pick a date field, and now you can see which. Change a line, and it's yours.
Now, writing one. Start a name, and it offers what the builder would have offered. The same fields, the same routes, the same permissions. And it knows what each one is. On a date, it offers dates. On a number, it offers numbers. On a status, it offers the actual statuses. That whole line was fifteen keystrokes. The rest was the Tab key.
Now, the other way in. You've been using this box to search the table. Type a clause into it instead. The magnifier becomes braces, and nothing else moves. It only does that if what you typed actually parses. So a customer called Where is still just a customer. Press enter, and it lands as ordinary chips on the bar. The box writes. The panel reads it back.
Now, the part a builder can't reach. Every one of these already works in the engine. None of them fits on one screen of controls. Compare this quarter against the one before it. Break it down two ways at once. Walk across a link, without building a column to hold it. And filter the groups, not the records. That last one has never been askable at all.
Then, where it goes. The same sentence is a grid, a report, or a tile on a dashboard. What changes is the tail. Column widths, a frozen count, which totals sit at the foot. So you learn it once. And because a chip holds the field itself, not the word for it, renaming that field re-prints every mention of it. Forty reports don't break.
Margin is a Formula, so this term can't compile to SQL. The run will sample — and say so.
3 of 4 terms pushed to the database.
Now, before it runs. Compile doesn't just say yes or no. It tells you what it's about to do. Three of your four conditions go straight to the database. One can't, because it's a formula, so that part gets sampled instead. And it says so, out loud, before you ever see a number. Most of that is good news. It isn't an apology. It's the answer showing its working.
One thing it will never do. Say you write something the filter bar has no control for. It doesn't quietly drop it. It opens as text, stands the bar down, and points at the part. Because the alternative is a builder saving back its own idea of your report, and telling you nothing.
One last thing, and it's the one that matters. Everything you've just seen is optional. The filter bar hasn't moved. Neither has anything else. There are two small ways in, and most people will use neither. It selects. It never writes. It's your query, printed back to you.
Not built yet
The grammar covers more than the product yet exposes. These are specified and not shipped, and this page will say so until they are.
- Opening a report or a dashboard tile as a statement. The printer already reads one; there is no control on those pages yet.
- Ask carrying the statement it is about to apply, behind the same braces, so an answer can be checked rather than trusted.
- Plain English writing one. Say what you want, read back the statement, change the word you disagree with.
- Editing the trailing
with { }block. It prints; applying it is not offered, because a mistyped binding renders the wrong field rather than returning the wrong rows.