Repository navigation
Releases
Releases · dominion525/jetdb
v0.4.0
What's Changed
- Allow to read from i 8000 n-memory data sources by @semenenkov in #13
- Restore the thread and unwind safety PageReader lost with in-memory sources by @dominion525 in #17
- Check the browser Wasm build and the WASI test run in CI and on release by @dominion525 in #18
- Run tests on the browser Wasm target by @dominion525 in #19
- Document that the library runs on WebAssembly by @dominion525 in #20
- Raise the MSRV to 1.86 and update quick-xml to 0.42 by @dominion525 in #21
- Fix swapped precision and scale offsets for Jet4 numeric columns by @dominion525 in #22
- Detect the primary key by index_type instead of mistaking hidden indexes for it by @dominion525 in #23
- Read calculated field values by @dominion525 in #24
- Read macros from Access 97 through Microsoft 365 by @dominion525 in #25
- Read MSysObjects.Type as the object types real databases store by @dominion525 in #26
- Return columns in Design View order by @dominion525 in #27
- Keep exports of system tables from coming out as empty rows by @dominion525 in #28
- Keep complex columns from appearing in DDL as auto-increment columns by @dominion525 in #29
- Add the base of jetdb-wasm, an npm package for using jetdb from JavaScript by @dominion525 in #30
- Give the jetdb-wasm package exact TypeScript types and check them by @dominion525 in #31
- Test the jetdb-wasm web build in real browsers in CI by @dominion525 in #32
- Add BigInt test data and write BigInt as BIGINT in Access DDL by @dominion525 in #33
- Read timestamps before 1899-12-30 with the time of day Access shows by @dominion525 in #35
- Read the columns, indexes and rows of a table from jetdb-wasm by @dominion525 in #34
- Expect the time of day Access shows for a timestamp before 1899-12-30 by @dominion525 in #36
- Show and write calculated columns with the type of their result in jetdb schema by @dominion525 in #37
- Give the errors of jetdb-wasm a code to tell their kinds apart by @dominion525 in #38
- Keep the rules the CLI and jetdb-wasm share in the library by @dominion525 in #40
- Keep the jump of a Jet3 row whose variable data ends on a 256-byte boundary by @dominion525 in #41
- Make jetdb-wasm report panics and read the catalog once by @dominion525 in #42
- Read relationships and write DDL in jetdb-wasm by @dominion525 in #43
- Read saved queries in jetdb-wasm, and check string arguments by @dominion525 in #44
- Read object properties in jetdb-wasm, and tell apart objects that share a name by @dominion525 in #45
- Keep a property chunk length from overflowing a 32-bit usize by @dominion525 in #46
- Do not give the SQL of a query that may have lost rows of MSysQueries by @dominion525 in #47
- Keep a Jet3 row whose null mask is longer than the row from panicking by @dominion525 in #48
- Keep a broken index count of a table definition from panicking by @dominion525 in #49
- Keep a broken scale of a calculated Decimal value from panicking by @dominion525 in #50
- Tell AutoNumber columns by their type as well as their flags by @dominion525 in #51
- Make the GUID columns of the MySQL DDL hold the braced values by @dominion525 in #52
- Write GUID AutoNumber columns as GUID columns in DDL by @dominion525 in #53
- Make only a sole AutoNumber primary key the SQLite primary key by @dominion525 in #54
- Prefix index names with their table in SQLite and PostgreSQL DDL by @dominion525 in #55
- Size Text columns in DDL in characters rather than bytes by @dominion525 in #56
- Give a MySQL AUTO_INCREMENT column that does not begin the primary key an index by @dominion525 in #57
- Open bytes made in another realm in jetdb-wasm by @dominion525 in #58
- Do not open a file without the signature of an Access database by @dominion525 in #59
- Give the names of the columns with the rows in jetdb-wasm by @dominion525 in #60
- Do not make a relationship without referential integrity a foreign key in DDL by @dominion525 in #61
- Show the size of a Text column in characters, as Access does by @dominion525 in #62
- Read MSysObjects once where the catalog is already read by @dominion525 in #63
- Read the definitions of saved queries once in jetdb-wasm by @dominion525 in #64
- Use the same function as the DDL for the types of calculated columns in columns of jetdb-wasm by @dominion525 in #65
- Keep a sing 8000 le list of the object types in the library by @dominion525 in #66
- Leave out the relationships of hidden linked tables in relationships of jetdb-wasm by @dominion525 in #69
- Pass the values of properties to JavaScript without copying them in jetdb-wasm by @dominion525 in #67
- Name the type of the object in the heading of its properties in jetdb prop by @dominion525 in #68
- Read the properties of an object listed twice in the catalog with the same type by @dominion525 in #70
- Read the properties of an object of a type jetdb does not know by its name in properties of jetdb-wasm by @dominion525 in #71
- Check the forms and reports jetdb reads against the SaveAsText output of Access by @dominion525 in #72
- Check that VBA modules with Japanese names and source are read correctly by @dominion525 in #73
- Describe how far public macros confirm the names of macro argument values by @dominion525 in #74
- Name more form and report properties, checked against the SaveAsText output of Access by @dominion525 in #75
- Read the VBA modules and their source in jetdb-wasm by @dominion525 in #76
- Read the forms and reports and their designs in jetdb-wasm by @dominion525 in #77
- Read the named, embedded and data macros in jetdb-wasm by @dominion525 in #78
- Add the sample database whose command output the jetdb site shows by @dominion525 in #79
- Return the 32-bit values of form properties as numbers in jetdb-wasm by @dominion525 in #80
- Leave out the macros Access makes for itself from macros of jetdb-wasm by default by @dominion525 in #81
- Document how jetdb-wasm treats Access 97 files and when macro fields are null or empty by @dominion525 in #83
- Give form properties and control types their numbers in jetdb-wasm by @dominion525 in #82
- Choose between a form and a report of the same name by @dominion525 in #84
- Tell class modules from the modules of forms and reports in VBA projects by @dominion525 in #85
- Read the storage of forms, macros and VBA once by @dominion525 in #86
- Check the length of form property data without overflowing on 32-bit targets by @dominion525 in #87
- Write each data macro of a DataMacros document once by @dominion525 in #88
- Read the CDATA sections of macro XML as the text of their elements by @dominion525 in #89
- Read the values of complex columns: multiple values, attachments and version history by @dominion525 in #90
- Read the rows of a table one at a time, also in jetdb export and jetdb-wasm by @dominion525 in #91
- Reword the source notes in the form and query docs by @dominion525 in #92
- Read the streams of f...
v0.3.3
What's Changed
- Read every row of tables that have no variable-length columns by @dominion525 in #14
- Publish to crates.io from the tag that starts a release by @dominion525 in #15
- Release v0.3.3 by @dominion525 in #16
Full Changelog: v0.3.2...v0.3.3
v0.3.2
Bug Fixes (jetdb library)
- Stop the Jet4 variable-offset table scan before underflow, using
checked_subon the subtraction itself instead ofwrapping_sub(#9 by @Else00) - Preserve
start == endvariable values as non-null emptyText/Binary/Memo/Oleinstead of converting them toValue::Null(#9 by @Else00) - Reject malformed
DateTimeExtendedpayloads (wrong length, bad separator/marker bytes, non-digit characters, out-of-range seconds/nanoseconds) instead of silently returning an epoch-like date (#9 by @Else00) - Carry rounded timestamps past
23:59:59to the next day at00:00:00instead of producinghour=24(#9 by @Else00)
Tests
CLI changes (jetdb-cli)
--help-skillnow prints installation instructions for the Claude Code Skill, which has been moved to the dedicated agent-skills repository--export-skillalias removedSKILL.md/SKILL.ja.mdremoved from this repository
Acknowledgments
Real-world bug reports and PRs from @Else00 (using jetdb in a personal desktop application) and @Bradyok (using jetdb to process Hy-Tek Meet Manager 8 .mdb exports). The kind of feedback that's only possible from actual users — thank you both.
Full Changelog: v0.3.1...v0.3.2
v0.3.1
Bug Fixes
- Fix
form controlsoutput for control names containing parentheses (e.g.その他(社内業務)) - Exclude internal metadata entries (type_code
0x1EFF) fromform controlsoutput
Documentation
- Update form-design specification with corrected TypeInfo entry format and 0x1EFF findings
Full Changelog: v0.3.0...v0.3.1
v0.3.0
New Features
formsubcommand — Read form/report design information from Access databasesform list— List forms and reports (--forms-only/--reports-onlyfilters)form controls— List control names, type names, and indicesform props— Display form-level and per-control propertiesform dump— Dump raw binary streams (Blob / TypeInfo / PropData)
- Blob binary parser — Extract properties such as RecordSource, ControlSource, Filter, and event handlers
- TypeInfo parser — Parse control names and type codes (Shift-JIS support)
- Human-readable control type names — Map type codes to names (Label, TextBox, CommandButton, etc.)
Bug Fixes
- Fix queries not appearing in listing when ATTR_TYPE row is absent
Other Changes
- Add form/report binary format specification (
docs/form-design.md) - Improved test coverage (crypto, form, CLI)
- Separate CLI test responsibilities (move functional tests to library)
v0.2.2 — AI agent skill file output
Added support for outputting a skill file that AI agents (Claude Code, Codex CLI, Gemini CLI, etc.) can use to operate jetdb effectively.
New Features
- Add
--help-skillflag (alias:--export-skill) SKILL.mdis embedded in the binary and can be registered as a skill:
mkdir -p ~/.claude/skills/jetdb-cli && jetdb --help-skill > ~/.claude/skills/jetdb-cli/SKILL.md- The skill file covers all 7 subcommands with usage examples, output samples, workflow patterns, encrypted DB handling, and error behavior
v0.2.1
Highlights
- Password-protected .accdb files are now supported (
--passwordflag /PageReader::open_with_password) - Encryption: Agile, RC4 CryptoAPI, Standard/NonStandard AES
- New column type: DateTimeExtended (Access 2019, nanosecond precision)
Install / Upgrade
cargo install jetdb-cliWhat's Changed
- Add password-protected .accdb/.mdb file support by @dominion525 in #3
- Add RC4 CryptoAPI / Standard AES decryption and DateTimeExtended support by @dominion525 in #4
Full Changelog: v0.1.1...v0.2.1
v0.1.1
jetdb v0.1.1
A pure Rust, read-only library and CLI for Microsoft Access databases (.mdb/.accdb). Supports Access 97 (Jet3) through Access 2019 (ACE17).
Full Changelog: https://github.com/dominion525/jetdb/commits/v0.1.1