-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfeatures.html
486 lines (471 loc) · 34.4 KB
/
features.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
<!doctype html>
<html lang="en-US">
<head>
<link rel="alternate" href="https://lsfusion.org/features" hreflang="en" />
<link rel="alternate" href="https://lsfusion.org/ru/features" hreflang="ru" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="description" content="Main lsFusion features. lsFusion is the most declarative and low-code business / web application development platform ever. Language-based. Open-source." />
<meta name="keywords" content="business application, web application, development platform, DSL, low-code, ERP platform, reactive programming, function-level, RAD, rapid application development, modular, open source, free application development" />
<title>lsFusion | Features</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&display=swap" rel="stylesheet">
<link href="/css/app.css" rel="stylesheet" type="text/css" />
<link rel="apple-touch-icon" sizes="180x180" href="/imgs/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/imgs/favicon/favicon_32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/imgs/favicon/favicon_16x16.png">
<link rel="icon" type="image/x-icon" href="/imgs/favicon/favicon.ico">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-38678623-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-38678623-1');
</script>
</head>
<body>
<nav>
<div class="inner">
<h2><a href="/" title="Go to Homepage">lsFusion</a></h2>
<a class="menu-link" href="#menu">Menu</a>
<ul class="nav">
<li><a href="/features" class="active">Features</a></li>
<li><a href="/compare">Compare</a></li>
<li><a href="https://docs.lsfusion.org/Install/" target="_blank" title="Click to open in a new window">Install</a></li>
<li><a href="https://docs.lsfusion.org" target="_blank" title="Click to open in a new window">Learn</a></li>
<li><a href="/support">Support</a></li>
<li><a href="/solutions">Solutions</a></li>
<li id="languages">
<div class="language">
<strong>EN</strong>
<ul>
<li><span class="current">En</span></li>
<li><a href="/ru/">Ру</a></li>
</ul>
</div>
</li>
</ul>
</div>
</nav>
<div class="inner">
<h1>
<em>What</em> will you get with lsFusion?
<a href="/compare#start">Compare by Features</a>
</h1>
<ul class="features">
<li id="feature-single-language" class="develop_rapidly develop_simply">
<div class="inner">
<h2>Single language for data</h2>
<p>There is no <a href="https://en.wikipedia.org/wiki/Object%E2%80%93relational_impedance_mismatch">object–relational impedance mismatch</a> in the platform - when a developer has to constantly choose between "fast" SQL queries and code in a "convenient" imperative language. Both approaches are so abstracted and combined that the boundary between them is almost non-existent. The developer always works with data in the same paradigm, and how and where all this work is done is entirely the responsibility of the platform itself.</p>
<nav>
<a href="/compare?id=1">Compare</a>
</nav>
</div>
</li>
<li id="feature-single-paradigm" class="develop_rapidly develop_simply extend_the_system">
<div class="inner">
<h2>Single paradigm for UI</h2>
<p>The platform doesn't split the user interface into interactive forms and reports. Any form can contain both input and calculated data and can be displayed in a print (like a classic report) or interactive (editable) view. Accordingly, users can not only see the data they need to make a decision, but also immediately enter the decision they've made through the same UI.</p>
<nav>
<a href="https://docs.lsfusion.org/Form_views/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_GUI/" target="_blank">How to</a>
<a href="/compare?id=2">Compare</a>
</nav>
</div>
</li>
<li id="feature-server-to-client-access" class="develop_rapidly develop_simply">
<div class="inner">
<h2>Server-to-client access</h2>
<p>The platform doesn't split business logic into server and client sides, which allows developers to request modal interaction with the user at any time. In this case, the platform automatically pauses the current action, sends a request to the user, and resumes the action as soon as the response is received.</p>
<nav>
<a href="https://docs.lsfusion.org/Value_input/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Data_entry/" target="_blank">How to</a>
<a href="/compare?id=3">Compare</a>
</nav>
</div>
</li>
<li id="feature-no-orm-yes-sql" class="any_amount_of_data">
<div class="inner">
<h2>No ORM, Yes SQL</h2>
<p>When a certain action involves data processing for many objects at once, the platform tries, whenever possible, to perform this processing on the database server with a single query (i.e. for all objects at once). In this case, all generated queries are optimized as much as possible depending on the features of the database server.</p>
<nav>
<a href="/compare?id=4">Compare</a>
</nav>
</div>
</li>
<li id="feature-data-change-events" class="develop_rapidly develop_simply any_complexity">
<div class="inner">
<h2>Data change events</h2>
<p>The platform allows you to create event handlers for any changes in any data (even calculated data). The use of this mechanism allows you to significantly increase the modularity of the created solutions.</p>
<nav>
<a href="https://docs.lsfusion.org/Events/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Events/" target="_blank">How to</a>
<a href="/compare?id=5">Compare</a>
</nav>
</div>
</li>
<li id="feature-dynamic-physical-model" class="any_amount_of_data">
<div class="inner">
<h2>Dynamic physical model</h2>
<p>The platform allows you to materialize any existing indicators in the system at any time, add new tables or delete existing ones, or change the location of materialized indicators in these tables.</p>
<nav>
<a href="https://docs.lsfusion.org/Execution/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Physical_model/" target="_blank">How to</a>
<a href="/compare?id=6">Compare</a>
</nav>
</div>
</li>
<li id="feature-constraints-on-any-data" class="develop_rapidly develop_simply trust_the_system">
<div class="inner">
<h2>Constraints on any data</h2>
<p>The platform allows you to create constraints on the values of any data (even calculated data). All such constraints (as well as events) are global, so an inexperienced user or developer cannot break them with an incorrect transaction.</p>
<nav>
<a href="https://docs.lsfusion.org/Constraints/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Constraints/" target="_blank">How to</a>
<a href="/compare?id=7">Compare</a>
</nav>
</div>
</li>
<li id="feature-absolute-reactivity" class="develop_rapidly develop_simply extend_the_system">
<div class="inner">
<h2>Absolute reactivity</h2>
<p>All calculated data is automatically updated once the data it uses is changed. This rule applies always and everywhere, whether you're displaying interactive forms or simply accessing data inside the action being executed.</p>
<nav>
<a href="/compare?id=8">Compare</a>
</nav>
</div>
</li>
<li id="feature-cross-platform-server" class="any_infrastructure">
<div class="inner">
<h2>Cross-platform server</h2>
<p>Supports any OS for which JVM is implemented, as well as the most popular relational databases.</p>
<nav>
<a href="/compare?id=9">Compare</a>
</nav>
</div>
</li>
<li id="feature-open-database-structure" class="communicate_with_the_system">
<div class="inner">
<h2>Open database structure</h2>
<p>The mapping of logic to the database is absolutely transparent, and the developer can totally control this process. No generated names or surrogate tables.</p>
<nav>
<a href="https://docs.lsfusion.org/Execution/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Physical_model/" target="_blank">How to</a>
<a href="/compare?id=10">Compare</a>
</nav>
</div>
</li>
<li id="feature-cross-platform-client" class="any_infrastructure">
<div class="inner">
<h2>Cross-platform client</h2>
<p>The platform supports both desktop and web clients. For the desktop client, as well as for the server, the platform supports any OS for which there are JVM implementations. Also, since relative (rather than absolute) positioning is used for the components, they are rendered in the web client natively using CSS (without JavaScript), which significantly improves UI responsiveness in the web client. In addition, neither the desktop nor the web client contain any application logic, which greatly simplifies their deployment (i.e. you can use the same client for any logic).</p>
<nav>
<a href="/compare?id=11">Compare</a>
</nav>
</div>
</li>
<li id="feature-declarative-handling-of-external-formats" class="develop_rapidly develop_simply communicate_with_the_system">
<div class="inner">
<h2>Declarative handling of external formats</h2>
<p>Any form can not only be shown to the user interactively or printed out, but also can be exported in most popular data formats (JSON, XML, CSV, XLS, DBF, etc.). This operation is symmetrical - you can also import data from a file in any of these formats back into the form. Both processes are absolutely declarative and use the same concepts as the UI, which greatly simplifies interaction with external systems.</p>
<nav>
<a href="https://docs.lsfusion.org/Structured_view/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Working_with_external_formats/" target="_blank">How to</a>
<a href="/compare?id=12">Compare</a>
</nav>
</div>
</li>
<li id="feature-efficient-client-server-communication" class="any_number_of_users scale_the_system">
<div class="inner">
<h2>Efficient client-server communication</h2>
<p>Client-server communication at the physical level minimizes synchronous round-trip calls (i.e. each user action leads to a single - usually asynchronous - request/response pair). The desktop client also archives and encrypts all transferred data (when necessary). During client-server communication (via TCP/IP for the desktop client or HTTP for the Web client), the platform provides guarantee of delivery - it resends any lost requests and ensures that they are processed in the correct order. All these features help the platform run efficiently even on low-bandwidth, unstable, or high-latency communication channels.</p>
<nav>
<a href="/compare?id=13">Compare</a>
</nav>
</div>
</li>
<li id="feature-transparent-integration" class="communicate_with_the_system">
<div class="inner">
<h2>Transparent integration</h2>
<p>The platform supports access to the system via the most common general-purpose application protocol (HTTP), and the access interface includes not only execution of some action (with automatic argument parsing), but also execution of lsFusion code (as when accessing SQL servers). In addition, the platform at the language level supports access to SQL servers, other lsFusion systems, any external systems via HTTP, etc. And, since the server itself is implemented as a Spring bean, you can manage its life cycle using a standard Spring IoC container. All these features allow you to use lsFusion not only as a fully-fledged development platform, but also as a database or even as a Java library.</p>
<nav>
<a href="https://docs.lsfusion.org/Integration/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Integration/" target="_blank">How to</a>
<a href="/compare?id=14">Compare</a>
</nav>
</div>
</li>
<li id="feature-ci-in-acid-right-out-of-the-box" class="any_number_of_users trust_the_system">
<div class="inner">
<h2>CI in <em>ACID</em> right out of the box</h2>
<p>The platform can safely roll back the state of the application server to the state at the start of any transaction. This allows you to use the native integrity tools of modern SQL servers, which not only significantly reduces labor costs and chances of human errors when developing a system for a highly concurrent environment, but also makes such a system much more scalable (provided that versioned DBMS are used).</p>
<nav>
<a href="/compare?id=15">Compare</a>
</nav>
</div>
</li>
<li id="feature-seamless-linking-of-java-libraries-sql-functions" class="communicate_with_the_system">
<div class="inner">
<h2>Transparent linking of Java libraries / SQL functions</h2>
<p>The application server runs on a Java virtual machine (JVM), which allows you to link any of the numerous existing Java libraries to it. All you have to do is create your Java action, register it with the platform, and then use it just like any other action written on the platform's language. Similarly, you can transparently use custom SQL functions of the database server you're using.</p>
<nav>
<a href="https://docs.lsfusion.org/Access_to_an_internal_system_INTERNAL_FORMULA/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Access_to_internal_systems/" target="_blank">How to</a>
<a href="/compare?id=16">Compare</a>
</nav>
</div>
</li>
<li id="feature-everything-as-code" class="develop_rapidly any_complexity manage_the_system">
<div class="inner">
<h2>Everything as code</h2>
<p>All elements of the system, from events to form design, are written in the lsFusion language and stored in plain text files (without any shared repositories with an unknown structure). This allows you to use popular version control systems (Git, Subversion) and project-building tools (Maven, Gradle, built into IDEs) when working with projects. In addition, this approach simplifies the support and deployment of the system you develop, because it allows, first, using a simple text editor to view and, if necessary, quickly modify the logic, and second, easily identify any element in the system, by its file and line number in this file.</p>
<nav>
<a href="https://docs.lsfusion.org/Language/" target="_blank">Documentation</a>
<a href="/compare?id=17">Compare</a>
</nav>
</div>
</li>
<li id="feature-easy-to-use-language" class="develop_rapidly">
<div class="inner">
<h2>Low-code language</h2>
<p>The platform allows you to group element names into namespaces and consider names in the same namespace as having higher priority when searching for elements. In most cases, you need to specify only the "short" name of the element you're searching, which makes the code more concise and readable. In addition, you can specify a class for each parameter in the code, and this class will also be taken into account during elements search (i.e. explicit typing is supported). This not only makes your code shorter and simpler, but also gives you early error detection, smart auto-completion, and lots of other useful features.</p>
<nav>
<a href="https://docs.lsfusion.org/Element_identification/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Searching_for_elements/" target="_blank">How to</a>
<a href="/compare?id=18">Compare</a>
</nav>
</div>
</li>
<li id="feature-easy-to-use-ide" class="develop_rapidly">
<div class="inner">
<h2>Powerful IDE</h2>
<p>Intellij IDEA-based IDE with everything developers could ever need: usages search, code/error highlighting, smart auto-completion, quick jump to declarations, class structure, renaming of elements, usage tree, data change breakpoints, debugger, and many other features.</p>
<nav>
<a href="https://docs.lsfusion.org/IDE/" target="_blank">Documentation</a>
<a href="/compare?id=19">Compare</a>
</nav>
</div>
</li>
<li id="feature-metaprogramming" class="develop_rapidly any_complexity">
<div class="inner">
<h2>Metaprogramming</h2>
<p>Do you want to create your own high-level operator, or maybe you just don't know how to generalize the logic, but want to reuse it? The platform provides full support for automatic code generation, both server-side and IDE-side.</p>
<nav>
<a href="https://docs.lsfusion.org/Metaprogramming/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Metaprogramming/" target="_blank">How to</a>
<a href="/compare?id=20">Compare</a>
</nav>
</div>
</li>
<li id="feature-three-tier-architecture" class="any_number_of_users">
<div class="inner">
<h2>Three-tier architecture</h2>
<p>The platform executes the imperative part of the system logic (i.e. everything related to data changes) on application servers and the declarative part (i.e. everything related to data calculations) on database servers. This separation simplifies the scaling of the system you develop and strengthens its fault tolerance due to the different nature of workload on these servers (e.g. using swap on an application server is much more dangerous than on a database server).</p>
<nav>
<a href="/compare?id=21">Compare</a>
</nav>
</div>
</li>
<li id="feature-clustering" class="any_number_of_users">
<div class="inner">
<h2>Clustering</h2>
<p>Since the application servers don't have any shared data, you can easily add as many of them as you need. In addition, the platform can transfer user data between database servers asynchronously, which, in turn, allows you to dynamically distribute the workload among them. For example, if data is written to the database (and thus ACID is needed), performing processing on the masters, and in other cases - on the least loaded slaves.</p>
<nav>
<a href="/compare?id=22">Compare</a>
</nav>
</div>
</li>
<li id="feature-extensions" class="any_complexity">
<div class="inner">
<h2>Extensions</h2>
<p>The extension technique allows developers to extend the functionality of one module in another (e.g. modify forms or classes created in another module). This mechanism makes the solutions you create much more modular.</p>
<nav>
<a href="https://docs.lsfusion.org/Extensions/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Extensions/" target="_blank">How to</a>
<a href="/compare?id=23">Compare</a>
</nav>
</div>
</li>
<li id="feature-asynchrony" class="any_amount_of_data extend_the_system">
<div class="inner">
<h2>Asynchrony</h2>
<p>The platform tries to perform all operations asynchronously whenever possible (i.e. return control to the user without waiting for the operation to complete). For example, such operations include most input operations and local event handling.</p>
<nav>
<a href="/compare?id=24">Compare</a>
</nav>
</div>
</li>
<li id="feature-polymorphism-and-aggregations" class="any_complexity">
<div class="inner">
<h2>Polymorphism and aggregations</h2>
<p>The platform supports inheritance (including multiple inheritance) and polymorphism (again, including multiple polymorphism). And, if inheritance isn't enough for you for whatever reason, the platform also provides an aggregation mechanism that, together with inheritance, allows you to implement almost any polymorphic logic.</p>
<nav>
<a href="https://docs.lsfusion.org/Classes/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Inheritance_and_aggregation/" target="_blank">How to</a>
<a href="/compare?id=25">Compare</a>
</nav>
</div>
</li>
<li id="feature-wysiwyg" class="extend_the_system">
<div class="inner">
<h2>WYSIWYG</h2>
<p>The platform provides a lot of WYSIWYG features right out of the box. For example, the user can edit any data that he sees, do it at once for all visible objects (group editing), do copy-paste (including, for example, from Excel), merge / undo / save the changes made and do many other things that he is used to doing with Excel.</p>
<nav>
<a href="/compare?id=26">Compare</a>
</nav>
</div>
</li>
<li id="feature-internationalization" class="scale_the_system">
<div class="inner">
<h2>Internationalization</h2>
<p>Within any string literal (e.g. an element caption or string constant) the platform allows to use IDs (in brackets) to which you can then set different texts for different languages. Accordingly, when this literal is accessed, the platform automatically localizes it depending on the language settings of the user, whose actions lead to this access.</p>
<nav>
<a href="https://docs.lsfusion.org/Internationalization/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Internationalization/" target="_blank">How to</a>
<a href="/compare?id=27">Compare</a>
</nav>
</div>
</li>
<li id="feature-retroactive-changes" class="any_amount_of_data extend_the_system">
<div class="inner">
<h2>Retroactive changes</h2>
<p>The platform allows users to change any previously-entered data (e.g. to fix input errors) and only updates the data that is actually needed without thousands of related reversal operations, long reposting, or global database locks. In addition, the platform allows the simultaneous editing of the same data (e.g. the same document), which can be critical if you have a lot of data or need to enter it very quickly.</p>
<nav>
<a href="/compare?id=28">Compare</a>
</nav>
</div>
</li>
<li id="feature-advances-tools-for-administrators" class="any_amount_of_data manage_the_system">
<div class="inner">
<h2>Advanced administration tools</h2>
<p>The platform provides a complete set of administration tools: interpreter - executes lsFusion code, process monitor - gets information about the current processes (such as call start time, stack, user, etc.), scheduler - executes action at specified times (including periodically), profiler - measures the performance of all actions executed for all/given users (builds a graph of calls, time division between the application server and the database server, etc.), messenger - for internal notifications/communication with users in the system, and numerous logs - connections, errors, etc.</p>
<nav>
<a href="https://docs.lsfusion.org/Management/" target="_blank">Documentation</a>
<a href="/compare?id=29">Compare</a>
</nav>
</div>
</li>
<li id="feature-advanced-interactive-uis" class="extend_the_system">
<div class="inner">
<h2>Advanced interactive UIs</h2>
<p>When interacting with a user, the platform can display any data not only as single objects and lists, but also as trees, both flat ("nested") and recursive (e.g. classifiers). Moreover, if there is too much information, the platform allows you to group various form blocks into folders (tabs) and named collapsible containers. In this case, when the data is not visible to the user, it is not read/calculated (e.g. all lists are dynamic by default, i.e. only a limited number of objects are read initially, while the rest of them are read as the current object in the table is changed).</p>
<nav>
<a href="https://docs.lsfusion.org/Interactive_view/" target="_blank">Documentation</a>
<a href="https://docs.lsfusion.org/How-to_Interactive_forms/" target="_blank">How to</a>
<a href="/compare?id=30">Compare</a>
</nav>
</div>
</li>
<li id="feature-security-policy" class="scale_the_system">
<div class="inner">
<h2>Security policy</h2>
<p>A flexible security policy allows you to define data access restrictions both at the form level and at the level of specific actions / indicators. In this case, the user will not only not see this data, but will not even be aware of its existence.</p>
<nav>
<a href="https://docs.lsfusion.org/Security_policy/" target="_blank">Documentation</a>
<a href="/compare?id=31">Compare</a>
</nav>
</div>
</li>
<li id="feature-open-source-code" class="communicate_with_the_system">
<div class="inner">
<h2>Open source code</h2>
<p>The open source code of the platform and IDE allows developers to study the behavior of the platform from the inside, create pull requests or custom builds, as well as license the developed solutions to be used in a strict security environment.</p>
<nav>
<a href="https://github.com/lsFusion" target="_blank">Github</a>
<a href="/compare?id=32">Compare</a>
</nav>
</div>
</li>
<li id="feature-deep-user-customization" class="extend_the_system">
<div class="inner">
<h2>Deep user customization</h2>
<p>Users can customize any form, e.g. add custom selections and sorting rules, add / remove / reorder columns. Also, on any form the user can perform basic analysis - group the data he sees, calculate sums / maximums and other aggregates. In addition to the UI settings, users can also add logging, fill-in control, notifications about any data changes (including calculated data), etc.</p>
<nav>
<a href="https://docs.lsfusion.org/User_interface/" target="_blank">Documentation</a>
<a href="/compare?id=33">Compare</a>
</nav>
</div>
</li>
<li id="feature-free-license" class="own_the_system">
<div class="inner">
<h2>Free license</h2>
<p>The platform is licensed under LGPL v3, which allows you to freely use, distribute, and modify the platform as you wish.</p>
<nav>
<a href="https://opensource.org/licenses/lgpl-3.0.html" target="_blank">Text</a>
<a href="/compare?id=34">Compare</a>
</nav>
</div>
</li>
</ul>
<nav id="features-nav" style="display: none;">
<strong>Any complexity</strong>
<span class="close" title="Click to reset filter">Close</span>
<a href="/" onclick="window.history.back(); return false;" class="back" title="Click to return">Return</a><br /><br />
<span class="prev disabled" title="View previous feature"><</span>
<em><span>1</span>/4</em>
<span class="next" title="View next feature">></span>
</nav>
</div>
<footer>
<div class="inner">
<nav>
<ul>
<li><h3>Try</h3></li>
<li><a href="/try">Online</a></li>
<li><a href="https://docs.lsfusion.org/Development_auto/" target="_blank" title="Click to open in a new window">Offline</a></li>
</ul>
<ul>
<li><h3>Learn</h3></li>
<li><a href="https://docs.lsfusion.org/Paradigm/" target="_blank" title="Click to open in a new window">Paradigm</a></li>
<li><a href="https://docs.lsfusion.org/Examples/" target="_blank" title="Click to open in a new window">Examples</a></li>
<li><a href="https://www.youtube.com/playlist?list=PL8FG-RmfUn1Oc30Vaw1Em3DeSzV5ElQ43" target="_blank" title="Click to open in a new window">Video Tutorials</a></li>
</ul>
<ul>
<li><h3>Install</h3></li>
<li><a href="https://docs.lsfusion.org/Execution_auto/" target="_blank" title="Click to open in a new window">Automatically</a></li>
<li><a href="https://docs.lsfusion.org/Execution_manual/" target="_blank" title="Click to open in a new window">Manually</a></li>
</ul>
<ul>
<li><h3>Solutions</h3></li>
<li><a href="https://mycompany.lsfusion.org" target="_blank" title="Click to open in a new window">MyCompany</a></li>
<li><a href="https://lsfusion-erp.com/" target="_blank" title="Click to open in a new window">lsFusion ERP</a></li>
<li><a href="https://lsfusion-erp.com/modules.html#wms" target="_blank" title="Click to open in a new window">lsFusion WMS</a></li>
<li><a href="/solutions">More solutions</a></li>
</ul>
<ul class="social">
<li><h3>Social</h3></li>
<li class="git"><a href="https://github.com/lsfusion" target="_blank" title="Click to open in a new window">Github</a></li>
<!--li class="tw"><a href="https://twitter.com/lsfusion" target="_blank" title="Click to open in a new window">Twitter</a></li-->
<li class="blog"><a href="https://habr.com/en/company/lsfusion/blog/" target="_blank" title="Click to open in a new window">Blog</a></li>
<li class="ln"><a href="https://www.linkedin.com/company/lsfusion/" target="_blank" title="Click to open in a new window">LinkedIn</a></li>
<!--li class="fb"><a href="#" target="_blank">Facebook</a></li>
<li class="tw"><a href="#" target="_blank">Twitter</a></li-->
</ul>
<ul class="community">
<li><h3>Community</h3></li>
<li class="tel"><a href="https://t.me/lsfusion_official " target="_blank" title="Follow us on Telegram">Telegram</a></li>
<li class="git"><a href="https://github.com/lsfusion/platform/issues" target="_blank" title="Click to open in a new window">Github Issues</a></li>
<li class="sl"><a href="https://join.slack.com/t/lsfusion/shared_invite/zt-2klihpl2q-h6ol~nDRPky~O1uHC14Dwg" target="_blank" title="Click to open in a new window">Slack</a></li>
<li class="st"><a href="https://stackoverflow.com/questions/tagged/lsfusion" target="_blank" title="Click to open in a new window">StackOverflow</a></li>
<li class="em"><a href="mailto:[email protected]" target="_blank" title="Click to open in a new window">Email</a></li>
</ul>
</nav>
<div id="absfooter">
<p id="copyright">© <script>document.write((new Date()).getFullYear())</script> lsFusion Foundation</p>
<ul>
<li><a href="mailto:[email protected]">Report a bug</a></li>
</ul>
</div>
</div>
</footer>
<script
src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>
<script src="https://polyfill.io/v2/polyfill.min.js?features=IntersectionObserver"></script>
<script src="/js/app.js"></script>
</body>
</html>