Repository navigation
Closed
15 / 1515 of 15 issues completedLabels
backlogNot yet scheduledNot yet scheduledepicA multi-slice effort tracked through sub-issuesA multi-slice effort tracked through sub-issues
Description
Build relix, a command for Unix pipelines, on the Relix engine's published API alone. Design: docs/design.md.
The shape
- stdout is data, stderr is talk. Each command writes one thing to stdout.
- Commands:
run(the default),check,explain,optimize,trace,bundle,ir,provenance,fmt,catalog,drivers,connectors,doc,help,version,completion. - Relix text arrives from
-e, files or stdin. - Data arrives with
-i NAME=[FORMAT:]LOCATION(-is stdin). - Output is
tableon a terminal andtsvin a pipe;csv,ndjson,jsonandmarkdownare on-o. A machine format prints the last query unless--query=NAMEnames another. - The catalog comes from the directory tree.
.relix/catalog/*.relixfiles are found walking up to$HOME, with a nearer declaration winning. Project catalogs are trusted per directory, as direnv does. - Secrets come from the process environment or a user-only
profiles.json.-P/--profileselects a profile. - Exit codes distinguish usage, analysis, execution, environment and internal failures. SIGPIPE and SIGINT end a run cleanly.
- Packaging: jlink with an AppCDS archive, distributed through Homebrew and Scoop.
- One module, no library. The renderers, reports, script loader, profile loading and driver progress are internal packages of the command, and nothing is published to Maven Central. What the command needs goes into the command, or into the engine's published API when another embedder would need it too.
Engine API it needs
Still open: none.
Landed:
- Bind a relation to an input stream (CSV/TSV/JSON/NDJSON) with the connectors' parsers and schema inference relix-core#80: stream-backed inputs with the connectors' parsers and schema inference (S3).
- Resolve a source's relative path against the file that declares it relix-core#81: a relative source path resolves against its declaring file (S4).
- Bound query parameters ($name) supplied outside the script text relix-core#82: bound query parameters (S10).
- Closing a result stream cancels in-flight work (JDBC statement, HTTP fetch) relix-core#83: closing a stream cancels in-flight work (S2).
- Move the reference lookup into relix-docs: functions and front-end pages in one index relix-core#95: the reference lookup in
relix-docs(S9, adopted in Adopt the relix-core#102 engine changes and drop their workarounds #37). - Refuse a blocking operator over an unbounded Relix.input at plan time relix-core#98: a blocking operator over an unbounded
Relix.inputis refused at plan time (S3, adopted in Adopt the relix-core#102 engine changes and drop their workarounds #37). - Keep comments, and offer the ASCII spelling, when printing a script relix-core#99: comments kept, and the ASCII spelling, when printing a script (S8, adopted in Adopt the relix-core#102 engine changes and drop their workarounds #37).
- Relation.render() of an optimised CLOSURE writes a seed the parser cannot read relix-core#100:
Relation.render()of an optimisedCLOSUREparses back (S7, adopted in Adopt the relix-core#102 engine changes and drop their workarounds #37). - Bind a parameter from text: convert a String to the parameter's analysed type relix-core#101: a parameter's text read as its analysed type (S10).
- Print a comment at the end of a Markdown table row back on that row relix-core#106: a comment at the end of a table row printed back on that row (S8, with Align a table row that ends in a comment, and the rows after it #38).
- ScriptPrinter drops a blank line between a comment and the statement after it relix-core#107: a blank line between a comment and the statement after it kept when printing (S8, with Re-enable fmt's test that a blank line after a comment is kept #40).
Shipped
Merged to develop:
| Slice | Issue | Pull request |
|---|---|---|
| S0a build, engine pin, boundary test, CI | #2 | #19, #21 |
| S0b console support as internal packages | #3 | #20 |
| S1 command skeleton | #4 | #22 |
| S2a TSV and NDJSON renderers | #5 | #34 |
| S2 output and pipe discipline | #6 | #34 |
| S4 catalog discovery | #8 | #35 |
| S5 catalog trust | #9 | #35 |
| S6 catalog inspection | #10 | #35 |
| S7 report commands | #11 | #36 |
S8 fmt |
#12 | #36, #38, #40 |
| S9 management commands | #13 | #36 |
S3 -i data inputs |
#7 | #34, #37 |
S10 -a parameters |
#14 | #39 |
| S11 packaging and release | #15 | #41 |
| S12 docs artifact: the command-line guide | #16 | #42 |
Outstanding
None: every slice has shipped.
Suggested order: S0a → S0b → S1 → S2a → S2 → S4+S5 → S7 → S9 → S6 → S8 → S3 → S10 → S11 → S12 shipped. S11's dry-run release runs once it reaches main.
Metadata
Metadata
Assignees
Labels
backlogNot yet scheduledNot yet scheduledepicA multi-slice effort tracked through sub-issuesA multi-slice effort tracked through sub-issues
Activity
david-Darkcollective commentedon Oct 12, 2026
Every slice has shipped and the engine API it needed has landed. S11's release has now run on
main: v0.1.0 and v0.1.1 are published with builds for every platform and the docs zip. Closing the epic.