SerialPlot - Realtime Plotting Software

Small and simple software for plotting data from serial port

Similar projects worth following
This is a Qt based software for plotting data from serial port in real time.

IMPORTANT: instead of commenting please consider creating a ticket at issue tracker ( or Hackaday's notification system is broken and I may not notice your messages.

SerialPlot accepts 3 different types of data input:

  • simple binary stream, supports different number formats (unsigned/signed - 8/16/32 bits and float)
  • ASCII data in CSV format
  • user defined custom frame format (frame start byte, frame size, checksum etc..)

You can take snapshots of current view and store them in CSV files. You can also load them back from csv files, for convenient viewing.User can also define "commands" to be sent to the serial port device with a click. Commands can be defined in HEX or ASCII format.

In the sidebar you can find links to Linux and Windows downloads and source code.

  • Moving Project to Git/Github (?)

    Hasan Yavuz Özderya05/31/2021 at 20:11 1 comment

    I'm considering moving this project to git. There has been a few requests. Not many. But I feel like reason is that people just don't request such things unless a project is really really popular. Actually there has been a git repository at github for quite some time. But I did not update it. I only kept it for visibility and as another place for people to create tickets.

    From now on; I will keep github repository up to date which is at:

    I enjoy using mercurial even though I don't have much opportunity to do so. For a while I will keep using both git and mercurial. There is a mercurial extension called hggit that makes this relatively easy and pain free. For git users there should be no drawbacks.

    To be honest if git repository turns into something popular I will probably stop using mercurial altogether.

  • SerialPlot v0.12 release

    Hasan Yavuz Özderya05/14/2021 at 16:19 3 comments

    This is another minor release. There isn't any significant changes.


    • Filter by prefix for ASCII data format parser (thanks to Alexander Amelkin)
      This is useful when your data is mixed with other information such as log messages. There is no way of displaying such log messages on SerialPlot yet.
    • Export SVG (thanks to martijuerg)
    • Other minor fixes improvements etc:
      • remember user entered custom baud rate
      • add double precision floating point number format support for binary readers
      • fix 'settings invalid' error when loading config with 'first byte is size byte' enabled
      • fix for data format selection can be empty (no button is selected state which is invalid)

    As always you can find latest download links in the sidebar.

    Download links for v0.12:

    Windows installer:

    Windows EXE 7Zip:

    Windows EXE:

    Linux AppImage (based on Ubuntu 18.04):

  • SerialPlot v0.11 release

    Hasan Yavuz Özderya09/14/2020 at 11:12 1 comment

    Well, it's been a while.

    But I decided to finally put together a new release. There aren't any big news or changes. To be honest what pushed me to finally create a new release is that I forgot to move the "downloads' section from the bitbucket before they axed the mercurial repositories and as a result got a lot of mails/comments from people around to world. Sorry.

    Here are some changes that come in v0.11:

    • command line options thanks to Mehmet Aslan
    • "value tracker" that displays the sample values under cursor
    • "Text View" panel to display read values
    • Gain and Offset to adjust input data
    • An experimental "Bar Plot" widget
    • added icons for Windows
    • recorder timestamp format
    • decimal precision setting for recorder
    • port read statistics
    • many fixes

    Download links:

    Linux AppImage (Ubuntu Trusty based, should work on anything newer):

    Windows 32 bit (should work fine on 64 bit windows):

    Important: I didn't have time to test either of these images. Please let me know if you have any problems with them.

  • Building SerialPlot for Windows using Docker

    Hasan Yavuz Özderya09/14/2020 at 11:02 0 comments

    Building serialplot on windows isn't much different than building on linux. But it isn't as straightforward. Installing dependencies can be difficult. And it is also difficult to build a static EXE that doesn't require DLLs to keep it company. But most importantly it is difficult for me, because I don't use windows other than for gaming purposes. Unfortunately most users of SerialPlot use windows and as a result I can't ignore it.

    Luckily there is MXE to my rescue. This is a cross compilation toolchain to build windows binaries (and more) on a linux (unix like) host. Whats more is that they also provide 'static' toolchains. When you build your project with a static toolchain it is easier to deploy and can be smaller in size.

    So I prepared a dockerfile to make it even easier to build windows using docker. You can build this docker image on linux. AFAIK there are ways to run docker on windows host but I won't go into any details of that. It is also possible to use MXE in msys2, which is a layer to run unix programs on windows. In fact most of the windows releases until now has been built on windows using msys2 and mxe.

    Dockerfile is already included in the serialplot source code called:


    Assuming you have already installed docker, download the serialplot source code using mercurial and build the docker image:

    hg clone
    cd serialplot
    sudo docker build -t serialplot_mxe -f Dockerfile_mxe ./

    Remember this might easily take a couple hours depending on your internet speed and cpu power. To give you an idea resulting docker image is around 5GB in size.

    If all goes well you can get the built binary from inside the docker image with this command:

    sudo docker run --rm --entrypoint cat serialplot_mxe /serialplot/build_docker_mxe/serialplot.exe > ../serialplot.exe 

  • How to build SerialPlot on Linux

    Hasan Yavuz Özderya09/07/2020 at 07:59 0 comments

    These are the steps for building SerialPlot on linux. I will also provide more detailed steps for Ubuntu and similar debian based distributions.

    Building SerialPlot on linux is quite easy. Most difficult part (not really difficult) is gathering the dependencies. It is possible that you already have some of them installed such as a C++ compiler.

    I've also described how to build with docker which might be the easiest method if you are familiar with it.

    Install Dependencies

    You should have following dependencies installed, preferably using your package manager:

    • Qt5 Development Package (at least version 5.9; recommended 5.15)
    • Qt5 serialport and svg package
    • Cmake (version 3.x)
    • C++ compiler (somewhat new, should support C++11) and make (usually installed with a base package)
    • Mercurial (to download source code, optional)

    On ubuntu or similar operating systems you can install these dependencies with the  following command.

    sudo apt install build-essential qtbase5-dev libqt5serialport5-dev libqt5svg5-dev cmake mercurial

     Note: instead of 'qtbase5-dev' you can install 'qt5-default' package to make sure it is the default qt version.

    Also note: SerialPlot doesn't build with Qt4, you need Qt5.

    Also also note: you need internet access during build process. It is not necessary, but if you don't, you have to also have "Qwt" library installed.

    Get Source Code

    You can download the source code using mercurial with the following command. Mercurial is a version control tool very similar to git.

    hg clone

    Or if you don't want to deal with the mercurial you can download the latest code from this link.


    When you have everything ready, run following commands in the serialplot directory.

    mkdir build
    cmake ..
    make run

     This should build SerialPlot and start it.

    Building AppImage

    When you build SerialPlot this way it probably only works on your computer. It should work on other computers with the same distribution as yours as long as they have the correct libraries installed. If you want to lend your build to your friends you can create a portable executable called AppImage. This should run on most distributions. And it is how I release the Gnu/Linux version of the SerialPlot.

    It is easy to build SerialPlot appimage.

    Run below command in your build directory.

    cmake ..
    make appimage

    That's it. If everything goes well you should  now have SerialPlot appimage in your build directory, and it should run in most distributions (fingers crossed).

    Building with Docker

    There is a Dockerfile inside the serialplot directory ready to go. It is based on Ubuntu 18.04 (bionic) [used to be 14.04 (trusty)]. Building it, produces an appimage that you can use on Ubuntu/Debian based systems. Maybe on other distros too?

    If you don't have it installed, you can install docker on Ubuntu with this command:

    sudo apt install

    After that, get into the directory of 'serialplot' where the 'Dockerfile' exists and run this command. It might take some time depending on your internet speed.

    sudo docker build -t serialplot_bionic .

     This will build a docker image that should contain the SerialPlot appimage. After building appimage, you should get it from inside the docker image with this command.

    sudo docker run --rm --entrypoint cat serialplot_bionic /serialplot/build_docker/SerialPlot-x86_64.AppImage > ./serialplot.appimage

    Make it executable and start serialplot:

    chmod +x ./serialplot.appimage


    Although actual build process is quite simple and straightforward, if you are not experienced you may have issues building SerialPlot successfully. It usually is missing dependencies. It rarely is an incompatible library. In that case please leave a comment : ) I will be happy to help.

    Also if you have steps for other distributions and recommendations, please share, I will...

    Read more »

  • Moving SerialPlot out of bitbucket

    Hasan Yavuz Özderya05/01/2020 at 10:15 4 comments

    Bitbucket is removing mercurial support along with all mercurial repositories.

    I decided to move the source code to sourcehut.

    Here is the mercurial repository:

    Here is the new issue tracker:

    I haven't moved download files yet. I will probably have to host them myself. Sourcehut doesn't provide file hosting.

  • Sample value tracker development in progress

    Hasan Yavuz Özderya09/27/2018 at 21:11 2 comments

  • SerialPlot v0.10.0 Released

    Hasan Yavuz Özderya09/03/2017 at 15:19 0 comments

    SerialPlot 0.10 is released. This release brings some performance improvements, minor features and bug fixes.

    Instead of "number of samples" option in the "Plot" tab, now there are 2 options you can set. "Buffer Size" and "Plot Width". "Buffer Size" is the total number of samples that are kept in memory, while "Plot Width" is the maximum number of samples that are plotted at once, in X axis. To see previous samples you simply use the X axis scrollbar. The main reason for this distinction is the performance. Previously you couldn't set number of samples too high because SerialPlot tried to plot all data at one time. Now you can set "Buffer Size" to 1.000.000 and it will most likely will be fine as long as you keep "Plot Width" small. Another advantage is that, sometimes when you have frequently changing data, zooming way out doesn't mean much, you have too keep a certain zoom level in X axis to be able to see any detail. If you enjoy the old behaviour you can always set buffer size option same number as plot width and it should be fine. Remember though "plot width" option has a smaller limit then "buffer size" for performance reasons. A note; performance improvements are not done. I'm still working on some improvements to increase "buffer size" limitations.

    Now you can set RS232 control signals (DTR, RTS) and see input signal () statuses from the "Port" tab. Being able to set DTR signal was a requested feature so that SerialPlot can work with Arduino Leanardo board.

    Also we now have an update checker. You can launch it from the "Help" menu. It will check updates once a day when you first launch SerialPlot unless you disable it.

    Other improvements and bug fixes:

    • custom ASCII (csv) data column delimiter
    • fixed snapshot display bug
    • fixed command type not loaded/remembered
    • fixed duplicated channel names

    Check the sidebar for download links. I will try update the win32 version and launchpad PPA later this week.

  • Patch Release 0.9.1

    Hasan Yavuz Özderya05/05/2017 at 12:25 6 comments

    This patch fixes various issues and adds small improvements:

    • fix symbols getting stuck after multiplot mode
    • fix symbols in snapshot view
    • add options to disable (or always enable) symbols
    • panning (Ctrl+Left Mouse) @Maxim
    • show snapshot view in current plot settings
    • fix snapshot view axis stuck at [0-1]

    See downloads links at the sidebar.

  • SerialPlot 0.9 Released (Recording and Scrollbars)

    Hasan Yavuz Özderya04/17/2017 at 12:55 3 comments

    Hi everyone, it's release time. First of all I want to thank everyone who contacted me via various channels for their kind comments! And ideas of course... some to be implemented... some day... : )


    • scrollbars for plot (appears when zoomed)
    • continuous recording to CSV file
    • channels can be hidden and plot colors are adjustable ("Plot" tab)
    • bunch of various GUI improvements and minor bug fixes

    Installation for linux:

    PPA for Ubuntu 16.04 (xenial) and based distros:

    Appimage(*) for other distros:

    Installation for windows:

    64bit setup:

    32bit setup:

    (*) Appimage may be broken on some systems. Please let me know if you have any problems.

View all 18 project logs

Enjoy this project?



Kandreo Gotra wrote 01/11/2024 at 09:28 point

SerialPlot - Elevate your real-time plotting experience with GPT Writing Prompts integration. Seamlessly solve plotting complexities, ensuring dynamic and efficient data visualization in this innovative software.

  Are you sure? yes | no

Paul wrote 11/22/2023 at 19:30 point (in order to download the windows exe) is not reachable (Nov 22 2023)

  Are you sure? yes | no

Stefan Pittelkow wrote 11/07/2023 at 20:04 point

Since days I'm looking for 24bit real time data visu tools for seismic experiments.  Your program is phantastic! Thank's for your work and sharing to everybody!

  Are you sure? yes | no

peterhsi75 wrote 10/26/2023 at 17:00 point

I solve this problem because the 1st 5 bytes are always fixed. So I put the 5 bytes as [Frame start] and [Fixed size] to 1. 

  Are you sure? yes | no

peterhsi75 wrote 10/26/2023 at 15:45 point

Great simple tool. I had a gas sensor with serial port interface. I sent  6 bytes of command. It returns 10 bytes of binary data. It start with 0xAA as a header. Only the 6th byte is the data (big Endian).  How do I define this in [custom data format]?

  Are you sure? yes | no

Abdullah8877 wrote 09/27/2023 at 14:24 point

reallly great.

  Are you sure? yes | no

Abdullah8877 wrote 09/27/2023 at 14:22 point

Thanks for this. <a href=""></a>

  Are you sure? yes | no

Luca wrote 09/10/2023 at 14:30 point

Great project, exactly what I was looking for! A question: how to set X and Y axis scales, to reflect real data got via serial stream? At present I see just the incoming data scales, but what if they run within a given range, to properly represent them?

Moreover: any way to visually compare a previously stored reference curve and the measured one?


  Are you sure? yes | no

Jason Lambert wrote 07/26/2023 at 18:18 point

Created a hackaday profile just so I could comment on how SerialPlot is a great tool! Thanks for the work.

  Are you sure? yes | no

Qierven wrote 07/11/2023 at 00:43 point

Are you asking if it's possible to set up automatic recurring commands to be sent?

  Are you sure? yes | no

k1-fis wrote 06/24/2023 at 11:20 point

windows version-x64 link is not working! please update it. 

  Are you sure? yes | no

hambo wrote 05/11/2023 at 18:28 point

Love it, I like the gain and offset functions. Any chance to add multi-plot function? 

  Are you sure? yes | no

destinationsyt8 wrote 05/04/2023 at 17:20 point

SerialPlot seems like a very useful tool for plotting data from a serial port in real time. I appreciate that it supports three different types of data input and allows users to define their own custom frame format. It's also great that you can take snapshots of the current view and store them in CSV files, as well as define commands to be sent to the serial port device with a click. The links provided for Linux and Windows downloads and source code are very helpful. Thank you for sharing this tool with the community!

  Are you sure? yes | no wrote 03/22/2023 at 04:51 point

Hello Hasan,

    This is really a nice software, stable and easy to operate. It would be perfect if it could plot curve from UDP.

  Are you sure? yes | no

Faizan Samdani wrote 03/06/2023 at 10:29 point

Hey there bud, hope you're doing good, Seems like your'e application is generating the right dta coming from the serial port, I used it to analyze my 4 thermocouples data linked to a single arduino. However when recording data I have a issue that included time stamp shows me a very big exponential numbers for seconds. I want to switch to local time that is when I record data it starts from as t= 0s and when I finish it it ends the time. Can you tell me how to do it??

  Are you sure? yes | no

Ashok wrote 02/27/2023 at 18:48 point

Hello  Hasan,

 I hope all is well. I am new and learning here.  I came this software and want to learn more.

Is this software SerialPlot - Realtime Plotting  can communicate via USB port to  USB  readable -4 channel A/D boards to read 0-10 V signals? I am thinking to connect ADC-4U12 Analog to Digital Converter (12 bit) ?

 is this able to read RS-485 RTU protocol communication ?  there are lot of hardware avialble to connect -8ch 0-10V Voltage Analog to Digital Converter ADC MODBUS RTU RS485 Serial Port 

If not then i will select only RS-232  -board to do communication 

ADC4-12RS232 Analog to Digital Converter (12 bit)

 Let me know so i can select correct hardware for communication.



  Are you sure? yes | no

embeddedfreedom wrote 12/30/2022 at 19:16 point

A very basic question as I am a newbie here. How does the plotter distinguish between the order of the graphs. Say I have 4 graphs but when the connection is made, the hardware has already began sending characters this is assuming there are no commands set from Serialplot. Let me explain in clearer terms. If I have started sending the values from the board to the Computer but I have not yet opened the port from Serialport. And then when I have opened the port, the hardware is sending the third value of the graph say. Will this value be taken as the first value? What if I want to tie a channel with a particular value, in other words how do I sync the order of the values coming in, like the first value is always tied to channel 1 no matter when I connect the Serialplot to the hardware? Is custom frame option the only way? 

  Are you sure? yes | no

JW3141 wrote 09/13/2022 at 14:31 point


Am I able to modify this project with a free IDE?


  Are you sure? yes | no

Hasan Yavuz Özderya wrote 09/14/2022 at 09:38 point

Yes. Any IDE that can open cmake projects is fine. I would recommend qtcreator. We also have a qtcreator .pro file in the project 5hat you can open. For the record you don't need an IDE to edit the source code.

  Are you sure? yes | no

JW3141 wrote 09/14/2022 at 15:12 point

Thank you for your reply, i would like some unique and fairly simple modifications.

qtcreator is expensive isn't it?

Im going to try and open it via  visual studio 

if all fails are you able to take modification requests?


  Are you sure? yes | no

Pedro Silva wrote 09/05/2022 at 13:58 point

Hello Hasan! This is Pedro, from Portugal. My friend my situation is that i have one string coming from ESP32 to COM port in Windows at around 2,000 strings/second. The values on this screeen are ASCII representing HEX values, example:


Where these are the fields separated by comma:

- timestamp in micros

- string ID

- string hex bytes length

- Byte1.... Byte8

It happens that these data work in pairs, MSB+LSB to be interpreted in decimal, for example, in this example we have data 0x07D0, 0x0082, 0x0082, 0x0082.

This is a mandatory format for other purposes, i cannot change. In this case we have 4 channels, i tried some ways but couldn't figure out if it is possible to plot these 4 data in your software. Besides, i would have to make it skip the first 3 fields, which are not to be polotted.

Any suggestion?


Pedro Silva.

  Are you sure? yes | no

wagner wrote 02/03/2022 at 16:12 point

Hey, good morning.  

I have a serial data representing X Y coordinates that I need to see/record with SerialPlot.   Each frame is pure ASCII, composed by  AxxxyyyF with 0D0A (enter/return) at the end. Total 10 bytes including 0D0A.  Everything is ASCII, always starts with letter  'A', xxx = pure ASCII number composed by 3 digits from 001-800, yyy the same, 3 digits from 001-600.  The final F letter could be B, N or C, can be ignored.  

 I wanted to plot X Y.   I was able to see an up/down stairsteps if I select Custom Frame, FrameStart=41, 1 channel, Frame Fixed Size 1, Int8.   Could NOT see anything on ASCII data format any combination.  The simple binary creates a mess up on screen since data is not binary.    

I need just to receive a package entered by 0D0A, first ASCII letter "A" ignored, next 3 ASCII number digits to be X, next 3 ASCII number digits to be Y, ignore next ASCII char.     

This is to test an optical touch panel that spits this frame for any and every move or change in the field.  In real this simulates a very old serial mouse, but I could not find at internet a way to make Win10 to recognizes the 'COM7:' as a mouse and move cursor. This software is the closer to what I need for the test.

Thank you for any suggestion or hint.


  Are you sure? yes | no

Hasan Yavuz Özderya wrote 02/21/2022 at 11:59 point

It is not possible to plot XY data with serialplot at the moment.

  Are you sure? yes | no

Ashok wrote 02/28/2023 at 15:36 point


What is way to plot data as X-Y  means - X -represent channel 1 and Y represent Channel Y. Can we do this using this software? 

  Are you sure? yes | no

Ashok wrote 02/28/2023 at 15:39 point

Good morning Wagner,

Have you plot X-Y ? X- represent channel 1  and  Y represent channel 2. Did you use this software or other for represent your data? I would appreciate it if you send me some info how to do X- Y plot ? I am new for this software application.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates