Business application builder for Android and Web
SimpleUI is a completely free framework for creating business applications for Android with instant deployment on devices. These can be online or completely independent (offline) mobile workstations for accounting systems (1C: Enterprise, SAP and others) for Android devices - mobile phones, TSD, tablets, electronic kiosks. The platform executes user configurations with code interpretation both locally (python or javascript) and online (in the language of back-systems) and is focused on maximum performance for high-load solutions. With the help of the same designer, semantics and set of commands, you can create workstations for PCs based on web clients, make your own cloud solutions on the open SimpleWEB framework (on which, in turn, the cloud designer for the platform is written).
The main mission of Simple is to simplify the development and support processes as much as possible through a special solution architecture, by structuring visual forms, events and their handlers. This is not No-code, since I consider No-Code to be insufficiently flexible and universal - this is Low-code, which allows you to create solutions with the performance of native applications and even higher (see examples). This is intentionally not a cross-platform framework. Instead, it is maximally focused on deep use of the capabilities of the base platform, style and Google recommendations, which cannot be achieved in cross-platform frameworks, which are forced to offer equal capabilities on all platforms.
At the same time, SimpleUI is a research project that has been going on continuously for over 5 years, the goal of which is to find methods and architecture for continuous simplification of the development process. This search for the philosopher's stone is an endless process, some technologies take off, some do not, but in general the efficiency of the tool is constantly growing with each release. This process has another goal - to obtain an application architecture that is most suitable for LLM models among all frameworks. In the near future, ui files will be generated, and the designer will be needed only for viewing and minor edits.
SimpleUI tries to make AI capabilities really work, and not be a fashionable toy for presentations. Thus, OCR (text recognition) with the help of a special technique gives 100% accuracy and speed comparable to a barcode, and after many years of use, we can confidently say that the lack of barcoding or RFID is not a death sentence - article numbers, VINs, inventory numbers and other alphanumeric labels are read perfectly. The unique ActiveCV methodology, invented specifically for SimpleUI, allows you to visualize the video stream and complement the screens with a completely new way of interaction based on CV (computer vision), which allows you to speed up warehouse and other accounting operations many times over. A voice assistant combined with fuzzy search by user datasets speeds up the search for goods (in case there are no barcodes or text markings).
To write a solution, you only need a browser and a mobile phone on Android anywhere in the world without registration and cloud storage (configurations are downloaded as ui files or via GitHub)
You can develop your solutions on https://seditor.pw:1555/ or download this constructor locally and run it (for debugging and communication with the back-system, if required, you can also download the bus). You don't have to install anything special on your computer, but you can write the handler code in your IDE, linking it to the configuration via GitHub
Just go to the designer Configuration-New configuration, install SimpleUI (from Google Play or apk) and scan the QR code. That's it, the configuration is ready to work! You can make simple examples from https://simpleuitxt.readthedocs.io/en/latest/getting_started.html
Which handlers are best to start with?
I used to recommend online, but now pythonscript has caught up in simplicity, so if you know Python (but don't want to bother with included files at the initial stage) - then pythonscript. If you can only develop in the language of your back-system, then of course it's better to start with online, and then gradually translate handlers to python.
Also, even if you have a completely online solution, in order to reduce the load on the backend, you can move simple operations to local handlers, for example, set. For example, if you just need to switch the screen, you should not send the request back and forth, do set ShowScreen
Also, for fully online solutions, it is sometimes useful to move work with your reference information to datasets - an advantage in speed and other features.
Form elements, external equipment (such as barcode scanners) and other mechanisms (such as timers) generate events. Events are processed in handlers either online (on the back-end system side) or locally in the application and as a result of processing, variables that are displayed on screens, commands that control the application (switching screens, displaying lists, sounds and voice-over, etc.) are pushed onto the variable stack.
That is, the variable stack connects the interface, events and handlers through data and commands.
And also the variable stack connects local handlers (sometimes in different languages) with online handlers - the stack is the same in both.
SimpleUI executes code online on the side of your accounting system either via HTTP request or via the bus. Commands and variables are exchanged between the device and the back-end system in requests in the form of a stack of variables (HashMap). The syntax and principles in both cases for the developer are identical.
Option via HTTP service
This option will require the accounting system to publish an http service. The handler type in SimpleUI is online.
Option via bus, via WebSocket
Also, if there is no desire or possibility to publish a web service outside on the Internet and your system can work with web sockets, then you can work through the bus (onlinews handler type) It is described in detail here https://infostart.ru/1c/articles/2305445/
The configuration is essentially a JSON file (but with the extension .ui) that stores screens, handlers, and other structures. The configuration can be hosted somewhere on the Internet (as in the case of seditor.ru), it can be placed on your network resource, or it can be transferred locally. Once downloaded, it is stored and opened locally, but if the source address is specified in the settings, it is updated from it upon startup or a special update
Configurations can be placed locally in a repository. This is a local storage from where you can switch between configurations, they are also updated locally and they can also work in the background, for example, receive messages from the SimpleBus bus, process them in the background and somehow interact with the user
And there is also the possibility to separate any process into an independent SUIP-file, combining configuration and data, something like an Excel-file with macros, only executed not on Excel, but on SimpleUI
For local storage, you can use both SQL (SQLite) and specially developed NoSQL DBMS and a special mechanism for memory-resident datasets with the ability to save/load
The current and recommended storage configuration involves using the following tools for local storage, depending on the nature of the data and the intended use case (you can combine these tools):
As an additional alternative, you can use SQLite , including in conjunction with ORM Pony
Exchange with external systems:
For large files:
WebSocket-client (in addition to the SimpleBus bus, which also works via WebSocket but with its own features)
Bluetooth
NFC
p2p data transfer in the absence of connection
GPS
Almost the entire set of standard Android SDK widgets is supported
In the designer, visual elements are defined using nested containers (LinearLayout in AndroidSDK). The position in the container can be "Full container", "By size" and proportional to weights (for example, if you need to horizontally arrange 3 inscriptions with width proportions of 1, 3 and 2, then you need to set the Width = 0 (Manually), and set the weights to 1, 3 and 2).
Container markup defines the appearance of screens, dialog boxes, and list items
Elements can have custom borders and rounding radii, including a full circle.
If the capabilities of the constructor and containers are not enough, then there is an option of arbitrary XML markup: https://infostart.ru/1c/articles/1983895/
There are also some special visual elements that I would like to highlight separately:
Work with any scanners/TSD from the screen (screen element Barcode) with connection via:
Working with scanner events from the event service (off-screen):
Working with external printers via Bluetooth/USB/TCP-IP
It is possible to send labels to the printer both in HTML and markup languages (ZPL, TSP, PCL, ESC/POS)
Sending data to USB port (in accessory mode)
Send to TCP/IP ports
Separate advanced functions for some TSD (Urovo, Meferi)
Developers forum in telegram: https://t.me/simpledevchat
Online documentation:
Repository of the web client library based on Simple semantics: https://github.com/dvdocumentation/simpleweb Configuration editor written in SImpleWEB: https://github.com/dvdocumentation/web_simple_editor Simple ecosystem's own NoSQL DBMS: https://github.com/dvdocumentation/pelican_dbmsSimpleWEB
Online editor
Pelican
A simplified script that is sufficient for onlinews and debugging: https://github.com/dvdocumentation/simplebuslite
A very simplified (and already outdated script) for weak clients (written for RaspberryPI): https://github.com/dvdocumentation/simpleui_desktop
My name is Dmitry Vorontsov. I am engaged in the implementation of ERP, MES, WMS systems. And at some point I needed a tool that could cover the needs of the front on my projects. Being an Android developer, I understood that transferring various business logic cases directly to the Java/Android SDK stack is a labor-intensive task. I wanted to abstract from the low-level interface, but maintain the performance and responsiveness of native solutions. This is how SimpleUI appeared. Initially, it was exclusively online execution of handlers. Later, thanks to the Chaquopy project, Python appeared, then JS. Storage evolved from Sqlite to our own developments. The project has acquired its own ecosystem. Well, at the forefront is the principle of simplicity of development, which is what the name Simple