Repository navigation
Releases: vibyverse/qvf
Release list
qvf v0.6.0 - 2026-10-22
This additive toolkit release keeps QVF v1, the normative schema, registry,
validator findings and C ABI unchanged. Existing Python imports remain available.
XSF/PDB converters support only the documented subsets; Conan packaging is local,
with no package-index publication.
Changed
- Reconcile roadmap and work-package status with toolkit 0.5.0 and current
main: retain the schema identifier with hosting still open, distinguish
unreleased converters, packaging and pending-job workflows, and separate
historical design proposals from current implementation.
Added
-
WP-48: geometry-only PDB import/export through
qvf.convertand the CLI.
Imports require explicit element columns and refuse alternate locations
and multi-model ensembles. Reports identify discarded biomolecular/crystal
metadata and export precision; synthetic export records make no identity
or connectivity claim. No schema, registry or format change. -
Executable one-species Sketch drawing example for the Unreleased
prepare-jobworkflow. The family guide distinguishes preserved drawing
data, the canonical job request, read-only checks and Queue submission. -
qvf.jobs.prepare_jobandqvf prepare-jobturn one geometry/document
archive into an explicit pending single-job request while preserving its
structure, bonds, preview and vendor bytes. Source and output receive full
validation; ambiguous, calculated or incompatible inputs are refused, and
publication uses a new path atomically. Optional basis/functional retain
absent versus null semantics. No NumPy dependency or format/schema change. -
WP-49: local Conan 2 C/C++ recipe with static/shared options, exact committed
source export, installed CMake/pkg-config metadata and Apache notices.
Small installed C99/C++17 consumers exercise package use. A portable
release/adoption checklist distinguishes source checks, candidate acceptance
and publication; no package-registry upload is added. -
WP-48: static XSF primitive geometry and scalar-grid import/export through
qvf.convertandqvf convert. Coordinates convert explicitly, sample
ordering and endpoint planes are preserved, and field periodicity is
supplied separately from structural periodicity. Unsupported records and
missing periodic endpoints fail without publishing output. No format or
schema changes.
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/
qvf v0.5.0 - 2026-10-16
The toolkit APIs below are additive. Archives remain QVF v1, the normative
schema is unchanged, and legacy Python imports and C/C++ entry points remain
available. The Python array APIs now require the optional numpy extra;
install qvf-writer[numpy,validate] for those APIs and full schema validation.
Fixed
-
Typed vector, array and map decoders use explicit loop bodies, avoiding
GCC misleading-indentation warnings when building with warnings as errors.
The generated single header carries the same correction. -
Source archives suppress Python bytecode during staged generated-file checks,
keeping the tar/ZIP inventory byte-identical to committed source even when
checking generators that import other local modules.
Added
-
Candidate CI explicitly installs the optional NumPy extra for array tests,
checks generated Fortran bindings, and exercises the Fortran writer/layout
checks in the existing Linux GCC job with runtime bounds checking. -
WP-45 source slice: optional
qvf::fortranmodules, generated bindings for
every C ABI entry point, and checked structure, scalar-volume, trajectory
and restricted-GTO writers. Wrappers convert Fortran array layout explicitly;
focused gfortran/Python checks cover layout, ownership and refusal behavior.
Installed modules and sources support CMake consumers. -
WP-49 packaging slice: relocatable
qvf.pcmetadata and independent CMake
test/example switches. Embedded consumers build only the library by default;
standalone builds retain tests and examples. Installed CMake targets
propagate C++17 and shared builds expose the C API import definition. -
WP-48 first slice: standard-library-only
qvf.convertandqvf convert
for scalar cube and geometry-only XYZ/extXYZ, including trajectories and
variable cells. Converters validate new QVF files, preserve grid ordering
and explicit periodic endpoint semantics, report losses, refuse unsupported
fields and publish only completed outputs at a new path. -
Register the advisory
x_ascentnamespace for non-critical ASCENT dataset
exchange beside canonical structures (#13). No format or validator change. -
WP-44: complete additive C ABI 1 for streaming writers, every canonical
kind, periodic structures, lazy readers, staged validation and optional
atomic editing. The original C signatures remain available. Shared builds
export the API and install with ABI-versioned library names. C examples
round-trip every canonical kind and are checked by the Python validator.
Legacy wavefunction overlap/ECP setters can reread streamed metadata. -
A portable pending-job example and family workflow guide covering queue
submission, viewer inspection and sketch geometry conversion. The guide
distinguishes consumer capabilities from format conformance and preserves
the original archive during conversions. File-identification prose now
states that the QVF media type is proposed and its registration awaits
submission approval; identifiers are unchanged. -
WP-47:
qvf/python -m qvfcommands for staged validation, archive info,
JSON display, verified member extraction, numeric diff, repack, reported
scrubbing to a new archive, conformance and schema output. Existing
qvf-validatebehavior is retained. Python validation stages match the C++
facade boundaries and preserve the full validator's finding codes. The
shared installed/script corpus runner no longer requires NumPy. -
WP-46: the Python
qvfpackage, retaining theqvf-writerdistribution
name. StreamingWritermember sinks support raw buffers, endian
conversion and ZIP64; lazy typedReadersupports NumPy-free memoryviews;
Editorappends, commits atomically on request and repacks. The package
includes the model, units, generated tables and schema. The original
qvf_writer/qvf_readermodules remain compatible, with deprecation
warnings, and the existing validator finding codes are unchanged. -
C++ streaming
Writer, optional atomicEditor, and borrowedTensorView
conversion in bounded chunks, preserving the existingQvfWriterAPI.
File, memory and callback sinks share the same backend; updates, run status
and streaming repack use the established archive lifecycle (WP-42). -
Schema-generated concrete records and named roles for all 56 canonical
kinds, withWriter::add/Reader::get<K>and lossless extension fields.
Owning decoded tensors and borrowed producer views shareTensorData.
Typed writes check schema and sizes before writing; late conversion
failures remove the new section and its directory entries. -
C++
qvf::Readerwith a lossless typed manifest, lazy JSON/tensor/opaque
member access, bounded tensor streaming, and theget<K>decoding
protocol. The existing
QvfReaderAPI remains available. -
Cumulative
qvf::validatereports for container, manifest, payload,
semantic and reference stages, using existing finding codes and limits.
Early stages avoid reading later payloads; complete validation remains
the default.qvf-inspectand the C++ conformance runner use the facade;
theread_qvfexecutable is retained (WP-43).
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/
qvf v0.4.0 - 2026-10-15
Fixed
-
Python and C++ section-creation APIs check duplicate, reserved and invalid
IDs before writing payload members, including generated default IDs.
A rejected ID leaves the archive unchanged, without orphan ZIP entries. -
Writer APIs expose the v0.3.0 fields: Python
add_job_specdistinguishes
omittedbasis/functionalfrom explicitNone(JSON null); the C++
JSON API accepts null and rejects non-string, non-null values. Both
wavefunction writers acceptlocalization_reference_basisand reject an
explicitly empty value.
Clarified
- Unrestricted NTOs use two
wavefunction.gtosections per state, with
alpha/beta channels paired by row and identical descending squared
weights per spin (#12). A normalized state's weights sum to one across
both spins. Full TDDFT/RPA sums remain permitted. Python/C++ writers and
all three validators enforce channel/pair consistency; generated schema
tables and positive/negative corpus cases cover the contract.
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/
qvf v0.3.0 - 2026-10-15
qvf becomes the single source of the format for the vibe-qc family, and the
release merges into the format what the family's programs already write or
read (#11): run against 2,000 archives of vibe-qc 0.15–0.17, the 0.2.0
validator failed 463 of them (23 %) for four kinds of data that are valid
now, and vibe-view read three viewer hints the specification did not record.
All within QVF v1 (qvf_version = 1); none of the changes bumps it
(Decision).
Deprecated
- The
mo_metadatakeysiao_charges,excitation_indexand
excitation_energy_ev(spec § 5.3): valid, annotated"deprecated": true,
and producers SHOULD NOT write them; the canonical carriers are the
atom_propertiesmemberiao_charge,state_indexwithstate_ref, and
the state'sexcitation_energyin itsexcited_statessection (#11). - The empty string as a
job.specfunctionalorbasis(spec § 5.9): a
valid, deprecated spelling ofnull(#11). - Validators report no finding for a deprecated key or spelling, as for
provenance.hostnameand the legacy unit spellings.
Added
localization_reference_basis, an optional non-empty string of
$defs/MoMetadataPayload(spec § 5.3): the minimal reference basis the
intrinsic atomic orbitals were built from (Knizia, J. Chem. Theory Comput.
2013, 9, 4834) (#11).nullas ajob.specfunctionalorbasis(spec § 5.9,
$defs/JobSpecPayload): the method takes none, distinct from an absent
key, the engine's default (#11).- The
viewer_defaultshints vibe-view reads (spec § 3.4, #6): the
per-sectionenergy_windowofbandsanddos.*sections ([min, max]
in eV relative to the Fermi level), the top-levelcamera(the shape of
$defs/Camera) andcrossfade({a, b, blend}). Specified in the spec
only: the schema listscameraandcrossfadewithout checking their
values, and a malformed hint never fails an archive.cameraand
crossfadeare reserved section ids (E_RESERVED_ID); the Python and C++
writers refuse them. structure_refon a standalonebondssection (spec § 5.1, #4): the
structure whose atoms the indices address; without it, the archive's first
structure. Validators check every pair against the atom count of the named
structure (E_MEMBER_MALFORMED). Pythonadd_bonds(..., structure_ref=)
and C++add_bonds(pairs, section_id, structure_ref).@qvf/coretypesViewerDefaults.cameraandcrossfadeand exports
CrossfadeHint.- Conformance corpus:
wavefunction_localized.qvf,job_set_methods.qvf,
deprecated_spellings.qvf,bonds_structure_ref.qvfand
viewer_hints.qvf(71 archives); six negative archives for the new rules
(100).
Changed
- qvf is the single source of the format (
GOVERNANCE.md, "QVF in the
vibe-qc family"): the specification, schema, registry and reference
validators change only here; a family program pins one qvf tag, vendors
byte-identical copies checked in CI against that tag, keeps no derived
schema (no v2 schema either; spec § 3.1 is the rule), and proposes a field
here before it writes it (#11). spec/legacy/README.mdand theregistry.jsonversion_decisionssay
what the frozen v2 schema is: qvf 0.1.0's v1 schema withqvf_version1
or 2, kept so that its$idresolves, used by no validator and no superset
of the current v1 schema. A v2 archive is validated against the current v1
schema with the warningW_VERSION_WITHDRAWN(spec § 3.1), as before (#11).registry.json:x_vibesketchlists the members vibe-sketch writes
(document,species,sdf) since its picture moved to the canonical
previewkind (#11).- Section ids carry no meaning, and a consumer finds sections by kind and
reference; the first structure of an archive is the firststructure
sectionviewer_defaults.auto_openlists, else the first insections
order (spec § 4.1, § 8.2). A clarification, noqvf_versionbump
(Decision). GOVERNANCE.mdrecords that QVF is the standard format of the vibe-qc
family of programs, on the same terms as for every producer and consumer.conformance/generate_corpus.pyruns as a script again: its entry point
had preceded the sketch-document generators it calls.
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/
qvf v0.2.0 - 2026-10-14
The format and toolkit changes since 0.1.0, all within QVF v1
(qvf_version = 1). The last group of format decisions makes QVF the document
format of vibe-sketch, the structure and reaction sketcher: chemical identity
on structure sections, the reaction.scheme and preview kinds, the member
field media_type, job sets, one media type and one macOS UTI for .qvf,
and the withdrawn qvf_version 2 read as a warning
(Decisions).
None of the changes bumps qvf_version.
Deprecated
provenance.hostname(spec § 3.2): producers SHOULD NOT emit it; consumers
MUST ignore it except for display. The schema property is annotated
"deprecated": true; existing archives remain valid. Noqvf_version
bump (D11, WP-07).- The unit spellings
Eh,eVandHartreein a{value, units}object
(provenance.scf_energy,provenance.fermi_energy): still valid there as
$defs/LegacyUnitName, read ashartreeandev; producers SHOULD write
the unit name (D12, WP-13).
Added
- Chemical identity on
structuresections (spec § 5.1): optional section
fieldscharge,multiplicity,name,smiles,inchiandinchikey;
the genericlabelis the species' compound label. Validators report a
charge and multiplicity impossible for the atoms as the new error
E_CHARGE_MULTIPLICITY, and, in an archive with one structure, a
disagreement withprovenance.charge/provenance.multiplicityas
E_ROOT_INCONSISTENT. Pythonadd_structuretakes the six fields. reaction.scheme, a canonical kind (spec § 5.14): steps in reading order
relatingstructuresections as reactants, reagents and products, each
with an optional stoichiometric coefficient, under aforward,
equilibrium,retrosyntheticorresonancearrow, with the conditions
and the yield (yield_percent,yield_text). Roles are chemical whatever
the arrow; the step keyenergiesis reserved for reaction energies.
Validators resolve every participant (E_REF_UNRESOLVED) and reject
duplicate step ids and repeated participants (E_MEMBER_MALFORMED).
Pythonadd_reaction_scheme.preview, a canonical kind (spec § 5.15): a rasterthumbnail
(image/pngorimage/jpeg) and an optionalimage(also
image/svg+xml), both opaque members with a requiredmedia_type; the
archive's picture is the thumbnail of the firstpreviewsection, and SVG
is self-contained and inert. Validators check the bytes against the media
type (E_MEMBER_MALFORMED,E_UTF8). Pythonadd_previewsniffs and
checks the image type and stores the members uncompressed.media_type, an optional field of every member spec (spec § 4.2): the IANA
media type of the member's bytes. Vendor sections may carry opaque members
(binary without dtype and shape); Pythonadd_vendor_sectiontakes
opaque_members=.- Job sets (spec § 5.9): an archive may carry several
job.specsections,
each naming its structure;run.recordgainsjob_ref(the job it ran,
resolved by validators) andrun_status(its outcome), and
provenance.run_statussummarises the set. Pythonadd_run_recordtakes
job_ref=andrun_status=, andadd_job_specwritesstructure_refon
the section object as well as in the payload. - File identification (spec § 2.4): the extension
.qvf, the media type
application/vnd.vibe-qc.qvf+zipand the macOS Uniform Type Identifier
com.vibe-qc.qvf(conforming topublic.zip-archiveand
public.content), inregistry.json(file_type) and as declarations to
copy inspec/file-type/(qvf-uti.plist,qvf-mime.xml). registry.jsonregisters the vendor namespacex_vibesketch.- Finding codes
W_VERSION_WITHDRAWNandE_CHARGE_MULTIPLICITY
(Appendix B). - C++ reference writer:
add_reaction_scheme,add_preview,
set_structure_identity,remove_section,add_opaque_memberand an
add_vendor_sectionoverload withOpaqueMembers,RunRecord::job_ref
andrun_status;qvf::MemberSpec::media_typein the typed model; a member
of an update whose path the archive already holds gets a fresh path
(<stem>.<n><suffix>) instead of an exception,begin_binaryincluded;
open_for_updateacceptsqvf_version: 2and writes 1.
write_all_kindscovers all 56 canonical kinds. The C++ and JavaScript
validators implement every new rule with the codes and locations of the
Python one (@qvf/corealso typesmedia_typeand regenerates its kind
list). - Python reference writer:
label=on everyadd_*method;
remove_section(id), which with anadd_*under the same id replaces a
section;open_for_updatetakes an archive's bytes as well as its path;
to_bytes(repack=True)andwrite(..., repack=True)drop superseded
entries; a member of an update whose default path the archive already
holds gets a fresh path instead of an error. - Conformance corpus:
reaction_scheme.qvf(eight species with their
identity, a three-step scheme, a preview, an opaque vendor member) and
job_set.qvf(a job set halfway through); ten negative archives for the
new rules. - Spec § 5.8 "Sharing and sanitisation": run.record inputs, logs,
attachments,command, andfilesfilenames may carry paths, user names,
and host names; producers SHOULD offer suppression or redaction; a toolkit
scruboperation is the intended mechanism (WP-07). - C++
qvf::Json::erase(key)(WP-07). - Payload schemas for the spectra and analysis members (spec § 5.4, § 5.7,
§ 6):$defs/SpectrumPayloadfor the six 1-D spectra, with new optional
x_units,y_units,x,peaks,broadening,temperature_k,raman
anduvvis(frequencieskeeps the x axis in the kind's § 4.3 unit);
typedNmrSpectrumPayloadandEprSpectrumPayload; strictBondsPayload
(also thestructuresection'sbondsmember),BondOrdersPayloadand
ScfHistoryPayload;QtaimPayloadwith an optionalunitsobject
(positions in Å unless declared, a provisional default);SymmetryPayload.
Validators check each withE_PAYLOAD_SCHEMA, including the equal-length
rule of a 1-D spectrum, so malformed payloads that used to pass now fail.
Corpusspectra_all.qvf,nmr.qvf,qtaim.qvf,symmetry.qvf; three
negative payload archives. Pythonadd_spectrumchecks array lengths and
takesx_units,y_units,peaks,broadening;add_topology_qtaim
takesunits. Noqvf_versionbump (P01, P13, D05, D18, WP-11). - Payload definitions for the geometry and wavefunction JSON members: volume
gridandreaction.pathvolume_grid($defs/VolumeGridPayload),
wavefunction.gtobasisandmo_metadata(BasisPayload,
MoMetadataPayload), and themetadata/waypointspayloads of
trajectory,reaction.path,reaction.waypoints,scan.surfaceand
vibrations. Spec § 5.2, § 5.3 and § 5.5 gain payload tables, and § 6
checks every JSON member that has a payload definition (E_PAYLOAD_SCHEMA).
Additive, noqvf_versionbump; a previously unconstrained malformed
payload now fails validation. Corpus gainstrajectory.qvf,
vibrations.qvf,scan_surface.qvfandreaction_path.qvf; the negative
corpus gains threepayload_*archives (P01, D07, WP-10). - Schema and spec § 5.6: optional members
phonon_bands.eigenvectors
(float64[n_q, n_modes, n_atoms, 3], or[n_q, n_modes, n_atoms, 3, 2]
with the last axis[re, im]) andphonon_dos.projected(float64
[n_channels, n_points], rows labelled bymeta.channels); thedos.total
/dos.projectedsection fieldsn_spin,smearing,smearing_type,
fermi_energy_ev,n_electronsandchannelsnamed as optional typed
properties. Theatom_propertiesroles (mulliken_charge,
loewdin_charge,hirshfeld_charge,iao_charge,spin_population) are
one list in the schema and spec § 5 / § 5.7. Corpus archivesphonons.qvf
andatom_properties_all.qvf. Noqvf_versionbump (D02, D03, D08, WP-04). - Payload definitions for the periodic kinds and the run-record
filesindex
(spec § 5.6, § 5.8): strict$defs/KpathPayload(withKpathSegment),
FermiMeshPayload,QpathPayload,EosFitPayloadand
RunRecordFilesPayload; typed-openDosMetaPayload(dos.coop/
dos.cohpmeta),PhononMetaPayloadand the sharedDosChannel. The
Python validator checks each member against its definition
(E_PAYLOAD_SCHEMA) through a(kind, role)table. Noqvf_versionbump
(P01, P14, D07, WP-12). - Spin axis on projections:
bands.projections[n_spin, n_k, n_bands, n_channels]anddos.projected.projections[n_spin, n_channels, n_points]; the lower-rank shapes stay legal and meann_spin = 1. New
optionalbands.occupations[n_spin, n_k, n_bands]. Both validators report
shapes that disagree witheigenvaluesasE_MEMBER_MALFORMED; Python and
C++add_bandstakeoccupations(C++: a new overload), and the writers
refuse disagreeing shapes (D04, WP-12). - Conformance corpus:
bands_spin.qvf,dos.qvf,fermi_surface.qvf,
eos.qvf; negative corpus:bands_spin_mismatch.qvf,
eos_model_unknown.qvf(WP-12). - Unit vocabulary (spec § 4.3, "Unit names" and "Declared units";
$defs/UnitName, 25 names fromangstromtodimensionless). Every payload
unitsobject (now also on the volume grid), the 1-D spectrum'sx_units,
y_unitsandbroadening.units, andValueWithUnits.unitsare typed as
unit names, and declarations of units § 4.3 fixes areconstin the payload
definitions. New warningW_UNIT_UNKNOWNin the Python, C++ and JavaScript
validators. Python moduleqvf_units(UNITS,LEGACY_UNITS,is_unit,
canonical,convert,fixed_units) and C++ headerqvf/units.hpp
(qvf::Unit,unit_name,parse_unit,canonical_unit,convert), with
CODATA 2018 length and energy conversio...
qvf v0.1.0-docs.1
Public source release of qvf v0.1.0-docs.1. No changelog section was found for this version in the tagged source.
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/
qvf v0.1.0
Public source release of qvf v0.1.0. No changelog section was found for this version in the tagged source.
Download Source code (zip) or Source code (tar.gz) under Assets. These are source archives, not prebuilt installers; follow the included installation instructions. Managed Git-based installers need a clone checked out at this tag.
Documentation: https://vibe-qc.com/ · Desktop downloads: https://vibe-qc.com/download/