Skip to content

Implement a lossless RVT write and save-as foundation #20

Open

Description

@mahach666

Goal

Add the storage foundation for producing valid RVT output and preserving data that RvtIO does not yet understand.

Current behavior

The project supports reading RVT and RFA data; it does not provide a supported writer or save operation.

Scope and milestones

  • Define a write-capability matrix by file kind, version and operation, beginning with a narrow, testable set of local files.
  • Retain original streams, records and opaque payloads needed for lossless round trips.
  • Implement the framing, indexes, offsets, identifiers, compression and checksums required for supported rewritten data.
  • Provide save-as output and infrastructure for safe persistence of subsequent edit operations.

Acceptance criteria

  • Exercise both unchanged round trips and targeted synthetic record rewrites through the writer infrastructure.
  • Preserve unknown payloads and data unrelated to a requested change.
  • Read generated files back in RvtIO and validate them in the corresponding Revit version without recovery warnings.
  • Preserve element identities, relationships, geometry and external references in unchanged parts.
  • Reject unsupported file states or write operations explicitly and leave the source file intact on failure.

Activity

  1. PhanCongVuDuc commented on Nov 7, 2026

    @PhanCongVuDuc

    Revit can't save down natively, but I'm working on a free tool that does (disclosure: I made it): https://revitdowngrade.com

    Files from 2023-2027 can go down to 2022, up to 1 GB, with no account. Anything the older version doesn't support gets removed and listed, so test it on a copy first. The website and server code are open source, but the conversion engine is closed source.

    If it fails on your file, I'd really like to hear about it

  2. mahach666 commented on Nov 7, 2026

    @mahach666
    CollaboratorAuthor

    HI @PhanCongVuDuc !
    Thanks for reaching out and sharing your project!

    I'm already familiar with your website, as well as a similar service, [rvtconvert.com](https://rvtconvert.com/).

    I've actually made some promising progress on this in a private, experimental branch of RvtIO. The conversion chain from 2026 → 2025 → 2024 has already been implemented and successfully tested on a limited set of files.

    That said, RVT writing and version conversion aren't my highest priorities right now, so I'm not actively dedicating much development time to them.

    I'd be very grateful if you considered contributing to RvtIO, or potentially open-sourcing the server-side conversion engine. I think there's a lot of potential for collaboration here, especially since we're working on closely related problems.

    Thanks again for sharing your work!

  3. mahach666 commented on Nov 12, 2026

    @mahach666
    CollaboratorAuthor

    Status against main at 74e80fc. The low-level pieces of the writer are in main as internal types: the page codec and gzip member writer (#103), the class-version and GUID-list editor for Formats/Latest (#104), and a compound file rewriter (#107) that copies untouched streams byte for byte, checks the written file by length and SHA-256 before moving it into place, and never replaces an existing file. Their only production caller is the downgrade check, which discards the result. None of this is public and there is no save-as. Still open: the write-capability matrix, rewriting partition records with their framing and checksums, the public save-as API and CLI, and validation in Revit. That work is in review in #188.

  4. added a commit that references this issue on Nov 13, 2026
    92df148
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions