PackageTrack
Sign in Get early access

vt100

Library for parsing terminal data

0.16.2 10M downloads/mo #3105 most downloaded on crates.io doy/vt100-rust

What this package is like to depend on

Last release 1 years ago

12 Jul 2025

Ships unpredictably

gaps range from 8 days to 3.4 years

Nearly every release is documented

notes for 32 of 32 stable releases

Nothing withdrawn

no release was ever pulled

10 years old

32 releases · first in 2016

0 releases in the last 12 months

see the full history below

Release timeline

32 releases · Apr 2016 to Jul 2025
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 32
  1. 0.16.2 12 Jul 2025
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Fixed

    • Fixed potential cursor out of bounds when using decrc after resizing. (#13)
    Open source →
  2. 0.16.1 10 Jul 2025
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Changed

    • Reverted to the 2021 edition for now.
    Open source →
  3. 0.16.0 08 Jul 2025
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Added

    • Parser::process_cb, which works the same as Parser::process except that it calls callbacks during parsing when it finds a terminal escape which is potentially useful but not something that affects the screen itself.
    • Support for xterm window resize request escape codes, via the new callback mechanism.
    • Support for dim formatting. (Daniel Faust, #9)
    • Support for CNL/CPL escape codes. (Danny Weinberg, #10)
    • Support for OSC 52 (clipboard manipulation).

    Removed

    • These methods on Screen have been removed in favor of the new callback API described above:
      • title_formatted
      • title_diff
      • title
      • icon_name
      • bells_diff
      • audible_bell_count
      • visual_bell_count
      • errors
    • Additionally, unhandled escape sequences no longer log to STDERR; they instead call various callback methods which can be defined to log if desired.
    • Cell no longer implements Default.
    • Screen no longer implements vte::Perform.

    Changed

    • Parser::set_size and Parser::set_scrollback have been moved to methods on Screen, and Parser::screen_mut was added to get a mutable reference to the screen.
    • Cell::contents now returns &str instead of String, eliminating an allocation in many cases. (Chris Olszewski, #14)

    Fixed

    • Fixed some issues with calculating scrollback offsets correctly in Grid::visible_rows. (rezigned, #11)
    Open source →
  4. 0.15.2 05 Feb 2023
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Changed

    • Bumped dependencies
    Open source →
  5. 0.15.1 21 Dec 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Changed

    • Removed a lot of unnecessary test data from the packaged crate, making downloads faster
    Open source →
  6. 0.15.0 15 Dec 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Added

    • Screen::errors to track the number of parsing errors seen so far

    Fixed

    • No longer generate spurious diffs in some cases where the cursor is past the end of a row
    • Fix restoring the cursor position when scrolled back

    Changed

    • Various internal refactorings
    Open source →
  7. 0.14.0 06 Dec 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Changed

    • Unknown UTF-8 characters default to a width of 1, rather than 0 (except for control characters, as mentioned below)

    Fixed

    • Ignore C1 control characters rather than adding them to the cell data, since they are non-printable
    Open source →
  8. 0.13.2 05 Dec 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Changed

    • Delay allocation of the alternate screen until it is used (saves a bit of memory in basic cases)
    Open source →
  9. 0.13.1 05 Dec 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Fixed

    • Fixed various line wrapping state issues
    • Fixed cursor positioning after writing zero width characters at the end of the line
    • Fixed Screen::cursor_state_formatted to draw the last character in a line with the appropriate drawing attributes if it needs to redraw it
    Open source →
  10. 0.13.0 18 Nov 2021
    Release notes

    changelog and version bump

    Open source →
    Release notes

    Added

    • Screen::alternate_screen to determine if the alternate screen is in use
    • Screen::row_wrapped to determine whether the row at the given index should wrap its text
    • Screen::cursor_state_formatted to set the cursor position and hidden state (including internal state like the one-past-the-end state which isn't visible in the return value of cursor_position)

    Fixed

    • Screen::rows_formatted now outputs correct escape codes in some edge cases at the beginning of a row when the previous row was wrapped
    • VPA escape sequence can no longer position the cursor off the screen
    Open source →
  11. 0.12.0 09 Mar 2021
    Release notes

    Added

    • Screen::state_formatted and Screen::state_diff convenience wrappers

    Fixed

    • Screen::attributes_formatted now correctly resets previously set attributes where necessary

    Removed

    • Removed Screen::attributes_diff, since I can't actually think of any situation where it does a thing that makes sense.
    Open source →
  12. 0.11.1 07 Mar 2021
    Release notes

    Changed

    • Drop dependency on enumset
    Open source →
  13. 0.11.0 07 Mar 2021
    Release notes

    Added

    • Screen::attributes_formatted and Screen::attributes_diff to retrieve the current state of the drawing attributes as escape sequences
    • Screen::fgcolor, Screen::bgcolor, Screen::bold, Screen::italic, Screen::underline, and Screen::inverse to retrieve the current state of the drawing attributes directly
    Open source →
  14. 0.10.0 07 Mar 2021
    Release notes

    Added

    • Implementation of std::io::Write for Parser
    Open source →
  15. 0.9.0 06 Mar 2021
    Release notes

    Added

    • Screen::contents_between, for returning the contents logically between two given cells (for things like clipboard selection)
    • Support SGR subparameters (so \e[38:2:255:0:0m behaves the same way as \e[38;2;255;0;0m)

    Fixed

    • Bump enumset to fix a dependency which fails to build
    Open source →
  16. 0.8.1 09 Feb 2020
    Release notes

    Changed

    • Bumped vte dep to 0.6.
    Open source →
  17. 0.8.0 07 Dec 2019
    Release notes

    Removed

    • Removed the unicode-normalization feature altogether - it turns out that it still has a couple edge cases where it causes incorrect behavior, and fixing those would be a lot more effort.

    Fixed

    • Fix a couple more end-of-line/wrapping bugs, especially around cursor positioning.
    • Fix applying combining characters to wide characters.
    • Ensure cells can't have contents with width zero (to avoid ambiguity). If an empty cell gets a combining character applied to it, default that cell to a (normal-width) space first.
    Open source →
  18. 0.7.0 23 Nov 2019
    Release notes

    Added

    • New (default-on) cargo feature unicode-normalization which can be disabled to disable normalizing cell contents to NFC - it's a pretty small edge case, and the data tables required to support it are quite large, which affects size-sensitive targets like wasm
    Open source →
  19. 0.6.3 20 Nov 2019
    Release notes

    Fixed

    • Fix output of contents_formatted and contents_diff when the cursor position ends at one past the end of a row.
    • If the cursor position is one past the end of a row, any char, even a combining char, needs to cause the cursor position to wrap.
    Open source →
  20. 0.6.2 13 Nov 2019
    Release notes

    Fixed

    • Fix zero-width characters when the cursor is at the end of a row.
    Open source →
  21. 0.6.1 13 Nov 2019
    Release notes

    Added

    • Add more debug logging for unhandled escape sequences.

    Changed

    • Unhandled escape sequence warnings are now at the debug log level.
    Open source →
  22. 0.6.0 13 Nov 2019
    Release notes

    Added

    • Screen::input_mode_formatted and Screen::input_mode_diff give escape codes to set the current terminal input modes.
    • Screen::title_formatted and Screen::title_diff give escape codes to set the terminal window title.
    • Screen::bells_diff gives escape codes to trigger any audible or visual bells which have been seen since the previous state.

    Changed

    • Screen::contents_diff no longer includes audible or visual bells (see Screen::bells_diff instead).
    Open source →
  23. 0.5.1 12 Nov 2019
    Release notes

    Fixed

    • Screen::set_size now actually resizes when requested (previously the underlying storage was not being resized, leading to panics when writing outside of the original screen).
    Open source →
  24. 0.5.0 12 Nov 2019
    Release notes

    Added

    • Scrollback support.
    • Default impl for Parser which creates an 80x24 terminal with no scrollback.

    Removed

    • Parser::screen_mut (and the pub &mut self methods on Screen). The few things you can do to change the screen state directly are now exposed as methods on Parser itself.

    Changed

    • Cell::contents now returns a String instead of a &str.
    • Screen::check_audible_bell and Screen::check_visual_bell have been replaced with Screen::audible_bell_count and Screen::visual_bell_count. You should keep track of the "since the last method call" state yourself instead of having the screen track it for you.

    Fixed

    • Lots of performance and output optimizations.
    • Clearing a cell now sets all of that cell's attributes to the current attribute set, since different terminals render different things for an empty cell based on the attributes.
    • Screen::contents_diff now includes audible and visual bells when appropriate.
    Open source →
  25. 0.4.0 08 Nov 2019
    Release notes

    Removed

    • Screen::fgcolor, Screen::bgcolor, Screen::bold, Screen::italic, Screen::underline, Screen::inverse, and Screen::alternate_screen: these are just implementation details that people shouldn't need to care about.

    Fixed

    • Fixed cursor movement when the cursor position is already outside of an active scroll region.
    Open source →
  26. 0.3.2 08 Nov 2019
    Release notes

    Fixed

    • Clearing cells now correctly sets the cell background color.
    • Fixed a couple bugs in wide character handling in contents_formatted and contents_diff.
    • Fixed RI when the cursor is at the top of the screen (fixes scrolling up in less, for instance).
    • Fixed VPA incorrectly being clamped to the scroll region.
    • Stop treating soft hyphen specially (as far as i can tell, no other terminals do this, and i'm not sure why i thought it was necessary to begin with).
    • contents_formatted now also resets attributes at the start, like contents_diff does.
    Open source →
  27. 0.3.1 06 Nov 2019
    Release notes

    Fixed

    • Make contents_formatted explicitly show the cursor when necessary, in case the cursor was previously hidden.
    Open source →
  28. 0.3.0 06 Nov 2019
    Release notes

    Added

    • Screen::rows which is like Screen::contents except that it returns the data by row instead of all at once, and also allows you to restrict the region returned to a subset of columns.
    • Screen::rows_formatted which is like Screen::rows, but returns escape sequences sufficient to draw the requested subset of each row.
    • Screen::contents_diff and Screen::rows_diff which return escape sequences sufficient to turn the visible state of one screen (or a subset of the screen in the case of rows_diff) into another.

    Changed

    • The screen is now exposed separately from the parser, and is cloneable.
    • contents_formatted now returns Vec<u8> instead of String.
    • contents and contents_formatted now only allow getting the contents of the entire screen rather than a subset (but see the entry for rows and rows_formatted above).

    Removed

    • Cell::new, since there's not really any reason that this is useful for someone to do from outside of the crate.

    Fixed

    • contents_formatted now preserves the state of empty cells instead of filling them with spaces.
    • We now clear the row wrapping state when the number of columns in the terminal is changed.
    • contents_formatted now ensures that the cursor has the correct hidden state and location.
    • contents_formatted now clears the screen before starting to draw.
    Open source →
  29. 0.2.0 04 Nov 2019
    Release notes

    Changed

    • Reimplemented in pure safe rust, with a much more accurate parser
    • A bunch of minor API tweaks, some backwards-incompatible
    Open source →
  30. 0.1.2 04 Jun 2016
    Release notes

    Fixed

    • Fix returning uninit memory in get_string_formatted/get_string_plaintext
    • Handle emoji and zero width unicode characters properly
    • Fix cursor positioning with regards to scroll regions and wrapping
    • Fix parsing of (ignored) character set escapes
    • Explicitly suppress status report escapes
    Open source →
  31. 0.1.1 28 Apr 2016
    Release notes

    Fixed

    • Fix builds
    Open source →
  32. 0.1.0 28 Apr 2016
    Release notes

    Added

    • Initial release
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive