Release Notes
High-level descriptions of CsvPath Framework and FlightPath Data releases
Summer 2026 FlightPath - v1.1.89
Transfers and Multiple SFTP servers
Transfers can now be defined on a named-paths group (the old csvpath-by-csvpath method continues to be available) using a form
Csvpath statements can have any number of transfers triggered by csvpath end-state: valid, invalid, errors, all
All files can be transferred, including named printouts,
jinja()output, and parquet filesSource data (from named-files) can be transferred, even though it is not a run result
Transfers can be sent to any location in S3, SFTP, Azure Blob, or Google Cloud Storage
Any number of SFTP servers can be added to named-files and named-paths definitions for import registrations and results transfers, respectively, using a form
FlightPath Server v2
HTTP methods, error codes, and endpoints follow REST conventions
Asynchronous end points for file registration and named-paths group runs
Improvements to admin endpoints and API version support settable in server config
Improvements
Viewing and editing XLSX worksheets is supported with a right-click to select. Edited worksheets must be saved as individual CSV files.
The Find Data Dialog displays registration or run date-times with the paths of the files found
Generate multiple printout files by printer name using
print-mode:separateWhen registering files in a directory, files can be selected by a regex
Ability to pass UUIDs into file registrations to enable retrieving the exact-match named-file reference when registering asynchronously
Pass arbitrary metadata into run to be stored with run results
tmpqualifier to limit the data stored invars.json
New Functions, Tokens, and Fields
New functions:
runtime()— accesses runtime variables already available to print(), error(), and jinja()metadata()— accesses user-defined csvpath metadata fieldsenv()— accesses environment variables available to the project, env.json or OSuuid()— schema type for line() schemasselect()— selects a column of data from a SQL database
Date-time tokens in registration and run templates:
:day:monthand:month_name:year:hour_24and:hour:minute:second
Additional fields available in runtime metadata,
meta.json,print(), etc.:day,day_of_week,month,month_of_year,hour,hour_of_day,minute,secondrun_dirand the run'sreferencenamed-pathsandnamed-file
Other Changes:
Bug fixes and minor enhancements
More than 1000 new unit and integration tests
Legacy SFTPPlus integration removed in favor of no-code integration using webhooks, transfers, and FlightPath Server. See https://www.flightpathdata.com/data/videos.html for an SFTPPlus how-to.
CsvPath Framework 0.0.614 - 17 June 2026
Generate multiple printout files by printer name using
print-mode:separateTransfers improvements encapsulated in the named-paths definition.json descriptor (csvpath statement
transfer-mode:directives continue to exist as a simpler option):Multiple transfers per csvpath statement
Transfers within csvpaths grouped by run state: all runs, valid, invalid, and runs with errors
Ability to transfer original source file, as well as any result file
Transfers can be sent to any backend
Multiple transfers-only SFTP servers can be configured, allowing you to use SFTP destinations that are not configured as a CsvPath Framework project backend
All files in the results directory can be transferred, including the new arbitrarily named printouts files that can be created by print(), error(), and jinja() using
print-mode:separate
Registration of all files in a directory can be filtered by a regex
SFTP improvements:
Multiple SFTP source locations can be configured on a named file. This allows registering from SFTP servers that are not acting as the project's backend.
Multiple SFTP destination locations can be configured on a named-paths group. This allows SFTP transfers to go to SFTP servers that are not acting as the project's backend.
Pass UUID into file registrations to enable retrieving the exact-match named-file reference when registering asynchronously
Pass arbitrary metadata into run. Metadata is a
dict[str,str]and stored in:<run_dir>/_extra_data/extra.json. This capability allows run lookup by inspecting metadata, and also creates a space available for integration listeners' use.New functions:
runtime()— provides access to the runtime variables already available toprint(),error(), andjinja()metadata()— provides access to the user defined metadata fields in a csvpath statement's leading comment, as well as modes configurationsenv()— provides access to the environment variables available to the project; either OS env variables or the variables in the project's env.json.uuid()— a schema type for line() schemas that also generates UUIDs to populate variablesselect()— selects a column of data from a SQL database into a stack variable
New
.tmpqualifier to limit the data stored permanently invars.jsonat the end of a runDate-time tokens in templates:
:day:month:month_name:year:hour_24:hour:minute:second
Additional fields in runtime metadata (print(), error(), jinja() and captured to meta.json):
The datetime fields:
day,day_of_week,month,month_of_year,hour,hour_of_day,minute,secondrun_dirThe run's
referencenamed-pathsnamed-file
Spring 2026 FlightPath - v1.1.88
AI-Assisted Authoring
FlightPath’s sidebar AI assistant helps developers and BizOps team members with four core authoring tasks:
Generate validations from requirements: describe a data contract in plain language and get a working CsvPath script as a starting point
Explain validation scripts: Get a complete plain-English rule-by-rule walkthrough of what an existing script does
Create test data: Generate sample files that exercise your validation logic before real data arrives
Refactor validation scripts: Clean up, reorganize, or modernize existing CsvPath code without rewriting from scratch
Autonomous workflows
Three new operational capabilities reduce manual intervention in day-to-day data operations:
Arrival activations: Automatically trigger runs when data files arrive — no scheduling, no polling, no manual handoff
Async job control: Full visibility into running jobs: status, metrics, and results accessible at any point, with clean access to results when a run completes
No-code webhooks: Fire automatically based on run outcome criteria, keeping downstream consumers, monitoring tools, and notification systems informed without anyone in the middle. The original webhooks integration can still be used csvpath-statement-by-csvpath-statement, using both capabilities at the same time is fine.
Config variable interpolation
Variable swapping support is significantly expanded. Projects can use OS-level or project-specific environment variables interchangeably. Config values written in ALL CAPS are automatically resolved against the environment. Config values can contain {...} replacement tokens that pull from OS or project environment variables. Resolved values can themselves can point to further environment variables, keeping credentials separated from runtime configuration.
Registration path templates
Templates can now be set as a default directly in the named-file definition. Previously, the same template had to be passed explicitly on every registration.
Post-Run transfers
Transfers now support all files generated during a run, not just the primary output. Transfers work across all configured storage backends.
Parquet output generation
Parquet output is based on a data schema defined using the parquet() function. parquet() is like line(), FlightPath’s structural schema function. Multiple parquet() functions can be active simultaneously, each generating its own Parquet file. This makes it possible to decompose a flat CSV into separate relational entities in a single pass.
Other improvements
10 new analytical and transformation functions
Grid View for run metadata
Default Markdown documentation Files generated in named-paths groups and named-files
CsvPath Framework 0.0.599 - 31 March 2026
Config variables are parsed for braces-bracketed substitution text. A OS or env.json variable in the form
"This is {who} variable"will be rendered as"This is my variable"if there is another variablewhowith the value"my".transfer-modeconfiguration also follows the braces-bracketed interpolation on the transfer-to path, enabling destinations likesftp://{SFTP_SERVER}:{SFTP_PORT}/my/destination.The new
sql_in()function is a SQL column analog to the existingin()function.sql_in()enables live or cached presence tests against a column from a table in Postgres, MySQL, or Sqlite.
CsvPath Framework 0.0.598 - 11 March 2026
Major changes
Support CsvPath-to-Parquet schemas and Parquet file output
Addition of a
definition.jsonandREADME.mdto named-filesAdded a configuration to automatically trigger runs on file registration
Added a configuration to automatically use a default named-file path template for registrations
Update to both
transfer-modeand the SFTP integration to allow sending any/all files generated in a runFix for a problem where delimiter and quotechar choices were not being applied to output files
Substantially improved validation error reporting, including:
Deduplication of similar errors
Improved descriptions
Providing more complete error information
Improving ID chains to better identify error sources within csvpaths
Fix for a problem where CsvPaths run methods would act on only the first file returned by a reference, rather than all results found by the reference.
Eight function improvements including the following new functions:
parquet()- a specialization of line() that uses its schema to create a parquet file of all matching datasort()a stack varslice()a stack varpercent_matching(header, value|stack)matches() - the same capability to indicate matching lines as the
onmatchqualifier, but in the form of a function suitable for use cases where a function test is needed
Winter 2025-2026 FlightPath - v1.1.87
Comprises: CsvPath 0.0.591, FlightPath Server 0.1.27, FlightPath Data 0.1.28
FlightPath changes:
Support for creating and editing JSONL
Support for editing CSV and JSON in grid view
New JSON text editing view
Edit JSONL as JSON
CSV and JSONL grid view editing, including copy-selected-to-new
Support for custom functions in FlightPath Data and FlightPath Server
Added
use-delimiteranduse-quotecharfor FlightPath Data and FlightPath ServerAdded a config dialog to compare and sync config between projects in Data and Server
Improved the env vars config dialog to act as a compare and sync, not just an upload, between projects in Data and Server
Changed to a fixed width font in the printouts tab for better table printouts
Many minor fixes and improvements
CsvPath Framework 0.0.591 - 25 Jan 2026
Added
jsonpath()function using jsonpath-ngDozens of minor fixes and improvements
CsvPath Framework 0.0.581 - 11 Jan 2026
Major changes
When/do changes:
When/do operator right-hand sides now contribute to matching
When/do right-hand side now respects
nocontrib
Custom functions changes:
External functions can be loaded from a file anywhere visible to the Python process
Functions loaded from different
function.importsfiles within the same Python process do not collideMultiple
functions.importswill be loadedFunctionFactorysupports reloadeding imports files
Three new functions:
Added
line_before()to compare current line header value to last line header valueAdded
remove()to drop one or more headersSet headers manually using
rename(@stack)orrename(“a”, “b”, “c”…)
Three qualifier changes:
Support for name qualifiers in
error()that are visibile in error events. E.g.error.myname(“this is a msg”)outputs:2025-12-08 00h42m40s-886915:temps.txt:1:Ⓜ️myname[1]: this is a msgAdded
skipnonequalifier primarily forpush(). Withnotnoneonpush()Noneis flagged as an error; whereas, in some cases we just want to not pushNones.Support for the
distinctqualifier instring(),integer(),decimal(),date(),datetime()
Other functions changes:
New markdown docs generated from/by the functions. E.g. https://github.com/csvpath/csvpath/blob/main/docs/func_gen/advance.md. These docs are barebones, but always 100% up to date. The original function docs
.mdpages will be maintained but should not be considered the most current and/or correct.blank(name|header)andwildcard()supportAnyin actuals, includingNoneput()support added fordict,list,date,datetime, andNone
Added project and project_context args to the CsvPath __init__ in order to populate logger name fields.
CsvPath Framework 0.0.576 - 7 dec 2025
Major changes
JSONL now available with all backends
External custom functions are found before internals, allowing overriding
13 new CsvPath Validation Language functions. See the CLI functions look up for usage.
headers_stack(): returns the names of the current headersclear(var|var-name): removes a variableindex_of(stack-var|stack-name, value): returns the int position of the valuetrack_any(): tracks typed values, optionally collecting values in a stack or summing themroll(date|datetime, number, unit-name): returns a date/datetime that is N-units in the future or pastday(date): returns the date of the month as an intmonth(date): returns the month of the year as an intyear(date): returns the year as an intformat_date(date|datetime, str): formats a date/datetime as a stringfingerprint(Optional[Header], ...): returns the hash of the line or the indicated header valuesformat(str-value, str-format): formats a value according to a Python string templateinterpolate(str-value, str-format): formats a value within a longer string using Python formattingxpath(xml-str, xpath-str): extracts a value from an XML document using an XPath expression
Fixes and Updates
15 function updates:
Number of times
reset_headers()has been called and on what lines tracked in variablesWildcard max length in
string()usingnone()track(): added 3rd argaddorcollect, essentially the same function as fortrack_any()push()andget()now able to take both stack vars and stack var names.get(x)creates and returns a dict var if the variable named x is not foundAdded an optional default arg to
get()concat()able to take a stack var of values to concatinateApply
regex()to all headers using theheaders()function like:regex( headers(), /…/ )size()now takes thenotnonequalifier and either a stack var or name of a stack vareq()accepts None-valued vars, as well asnone()
Other minor user-facing changes
Removed function name limitations disallowing numbers, '_', and '.' after an inital alpha char.
Made an alias to header_names_mismatch for clarity.
Added ability for transfer mode to append, rather than overwrite, using a target path ending in
+
Last updated