A small C library for building user interfaces with C, XML and CSS.
Table of contents
LCUI (LC's UI Library) is a small C library for building user interfaces.
Written in C: Suitable for small applications written primarily in C.language designed for LCUI, it makes it easier to create interactive UIs.
Cross platform: Support for Windows and Linux, you can write Windows Desktop apps and Universal Windows Platform apps, as well as Linux Desktop apps.
XML + CSS: Includes XML and CSS parsers, you can use XML and CSS to describe interface structure and style.
Web-like development experience: Since the design and implementation of LCUI's functions, including layout, CSS, and renderer, are mostly referenced from MDN documents and some popular web front-end development libraries, its development experience and interface effects will have some similarities to web pages. If you already have experience writing web pages with HTML and CSS, it will be easier to get started.
Flexible: Support for adapting the interface to screens of different pixel densities by setting global scaling. Support for using screen density related sp and dp units to describe position and size of the elements.
Want to know what LCUI can do? You can view the following projects:
LCUI CLI - Command line interface for rapid LCUI development.
LCUI Router - The official router for LCUI. It provides a similar development experience to the Vue Router and make building multiple views applications with LCUI a breeze.
LC Design - A UI component framework for building LCUI application.
LC Finder - An image manager, it uses most of the features of LCUI, and you can use it as a reference to evaluate whether LCUI's performance and development complexity meets your needs.
LCUI Quick Start - A minimal LCUI application.
LCUI Router App - A very simple browser-like application to show the LCUI and LCUI Router features.
LC Design App - A minimal LCUI application for preview LC Design component library.
SDL — X11 driver code reference
FreeType — Data structure naming style reference
LevelDB — Function naming style reference
jQuery — Widget operation method naming style reference
MDN — CSS standard reference
Create new LCUI project
Quickly create an LCUI project using lcui-cli:
# Install lcui-cli
npm install -g @lcui/cli
# Create an LCUI project named myapp
lcui create myapp
# Go into project directory
# Run it
npm run start
Install LCUI for existing project
Use lcpkg to quick install LCUI in your project directory:
# Initialize the lcpkg configuration file to tell lcpkg about your project
# Download and install the compiled LCUI library from GitHub
lcpkg install github.com/lc-soft/LCUI
After successful installation, follow the help documentation output by lcpkg to configure your project's build configuration.
Manual compilation and installation
If you want to manually compile LCUI from source code:
- Open CMD window, and run following command in the LCUI source directory to install the dependency libraries:
# If you want compile for x64 CPU architecture
lcpkg install --arch x64
# If you want compile for Universal Windows Platform (UWP)
lcpkg install --platform uwp
lcpkg install --arch x64 --platform uwp
config.win.h.in in the include directory to
- Open the
build/windows/LCUI.sln file with Visual Studio, and then build LCUI.
# Install the dependencies
sudo apt-get install libpng-dev libjpeg-dev libxml2-dev libfreetype6-dev libx11-dev
# Clone this repository
git clone https://github.com/lc-soft/LCUI.git
# Go into the repository
# Generate automake configure script
# Check the build environment and configure automake scripts
# If you wnat install LCUI
sudo make install
# Go into test directory
# Run helloworld application
Note: If you want to customize the compiler, compile flags, install location, and other configuration items, read the INSTALL file.
The roadmap for this project is divided into primary and secondary roadmaps, with the primary roadmap developed by the project maintainer and the secondary roadmap developed by the open source community contributors and developers like you.
- Make project code more standardized, readable, and maintainable
- Improve relevant development tools and sample applications to improve the development efficiency and make it easier to use
- Explore new GUI development methods to make LCUI unique
- Research SDL, imgui and other similar open source projects, and try to fill in what LCUI is missing
- Refactor the existing graphics processing interface to make it easy to integrate with mainstream 2D graphics libraries and bring better graphics rendering performance to LCUI
- Add driver support for Mac OS, Android and iOS
- Add more mouse cursor styles
- Add clipboard support
Think LCUI is slow to update? there are many ways to contribute to LCUI.
LCUI has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and we think it articulates our values well. For more, see the Code of Conduct.
The English version of the documentation is not available, because the author does not have time to write the English version, please read the files in the test directory and related projects to learn how to use LCUI.
Why develop it?
- Explore and experiment new GUI development way
- Let other developers share about how to write better code
- Make it easier for me to find better jobs to make more money
- Pass the time
Is this a browser kernel? Or a development library like Electron that integrates the browser environment?
No, you can think of it as a traditional GUI development library that applied some Web technologies.
What do I need to pay attention to if I'm going to use it?
We recommend that your project meet the following requirements:
- The user interface is simple and does not require advanced features such as tables, animations, and transformations.
- The code design is reasonable, and the core function code and UI logic code are independent of each other. Even if you find that the requirements are not met after using LCUI, you can easily migrate to other GUI libraries.
Why do I choose the LCUI instead of Electron?
In contrast to fully functional Electron, these features of LCUI, such as small binary file size and low memory usage, are not worth mentioning, except for technical research and share, you have no reason to use LCUI.
Is it the same as writing a web page?
Not exactly, there are the following differences need to be noted:
- The interface description file format is XML, slightly different from HTML.
- The widget is the basic layout element, not the text, and there is no
inline display type.
- The scrollbar is a widget, and the
overflow: scroll; style doesn't show scrollbars automatically, you need to create it and specify the container and scroll layer.
- All text is rendered by the TextView widget, which has a display type of
block instead of
- The widget does not overflow the bounding box of the parent widget, and the effect is similar to the applied style:
- An absolutely positioned widget is always relative to its parent widget, not the first non-statically positioned widget of the parent.
- There are no tools like Chrome Devtools to debug graphical interfaces, you need to rely on your own imagination and development experience to verify that the bug is from your code or LCUI.。
How about CSS support?
The following is a list of supported CSS features. Checked is supported (But does not mean full support). Unlisted properties are not supported by default.
CSS feature coverage
- at rules
The LCUI Project is released under the MIT License.