AI prompts
base on Cross-platform low-code GUI and automation [](https://github.com/eez-open/studio/releases) [](https://github.com/eez-open/studio/blob/master/LICENSE.TXT) [](https://liberapay.com/eez-open/donate) [](https://github.com/eez-open/studio/releases)
### Tehnical support
Your comments, suggestions, new feature requests and bug reports are welcome and can be made in the [Issues](https://github.com/eez-open/studio/issues) section. However, please take into account that reported issues will be processed by the Envox team according to the best effort principle, so adjust your expectations accordingly. However, if you want a more prompt and high-quality response as well as direct contact with technical support, you can choose one of our [Support plans](https://www.envox.eu/support-plans/) (check also [this](https://www.envox.eu/premium-technical-support-for-eez-studio/) blog post).
You are invited to join our community on [Discord](https://discord.gg/q5KAeeenNG) where you can get answers to some questions from other members. You can also start a discussion under [Discussions](https://github.com/eez-open/studio/discussions).
### Ownership and License
The contributors are listed in CONTRIB.TXT. This project uses the GPL v3 license, see LICENSE.TXT.
EEZ Studio uses the [C4.1 (Collective Code Construction Contract)](http://rfc.zeromq.org/spec:22) process for contributions.
To report an issue, use the [EEZ Studio issue tracker](https://github.com/eez-open/studio/issues).
_Important note: Envox d.o.o. does not claim any ownership rights to the source code generated by the `Build` command except in the case of a project that uses EEZ Flow when it is given under the MIT license._
_The user owns the `.eez-project` file and all the source code generated from the file template definitions that are part of `eez-project` file. EEZ Studio may also generate files that are under MIT, BSD 2.0 or Public Domain license._
### Links
- [Web page](https://www.envox.eu/studio/studio-introduction/)
- [FAQ](https://github.com/eez-open/studio/wiki/Q&A)
- [Discord](https://discord.gg/q5KAeeenNG) server
- [X (Twitter)](https://twitter.com/envox)
- [Mastodon](https://mastodon.social/@envox)
- [YouTube](https://www.youtube.com/c/eezopen) channel
- [Liberapay](https://liberapay.com/eez-open/donate) donations <img src="https://liberapay.com/assets/liberapay/icon-v2_white-on-yellow.svg" width="16" />
## Introduction
EEZ Studio is a free and open source cross-platform low-code visual tool for desktop and embedded GUIs with [LVGL](https://lvgl.io/) support. Built-in _EEZ Flow_ enables the creation of complex scenarios for test and measurement automation, and the Instruments feature offers remote control of multiple devices and T&M equipment including [EEZ BB3](https://github.com/eez-open/modular-psu) T&M chassis and [EEZ H24005](https://github.com/eez-open/psu-hw) programmable power supply and any other T&M devices that support [SCPI](https://www.ivifoundation.org/scpi/) from manufacturers such as Keysight, Rigol, Siglent, etc.
### EEZ Studio _Project_

- Modular visual development environment for designing TFT display screen decorations and defining user interaction (embedded GUI)
- Generate C++ code for embedded GUI functionality that can be directly included in [STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html) for BB3 and other STM32 target platforms or [Arduino IDE](https://www.arduino.cc/en/software) for H24005 and other Arduino compatible target platforms
- _Instrument definition file_ (IDF) builder with context sensitive SCPI commands help (based on Keysight’s [Offline Command Expert command set](https://www.keysight.com/main/software.jspx?cc=US&lc=eng&ckey=2333687&nid=-11143.0.00&id=2333687) XML structure) suitable for EEZ Studio _Instrument_ and [Keysight Command Expert](https://www.keysight.com/en/pd-2036130/command-expert)
- SCPI command help generator based on bookmarked HTML generated directly from .odt file using [EEZ WebPublish](https://github.com/eez-open/WebPublish) extension for OpenOffice/LibreOffice.
- [LVGL](https://lvgl.io/) (Light and Versatile Graphics Library) 8.x and 9.x support
- Project templates (using giteo.io repositories) and comparison of projects
- Drag&drop editor for creating instrument's desktop dashboard (for remote control and management)
- Flowchart based low-code programming for desktop dashboard

### EEZ Studio _Instrument_

- Dynamic environment where multiple instruments can be configured and easily accessed
- Session oriented interaction with each SCPI instrument
- Serial (via USB), Ethernet and VISA (via free [R&S®VISA](https://www.rohde-schwarz.com/us/driver-pages/remote-control/3-visa-and-tools_231388.html)) T&M instrument interfaces support
- Direct import of EEZ Studio generated IDFs and **Keysight’s Offline Command Expert command** sets
- IEXT (Instrument EXTension) catalog with growing number of supported instruments (Rigol, Siglent, Keysight, etc.)
- History of all activities with search/content filtering
- Quick navigation via calendar ("heatmap") or sessions list view
- Shortcuts (hotkeys and buttons) that can be user defined or come predefined from imported IDF. The shortcut can contain single or sequence of SCPI commands or Javascript code.
- Javascript code for task automation (e.g. logfile, or programming list upload/download, etc.) can be also assigned to the shortcut
- SCPI commands context sensitive help with search
- File upload (instrument to PC) with image preview (e.g. screenshots)
- File download (PC to instrument) automation for transferring instrument profiles
- Simple arbitrary waveform editor (envelope and table mode)
- Displaying measurement data as graphs
- FFT analysis, harmonics and simple math functions (Period, Frequency, Min, Max, Peak-to-Peak, Average)
- Export graphs as .CSV file
---
New functionality is under development thanks to the sponsorship of the [NGI0 PET](https://nlnet.nl/project/EEZ-DIB/) and [NGI0 Entrust](https://nlnet.nl/project/EEZ-Studio/#ack) funds from NLnet. The following milestones have been achieved so far:
- [M1](https://github.com/eez-open/studio/issues/102) - Visual editor
- [M2](https://github.com/eez-open/studio/issues/103) - Interpreter for PC
- [M3](https://github.com/eez-open/studio/issues/104) - Interpreter for BB3
- [M4](https://github.com/eez-open/studio/issues/134) - Debugger for PC
- [M5](https://github.com/eez-open/studio/issues/135) - Debugger for BB3
- [M6](https://github.com/eez-open/studio/releases/tag/0.9.90) - EEZ flow engine unification
- [M7](https://github.com/eez-open/studio/releases/tag/v0.9.91) - Multilanguage support in project
- [M8](https://github.com/eez-open/studio/releases/tag/v0.9.92) - Widgets advanced control
- [M9](https://github.com/eez-open/studio/releases/tag/v0.9.93) - Project templates
- [M10](https://github.com/eez-open/studio/releases/tag/v0.9.94) - Gitea.io integration
- [M11](https://github.com/eez-open/studio/releases/tag/v0.9.95) - New EEZ Flow extensions
- [M12](https://github.com/eez-open/studio/releases/tag/v0.9.96) - LVGL integration
- [M13](https://github.com/eez-open/studio/releases/tag/v0.9.98) - Standalone Flow dashboard
- [M14](https://github.com/eez-open/studio/releases/tag/v0.9.99) - Home page modifications and enhancements
- [M15](https://github.com/eez-open/studio/releases/tag/v0.10.1) - Enhancements (more examples, extension manager, MQTT)
- [M16](https://github.com/eez-open/studio/releases/tag/v0.10.2) - Online help, enhancements, bug fixing for “Actions”
- [M17](https://github.com/eez-open/studio/releases/tag/v0.10.3) - Online help, enhancements, bug fixing for “Widgets”
- [M18](https://github.com/eez-open/studio/releases/tag/v0.12.0) - Simultaneous control of multiple instruments
- [M19](https://github.com/eez-open/studio/releases/tag/v0.13.0) - Support for non-SCPI instruments and devices
- [M20](https://github.com/eez-open/studio/releases/tag/v0.14.0) - Hybrid table/tree/grid widget
- [M21](https://github.com/eez-open/studio/releases/tag/v0.15.0) - Project scrapbook
- [M22](https://github.com/eez-open/studio/releases/tag/v0.16.0) - Improvement of session-centric work with instruments and data management
- [M23](https://github.com/eez-open/studio/releases/tag/v0.17.0) - Multimedia support / Support for networking / other Instruments related
---
## Installation
64-bit OS is required in all cases.
### Linux
Depending on your linux distribution, choose one of the listed packages (.deb, .rpm) and start the installation using the associated installer.
In addition, there is a self-executing .AppImage version that, after downloading, needs to enable the `Allow executing file as program` under file `Permissions` before starting it.
If you encounter a problem running the .AppImage version on your Linux distribution, try running it using the `--no-sandbox` option, i.e. `./EEZ-Studio-[version].AppImage --no-sandbox`
### Mac
Download `eezstudio-mac.zip`, unpack and move `eezstudio.app` to Applications.
### Windows
Download and start `EEZ_Studio_setup.exe`.
### Nix
The Nix flake provides a derivation for EEZ Studio or an overlay
that provides that derivation. It can be used to install the project using
[Nix package manager](https://nixos.org/).
### Build and run from source (all operating systems)
- Install `Node.JS 16.x` or newer
- Install `node-gyp`, more information at https://github.com/nodejs/node-gyp#installation
#### Only Linux:
```
sudo apt-get install build-essential libudev-dev libnss3
```
#### Only Raspbian:
Install Node.js 16 and npm on Raspberry Pi: https://lindevs.com/install-node-js-and-npm-on-raspberry-pi/
```
sudo apt-get install build-essential libudev-dev libopenjp2-tools ruby-full
sudo gem install fpm
```
#### All platforms:
```
git clone https://github.com/eez-open/studio
cd studio
npm install
npm run build
```
Start with:
```
npm start
```
Create distribution packages (except MacOS and Raspbian):
```
npm run dist
```
On MacOS:
```
npm run dist-mac-arm64
```
or
```
npm run dist-mac-x64
```
On Raspbian:
```
npm run dist-raspbian
```
#### Nix
To build:
```
nix build 'github:eez-open/studio'
```
To start:
```
nix run 'github:eez-open/studio'
```
## USB TMC
The USB TMC driver must be installed if you want to access the T&M instrument using the USB-TMC interface from EEZ Studio _Instrument_ section.
### Windows
Download and start [Zadig](http://zadig.akeo.ie/). Select your device, select libusb-win32 and press "Replace Driver" button:

### Linux
You will probably need to add your Linux account to the usbtmc group before you can access the instrument using EEZ Studio. Connect your instrument with a USB cable and turn it on. Wait until booting is complete. Now check the instrument group name by entering the following command:
```
ls -l /dev/usbtmc*
```
In case it is root, enter the command:
```
sudo groupadd usbtmc
```
Now, add your account (<username>) to the group:
```
sudo usermod -a -G usbtmc <username>
```
A reboot is required. After that, the gid of `/dev/usbtmc0` should be set to `usbtmc` and
you are ready to use your instrument via USB-TMC interface.
## FAQ
[FAQ Wiki](https://github.com/eez-open/studio/wiki/FAQ)
**Q**: Where is the database file by default?
**A**: Depending on the operating system, it can be:
- Linux: `~/.config/eezstudio/storage.db`
- Mac: `~/Library/Application\ Support/eezstudio/storage.db`
- Windows: `%appdata%\eezstudio\storage.db`
The default created database as well as its location can be changed later through the options in the _Settings_ section of EEZ Studio.
**Q**: Where are the IEXTs (Instrument EXTensions) used to access T&M instruments stored?
**A**: Depending on the operating system, it can be:
- Linux: `~/.config/eezstudio/extensions`
- Mac: `~/Library/Application\ Support/eezstudio/extensions`
- Windows: `%appdata%\eezstudio\extensions`
", Assign "at most 3 tags" to the expected json: {"id":"12967","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"