Arcan is a powerful development framework for creating virtually anything from user interfaces



Arcan is a powerful development framework for creating virtually anything from user interfaces for specialized embedded applications all the way to full-blown standalone desktop environments.

At its heart lies a robust and portable multimedia engine, with a well-tested and well-documented Lua scripting interface. The development emphasizes security, debuggability and performance -- guided by a principle of least surprise in terms of API design.

For more details about capabilities, design, goals, current development, roadmap, changelogs, notes on contributing and so on, please refer to the arcan-wiki.

There is also a website that collects other links, announcements, releases, videos / presentations and so on.

  • For community contact, check out the IRC channel #arcan on and/or the discord (invite-link)

  • For developer information, see the

Getting Started

Some distributions, e.g. voidlinux have most of arcan as part of its packages, so you can save yourself some work going for one of those.

Docker- container templates (mainly used for headless development and testing) can be found here, quality varies wildly from bad to poor (just like Docker): dockerfiles.

Compiling from Source

There are many ways to tune the build steps in order to reduce dependencies. There are even more ways to configure and integrate the components depending on what you are going for; running as a native desktop or as an application runtime inside another desktop?

Most options are exposed via the build output from running cmake on the src directory.

For the sake of simplicity over size, there is a build preset, 'everything' which is the one we will use here.


Specific package names depend on your distribution, but common ones are:

sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz

For encoding and decoding options you would also want:

libvlc-core (videolan), the ffmpeg suite, leptonica, tesseract
libvncserver libusb1

First we need some in-source dependencies that are cloned manually for now:

git clone
cd arcan/external/git
cd ../../

These are typically not needed, the main use is for ensuring certain build options that might vary between distributions (freetype/luajit) and to ensure that a recoverable desktop can be statically linked and executed in an otherwise broken userspace (so embedded bringup). The one exception is OpenAL which is patched to be used by a special (arcan-lwa) build. This is slated for refactoring to remove that dependency, but there are other priorities in the way.


Now we can configure and build the main engine:

mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src

Like with other CMake based projects, you can add:


To switch from a release build to a debug one.

When it has finished probing dependencies, you will get a report of which dependencies that has been found and which features that were turned on/off, or alert you if some of the required dependencies could not be found.

Make and install like normal (i.e. make, sudo make install). A number of binaries are produced, with the 'main' one being called simply arcan. To test 'in source' (without installing) you should be able to run:

 ./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome

The -T argument sets our built-in/shared set of scripts, the -p where shared resources like fonts and so on can be found, and the last argument being the actual 'script' to run.

With installation, this should reduce to:

 arcan welcome

It will automatically try to figure out if it should be a native display server or run nested within another or even itself based on the presence of various environment variables (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH).

'welcome' is a name of a simple builtin welcome screen, that will shut down automatically after a few seconds of use.

For something of more directly useful, you can try the builtin appl 'console':

arcan console

Which should work just like your normal console command-line, but with the added twist of being able to run (arcan compatible) graphical applications as well. For other projects, see the 'Related Projects' further below.

If input devices are misbehaving, the quick and dirty 'eventtest' in:

arcan /path/to/arcan/tests/interactive/eventtest

Might be useful in figuring out who to blame.

SUID Notes

The produced egl-dri platform 'arcan' binary installs suid by default. This is not strictly necessary unless some specific features are desired, e.g. laptop backlight controls on Linux as those require access to sysfs and friends.

Do note that your current user then still requires access to relevant /dev/input/event and /dev/dri/cardN and /dev/dri/renderN files to work properly otherwise input and/or graphics devices might not be detected or useable.

The binary does split off into a non-suid part that the main engine runs off of, see posix/psep_open.c for auditing what is being run with higher privileges as well as the code for dropping privileges. The privileged process is responsible for negotiating device access, implementing virtual-terminal switching and as a watchdog for recovering the main process on live locks or some GPU failures.


Another way to extend engine behavior regardless of the appl being used are so called hook-scripts. These reside inside the 'system script path' covered by the -T command-line argument, or the default of shared/arcan/scripts.

The idea is that these should be able to provide 'toggle on' features that would need cooperation from within the engine, in order to do quick custom modifications or help bridge other tools.

A good example is 'external_input':

arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl

This would open up two connection points, 'extio_1', 'extio_2' that will allow one client to connect and provide input that will appear to the 'myappl' appl as coming from the engine.

These are covered in more detail in the manpage.


Arcan-net is a binary that allows you to forward one or many arcan clients over a network. It is built by default, and can be triggered both as a separate network tool as well as being launched indirectly from shmif by setting ARCAN_CONNPATH=a12://[email protected]:port, or when issuing a migration request by the window manager.

See also: src/a12/net/ and src/a12/net/


The 'arcan-wayland' or 'waybridge', as it is refered to in some places is binary adds support for wayland and X clients (via Xwayland). It can be run as either a global system service, e.g.

arcan-wayland -xwl

Or on a case by case basis, like:

arcan-wayland -exec weston-terminal

For a compliant wayland client, and:

arcan-wayland -exec-x11 xterm

For an X client. The 'per case' basis is recommended as it is safer and more secure than letting multiple clients share the same bridge process, at a negilable cost. The downside is that some complex clients that rely on making multiple distinct wayland connections may fail to work properly. Firefox is a known offender.

There is a number of tuning and troubleshooting options due to the complexity of using wayland, consult the manpage and the --help toggle.


All runtime configuration is consolidated into a database, either the default 'arcan.sqlite' one or an explicitly set one (arcan -d mydb.sqlite).

This is used for platform specific options, engine specific options and for trusted clients that the running scripts are allowed to start. It is also used as a configuration key-value store for any arcan applications that are running.

As a quick example, this is how to inspect and modify keys that 'Durden' are currently using:

arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true

Advanced configuration for some video platforms can be set via the reserved arcan appl name. This would, for instance, set the primary graphics card device name for the 'egl-dri' platform version:

arcan_db add_appl_kv arcan video_device=/dev/dri/card2

To add 'launch targets', you can use something like:

arcan_db add_target net BIN /usr/bin/arcan-net -l netfwd
arcan_db add_config arcan-net default 6666
arcan_db add_target xterm BIN /usr/bin/arcan-wayland -exec-x11

This allow applications to start a program as a trusted child (that inherits its connection primitives rather than to try and find them using some OS dependent namespace). The example above would have spawned arcan-net in the local mode where clients connecting to the 'netfwd' connpath would be redirected to the server listening at

There are many controls and options for this tool, so it is suggested that you look at its manpage for further detail and instructions.

Headless Mode

The 'everything' build option should also produce a binary called 'arcan_headless', at least on BSDs and Linux. This binary can be used to run arcan without interfering with your other graphics and display system. Given access to a 'render node' (/dev/dri/renderD128 and so on) and it should also work fine inside containers and other strict sandboxing solutions.

To make it useful, it can record/stream to a virtual screen. An example of such a setup following the example above would be:

ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console

Assuming the build-system found the libvncserver dependency, this should leave you with an exposed (insecure, unprotected, ...) vnc server at localhost+5900. See afsrv_encode for a list of arguments that can be added to the encode environment in order to control what happens.

Related Projects

If you are not interested in developing something of your own, you will likely find little use with the parts of this project alone. Here are some projects that you might want to look into:

  • Durden is the main desktop environment that uses this project as its display server.

  • Safespaces is an experimental VR/3D desktop environment.

  • Pipeworld is a dataflow (think excel) programming environment

  • Arcan-Devices accumulates extra drivers.

To get support for more types of clients and so on, there is also:

  • Wayland support (see Wayland section above, and src/wayland/

  • QEmu a patched QEmu version that adds a -ui arcan option.

  • Xarcan is a patched Xorg that allows you to run an X session 'as a window'.

  • nvim-arcan is a neovim frontend that act as a native arcan client.


There is also a number of helper tools that can be used to add certain features, such as support for VR devices and tray-icons. These are built separately and can be found in the tools/ subdirectory. They have their own separate build systems and corresponding files.

They work on the assumption that arcan and its respective libraries have been built and installed. They are lockstepped and versioned to the engine, so if you upgrade it, make sure to rebuild the tools as well.

The main tools of interest are:


Acfgfs is a tool that lets you mount certain arcan applications as a FUSE file-system. The application has to explicitly support it. For the Durden desktop environment, you can use global/settings/system/control=somename and then:

arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop

And desktop control / configuration should be exposed in the specified mountpoint.


Aclip is a clipboard manager similar to Xclip. It allows for bridging the clipboard between a desktop environment like Durden, and that of an X server.

This requires that clipboard bridging has been allowed (disabled by default for security reasons). In Durden this is activated via global/settings/system/clipboard where you can control how much clipboard access the tool gets.


Aloadimage is a simple sandboxing image loader, similar to xloadimage. It is useful both for testing client behavior when developing applications using arcan, but also as an image viewer in its own right, with reasonably fast image loading, basic playlist controls and so on.


VR bridge is an optional input driver that provides the arcan_vr binary which adds support for various head-mounted displays. More detailed instructions on its setup and use can be found as part of the Safespaces project mentioned in the 'Related Projects 'section.


Arcan-trayicon is a tool that chain-loads another arcan client, along with two reference images (active and inactive). It tries to register itself in the icon-tray of a running arcan application, though it must explicitly enable the support. In Durden, this is done via the path:


Then you can use:

ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal

Or some other arcan client that will then be loaded when the tray button is clicked, confined into a popup and then killed off as the popup is destroyed. This is a quick and convenient way to wrap various system services and external command scripts.

  • Build issues on Open Pandora (GNU/Linux ARM)

    Build issues on Open Pandora (GNU/Linux ARM)


    Out of curiosity, I tried to build Arcan on my Open Pandora this morning:

    I had several issues, but I managed to solve almost all of them:

    • had to replace CLOCK_MONOTONIC_RAW with CLOCK_MONOTONIC in src/platform/posix/time.c
    • had to add -liconv to the linker flags
    • still stuck on this one though: is TIOCSIG (asm/ioctls.h) compatible with the ARM architecture ?

    [ 75%] Building C object frameserver/terminal/CMakeFiles/afsrv_terminal.dir/default/tsm/shl-pty.c.o /media/Pandora1/dev/arcan/arcan/src/frameserver/terminal/default/tsm/shl-pty.c: In function ???shl_pty_signal???: /media/Pandora1/dev/arcan/arcan/src/frameserver/terminal/default/tsm/shl-pty.c:4 51:24: error: ???TIOCSIG??? undeclared (first use in this function) return ioctl(pty->fd, TIOCSIG, sig) < 0 ? -errno : 0; ^~~~~~~ /media/Pandora1/dev/arcan/arcan/src/frameserver/terminal/default/tsm/shl-pty.c:4 51:24: note: each undeclared identifier is reported only once for each function it appears in /media/Pandora1/dev/arcan/arcan/src/frameserver/terminal/default/tsm/shl-pty.c:4 52:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ frameserver/terminal/CMakeFiles/afsrv_terminal.dir/build.make:86: recipe for target 'frameserver/terminal/CMakeFiles/afsrv_terminal.dir/default/tsm/shl-pty.c.o' failed make[2]: *** [frameserver/terminal/CMakeFiles/afsrv_terminal.dir/default/tsm/shl-pty.c.o] Error 1 CMakeFiles/Makefile2:504: recipe for target 'frameserver/terminal/CMakeFiles/afsrv_terminal.dir/all' failed make[1]: *** [frameserver/terminal/CMakeFiles/afsrv_terminal.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2

    Could you please have a look at it ?

    Cheers, Sam a.k.a "Magic Sam" from the Open Pandora community

    opened by sviscapi 25
  • Arcan won't start with egl-dri

    Arcan won't start with egl-dri

    I'm trying to install this thing, but it's not going particularly well. Compilation with cmake -DVIDEO_PLATFORM=egl-dri -DSTATIC_SQLITE3=ON -DSTATIC_OPENAL=ON -DSTATIC_FREETYPE=ON ../src; make -j 12 works fine (with a few warnings about snprintf and various deprecation), but running it (in VT 2) just gives errors.

    $ ./arcan -p ../data/resources ../data/appl/welcome
    Empty database encountered, running default DDL queries.
    egl-dri::2734:setup_cards_basic(): trying [basic/auto] setup on /dev/dri/card0 does not support the 0xffffffff PCI ID.
    egl-dri::1383:setup_node(): failed to initialize EGL
    egl-dri::2567:try_node(): setup/configure [0](4:/dev/dri/card0)
    egl-dri::1457:setup_node_egl(): EGLStreams, query failed or no devices found
    egl-dri::2559:try_node(): couldn't open (4:/dev/dri/card0) in EGLStreams mode
    egl-dri::2742:setup_cards_basic(): node setup failed
    egl-dri::2734:setup_cards_basic(): trying [basic/auto] setup on /dev/dri/card1
    egl-dri::2734:setup_cards_basic(): trying [basic/auto] setup on /dev/dri/card2
    egl-dri::2734:setup_cards_basic(): trying [basic/auto] setup on /dev/dri/card3
    platform_video_init() failed.
    Error: couldn't initialize video subsystem. Check permissions,  try other video platform options (-f, -w, -h)
    Video platform configuration options:
    (use ARCAN_VIDEO_XXX=val for env, video_xxx for db)
    	[ for multiple devices, append _n to key (e.g. device_2=) ] - 
    	device=/path/to/dev - for multiple devices suffix with _n (n = 2,3..)
    	device_buffer=method - set buffer transfer method (gbm, streams)
    	device_libs=lib1:lib2 - libs used for device
    	device_connector=ind - primary display connector index
    	device_master - fail hard if drmMaster can't be obtained
    	device_wait - loop until an active connector is found
    Graphics platform configuration options:
    (use ARCAN_GRAPHICS_XXX=val for env, graphics_xxx=val for db)
    Video platform initialization failed
    zsh: abort (core dumped)  ./arcan -p ../data/resources ../data/appl/welcome

    /dev/dri contains a card0 and renderD128, both of which I (according to test -r/w) have both read and write access to. Is there something I've missed?

    P.S. The SDL version appears to work fine, at least with the welcome appl.

    opened by Kyuuhachi 13
  • Arcan + arcan_vr fails to use HMD as a display

    Arcan + arcan_vr fails to use HMD as a display

    I have a working HTC Vive Pro, which I can use via SteamVR.

    I have built, rpm-packaged and installed OpenXR, monado, OpenHMD, Arcan, arcan_vr and safespaces. My goal is to get a working VR desktop.

    SteamVR works as it should, all OSS libs and drivers detect the hardware and receive gyro data (I have no access to my lighthouses right now). Arcan happily runs arcan_vr and safespaces inside a xorg window.

    arcan /usr/share/safespaces device=basic

    produces an SBS image, which rotates according to the HMD motion, but

    arcan /usr/share/safespaces device=vivepro

    produces a static monoscopic window, which does not react to the HMD motion, and displays NOTHING in the HMD.

    Here is a sample of the arcan_vr console output:

    $ arcan_vr
    console detected, switching to arcan-less mode
    :98:openhmd_init(): 1 devices found
    [II] 0bb4:0309 0007:0007:00
    [II] opening
    [II] 28de:2300 0007:000a:00
    [II] opening
    [II] 28de:2300 0007:000a:01
    [II] 28de:2300 0007:000a:02
    [II] manufacturer: 'HTC'
    [II] product: 'VIVE Pro'
    [II] serial number: '206D31514B53'
    [II] power on magic: 64
    [II] Enable Pro IMU magic: 64
    :144:openhmd_init(): vendor:  HTC/Valve
    :145:openhmd_init(): product: HTC Vive
    :146:openhmd_init(): path:    0
    :148:vrbridge_alloc_limb(): allocated limb slot 2, id: 0 (mask: 4)
    :122:device_rescan(): vrbridge:rescan() - found 
    vr bridge running in offline mode
    :42:openhmd_sample(): orientation: -0.000000, -0.000000, -0.000000, 1.000000
    :42:openhmd_sample(): orientation: -0.000000, -0.000000, -0.000000, 1.000000
    :42:openhmd_sample(): orientation: -0.000000, -0.000000, -0.000000, 1.000000
    :42:openhmd_sample(): orientation: 0.910676, -0.000641, -0.024127, 0.412416
    :42:openhmd_sample(): orientation: 0.910676, -0.000641, -0.024127, 0.412416
    :42:openhmd_sample(): orientation: 0.910677, -0.000644, -0.024127, 0.412414
    :42:openhmd_sample(): orientation: 0.910677, -0.000644, -0.024127, 0.412414

    Trying to run arcan without xorg running (init 3) changes nothing. All video output goes only to the main regular display. The HMD stays pitch-black.

    I am aware of a similar bug safespaces issue 13 but the solution provided there is invalid. Vive Pro HMD is not listed among xrandr displays and has no name required to give any randr commands. I feel that it is really an arcan (or arcan_vr) issue.

    opened by dikonov 11
  • Question : looking for wayland environment desktop similar to awesome WM

    Question : looking for wayland environment desktop similar to awesome WM


    I have been using awesomeWM for years with great pleasure. But I switched to wayland so that I am now looking for something similar to it on the wayland side.

    The nice feature I would like to have is to be able to extend in any ways the desktop environment with lua, which was quite easy to do on awesomeWM

    It seems to me, at first glance, that durden, together with arcan, could comply with this, am I right ?

    In addition, is it possible with durden to benefit from a touchscreen, i.e. being able to implement some gestures ? Even if not yet implemented.



    opened by deb75 7
  • Input devices are detected wrong

    Input devices are detected wrong

    On my system (an armv7l chromebook running Void Linux with elogind), the input devices are detected wrong.

    When running arcan console from a TTY with arcan compiled from latest master (c672275), the keyboard does not work, and the touchpad is detected as a touchscreen—I had to spend 15 minutes trying to tap it in the right places to quit Arcan using the virtual keyboard.

    opened by icecream95 5
  • Duplicate Displays render same image

    Duplicate Displays render same image

    Not sure if this should be an Arcan or Durden issue: I have 3 displays on my setup, all 4k. Two of the monitors are identical, including their edid (as verified in /sys/devices/pci0000:00/[...]/drm/card0/card0-DP-3 ) It's these two with the duplicate edid that are acting funny- in Durden they both render the same image while the 3rd, slightly different display, does correctly get assigned its own view. When using the 'global menu' in Durden to configure the displays the common name of the display is only listed once. I realize this may be hardware and os specific to some extent. I'm on Arch Linux 5.8.8, GPU is an AMD VEGA56 Arcan commit 496603deda8a2970410c710501fab661bd72308e (September 8th) Durden commit cfd7c42f53fc8468869be547ce4e261618c43600 (September 10th) Let me know if you need any more information.

    opened by VegaDeftwing 4
  • Arcan doesn't print an error message when execvp fails

    Arcan doesn't print an error message when execvp fails

    When attempting to run arcan from a X session with the command given as an example in the readme (./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome), nothing seems to happen. Arcan exits immediately without giving any hint of what went wrong.

    A bit of debugging reveals that my build is missing arcan_sdl for some reason, which causes arcan to fail in

    It might be a good idea to print an error message in these cases to help the user understand what went wrong. At least, it should not fail silently.

    Thank you!

    opened by magiblot 4
  • Just a question

    Just a question

    I'm sorry I just wandering to clarify my understanding of arkan. Does a "frameserver" term mean the same as a "client" term in arkan? (As I understand a client (frameserver) is a program (process) with own logic which provide "visual representation and aural representation". Or I missing many things?)

    opened by ant5 4
  • i18n problem in console. International characters not visible

    i18n problem in console. International characters not visible

    I am running arcan console in the Russian locale and it fails to display most non-ascii characters. All text, UI labels, etc. are not visible. See the screenshot.

    $ locale

    The included default.ttf has cyrillic glyphs, so it should work.


    opened by dikonov 3
  • (shmif) use inotify on crash recovery

    (shmif) use inotify on crash recovery

    For cases where the device socket and the spin-reconnect loop hits a folder that can be inotified, avoid the sleep() cycle and simply wait for new descriptors. This should make recovery near instant.

    opened by letoram 3
  • conductor - mouse motion stalls

    conductor - mouse motion stalls

    Reproduce: Take an animated wayland client (sdl games work for instance), can also be xwayland like glxgears. Input mouse motion events and see if they stall.

    Try the same but change synch-strategy (easiest in durden/global/display/synch) to something that isn't adaptive (vsync or processing), the issue should subside.

    opened by letoram 3
  • High DPI support

    High DPI support

    First of all, thanks so much for developing this project, it is rare to see real innovation happening in this area, especially since lately people seem to be stuck in the echo chamber of promoting fundamentally broken protocols like Wayland.

    Now this is more of a question than an issue and I am sorry if it has already been answered.

    How is High DPI support coming along in Arcan? Specifically I am interested in the following points:

    • Is there mixed DPI support? (support for different scaling factors per screen)?
    • Is there support for fractional scaling, i.e. may the scaling factor be fractional? (Wayland is still struggling with this one after all these years, on Xorg and with Qt applications it works perfectly fine)
    • Is scaling done on the client side (i.e. the application itself scales)? This is necessary for non-blurry fractional scaling. For example on most Wayland compositors, right now 1.5x scaling is done by telling the application to render at 3x, and then downscaling it at 0.5x on the compositor side, which is a total shitshow. (Unfortunately that's not even the worst design decision they made in Wayland)
    • How is the scaling factor propagated to clients? (i.e. how does a client application get the scaling factor so that it can perform its scaling)
    • Is it possible to change DPI during runtime? (In Xorg and with Qt this would be possible e.g. with this unmerged patch)
    • How does an application handle being inbetween monitors?, i.e. if an application is dragged from one monitor to another with a different DPI, how does the application look when it's right in the middle?

    I hope you don't mind giving some insight into High DPI support in Arcan, and sorry if it's been asked before but I didn't find anything. I also know that the last 2 questions are not easy to implement correctly, but I am wondering how Arcan handles these difficult scenarios. If Arcan proves to have better HighDPI capabilities than Wayland, I might try it out.

    opened by vimpostor 5
  • (a12) lwa-migrate stalemate

    (a12) lwa-migrate stalemate

    This might be related to the RESET not being sent on forced migration, or LWAs inability to leverage it to force new frames to be produced, but when migrating to an a12 server that does not immediately send a DISPLAYHINT, lwa just sits there thinking the buffer contents has been synched. Since no windows is created on the other side (due to no video contents being sent), both sides are stuck waiting.

    opened by letoram 0
  • (a12) audio frame breaks state machine

    (a12) audio frame breaks state machine

    When redirecting a client that plays audio (anything arcan_lwa is fair game) chances are that the state machine will break quickly and spit out errors on MAC failure.

    opened by letoram 0
  • FTBFS on Debian unstable without a patch

    FTBFS on Debian unstable without a patch


    I am trying to package Arcan on Debian. But I am not a Debian maintainer. Check:

    The compiler error is:

    cc1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]

    This is mainly due to conflict with some dep pkg-config flags, for instance here:

    /usr/bin/cc -DARCAN_DB_STANDALONE -DOPENGL -DPLATFORM_HEADER="/build/arcan-0.6.0/src/platform/platform.h" -DPOSIX_C_SOURCE -D_GNU_SOURCE -D__LINUX -D__UNIX -I/build/arcan-0.6.0/src/shmif/../shmif -I/usr/include/libdrm -I/usr/include/lua5.1 -I/usr/include/luajit-2.1 -I/usr/include/AL -I/usr/include/freetype2 -I/build/arcan-0.6.0/src/platform -I/build/arcan-0.6.0/src/../external -I/build/arcan-0.6.0/src/engine -I/usr/include/libusb-1.0 -I/usr/include/SDL2 -g -O2 -fdebug-prefix-map=/build/arcan-0.6.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wno-deprecated-declarations -Wno-missing-braces -Wno-unused-function -Wno-unused-value -Wno-unused-variable -Wformat=0 -Wno-atomic-alignment -std=gnu11 -pthread -o CMakeFiles/arcan_db.dir/engine/arcan_db.c.o -c /build/arcan-0.6.0/src/engine/arcan_db.c

    Then the build is ok if a patch is applied on src/CMakeLists.txt to remove -Wformat=0 in line 220. Could this be a problem? Is there any better way?

    opened by peutch 1
  • (psep_open) allow hidraw forwarding

    (psep_open) allow hidraw forwarding

    Core arcan (for led), arcan_vr and afsrv_decode all need to open USB devices, and doing the normal usb juggling is not very pleasant.


    • [ ] modify hidraw + libusb to open with fd
    • [ ] add vid/pid requests to psep_open
    • [ ] forward as DEVICEHINT to client
    • [ ] add client event for a DEVICEREQ
    • [ ] add Lua logic for ack:ing that
    • [ ] update psep_open to stitch all this together

    Notes: The libusb stage will be the most painful. Afaict there is no easy hack to just get the fd into the device structure. ChromeOS, Android and others all have patches that achieve this, but they are not upstreamed for some reason.

    opened by letoram 0
  • 0.5.2(May 29, 2017)


    • LED subsystem reworked: Support hotplug, synthesized LED devices, added support for a FIFO protocol for communicating with external LED controllers
    • Accelerated Graphics: refactored to be dynamically (re-)loadable, getting closer to multi-vendor-multi-GPU support and GPU hotplugging.
    • Driver backend update: external-launch reloads accelerated graphics library, getting closer to runtime driver upgrades
    • Initial HMD/VR support: Early stages, spawn a subprocess for device control and input fusion/sampling with mapping to a virtual skeleton
    • Allow direct-to-drain enqueue for out-of-band high-priority events

    Tools (src/tools) / Backends (separate repositories)

    • waybridge: (new) (alpha state, see wiki wayland notes) wayland protocol service
    • xarcan: (new) xserver with shmif driver backend
    • qemu: input state- fixes, closer to working multi-display and virgil support
    • SDL: improved synchronization, mouse and multi-window support
    • vrbridge: (new) basic integration skeleton and partial PSVR support (unusable)
    • aclip: (new) clipboard manager for translation between appl- and command-line
    • aloadimage: (new) image viewer with parser sandboxing
    • shmmon: (new) debugging tool for inspection of shmif- connection dumps or single client state from scraping proc
    • openal: patched backend can now be built standalone, back to working state for LWA


    • New segid subtypes: WIDGET, BRIDGE_X11, BRIDGE_WL, SERVICE
    • Two new sub-libraries: shmif_ext (extended accelerated rendering setup convenience) and shmif_tui (text user interface)
    • _open_ext added exposing additional initial-registration fields
    • Extended connection protocol to include a preroll stage which act as a collection phase for fonts, outputs, language, etc. in order to cut down on initial setup complexity and reduce connect-to-draw latency.
    • added _initial structure that conveys information gathered during the preroll stage
    • add VSIGNAL RHINT to support event- based notification on frame delivery for some I/O multiplexation edge cases
    • Engine-side reservable misc- buffer added to shmpage layout for specialized I/O devices that would saturate the event queues when dealing with latency-sensitive high-samplerate input devices
    • Negotiable extended mapping for synchronizing gamma/color information
    • Negotiable (placeholder/incomplete) extended mapping for supporting HDR source contents
    • Negotiable (placeholder/incomplete) extended mapping for vector content transfer


    • egl-dri: backlight support exposed as a LED controller, VT switch stability fixes, EGLStreams support moved from the egl-nvidia platform, removed egl-nvidia, add switchable synchronization strategies for fast, adaptive or conservative.
    • evdev: devices with LEDs now get mapped to a corresponding LED controller.
    • agp: exposed more color packing formats.


    • Tuning to resize/- refresh cpu v latency tradeoffs
    • Refactored codebase and split out drawing/shmif- integration etc. into using shmif_tui.
    • Minor bugfixes related to color parsing, added blink speed control


    • Deprecated: LED_CONTROLLERS constant
    • target- event propagation extended:
    • Added functions: hmd_setup, define_arcantarget (LWA only, experimental)
    • Updated functions: controller_leds, set_led, set_led_intensity, set_led_rgb, open_nonblock, audio_gain, video_displaygamma, decode_modifiers, target_flags, add_3dmesh
    • Added aliases: image_surface, image_surface_storage, image_surface_resolve (dropped properties suffix)
    • Updated events: display_state (additional fields for backlight) input (status: extended label fields, device reference, device domain) target (expose "bchunkstate", "preroll")


    • partial/incomplete: requesting/rendering to subsegments (icon, titlebar, popup, ...) via define_arcantarget
    • improvements to runtime DPI switching and automated resize-response
    • runtime server controlled 'default font' and 'default font size' switching
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Apr 11, 2016)

    This is by far the largest release to date, covering about two years of development when combined with the two other appls senseye and durden. In addition to a number of bugfixes, optimization and refactoring, these are the biggest changes:


    • Much improved documentation, automated testing, build tracking and tagging.
    • Re-organized large parts of the source tree
    • Switched majority of component licensing from GPL to BSD
    • AWB / Gridle moved out to own .gits, defunct/unsupported
    • Added support for LWA, lightweight arcan. A special build that uses another arcan instance as display server.
    • Much improved support for HDPI and mixed-DPI displays


    • New functions: net_discover, video_synchronization, resize_video_canvas, video_displaydscr, video_displaymodes, map_video_display, system_identstr, system_collapse, switch_appl, build_pointcloud, image_state, cursor_setstorage, cursor_position, move_cursor, nudge_cursor, resize_cursor, image_mipmap, alloc_surface, tag_image_transform, resample_image, target_reject, target_updatehandler, pacify_target, bond_target, rendertarget_detach, rendertarget_forceupdate, rendertarget_noclear, target_flags, target_parent, target_displayhint, target_fonthint, target_alloc, open_nonblock, accept_target, define_feedtarget, define_nulltarget, util:hash, util:to_base64, util:from_base64, get_keys, match_keys, list_target_tags, target_configurations, audio_buffer_size, crop_image, center_image, image_access_storage, image_resize_storage, image_matchstorage, build_pointcloud, system_defaultfont, frameserver_debugstall, input_capabilities, input_samplebase, set_context_attachment, video_display_state, shader_ugroup
    • Removed deprecated: launch_target_capabilities, game_cmdline, switch_theme, list_games, game_info, game_family, game_genres pause_audio, instance_image, camtaghmd_model, default_movie_queueopts, default_movie_queueopts_override, net_refresh
    • Calctarget callback table get, histogram_impose and frequency
    • Frameserver_terminated events renamed to terminated
    • Support for coverage tracking trace build
    • Added color support to output messages
    • Added interpolation function specifier to move/rotate/blend/resize
    • Transformation chains can have callback tags associated with completion, this also works as a timer implementation.
    • Added support for native/accelerated cursor rendering
    • System_collapse for switching running appl or dropping all resource
    • Allocations that are not strictly connected to frameservers
    • _display_state callback
    • Input class for frameserver/remoting originated input (cursor_input, key_input)
    • Net discovery events propagated
    • Automated frameserver- looping dropped in favour of manual management on terminated events
    • Monitor state format properly escape Lua strings
    • Text rendering functions provide additional metrics and has a tabled version where %2 indices ignore format string characters
    • Link_image can now specify anchor point


    • Database module rewritten, target/configuration/appl key-value store
    • Namespace rewritten, RESOURCE/APPL split into multiple fine-grained namespaces
    • Interpolation state exposed as shader built-in
    • Output dimensions exposed as shader built-in
    • Better transformation caching and dirty invalidation
    • Bugfixes to 2D/3D picking
    • Support for post- Lua init hook scripts (primarily intended for testing and automation purposes).
    • First refactoring of memory allocation resources using different interface that tracks alignment, metatype etc.
    • Support for adoption / fallback application in the event of an error in the Lua state machine
    • Dropped support for framequeues
    • Font rendering support for default- system font and specifying format related to system font
    • Fallback font chains to switch other fonts when glyphs are missing
    • Cheap, "shallow" clipping added to reduce stencil- buffer use
    • More fine grained control over frameserver data routing
    • Support for shader instancing through uniform groups
    • Framesets now act as null_surface + sharestorage calls


    • EGL-GLES split into regular EGL-GLES primarily for ARM devices, and the Linux/KMS specific EGL-DRI with the distant relative EGL-NVIDIA.
    • Interface expanded to support multi-monitor, dynamic synchronization switching
    • X11 and Linux (evdev) platform support expanded with better input management
    • Support for DRI render-nodes, accelerated buffering passing
    • OpenGL used stripped from video/3d/frameserver into AGP (arcan graphics platform) to support lower level graphics APIs and software rendering.


    • Support for non-authoritative connections via CONNPATH and CONNKEY
    • Support for multiple- segments,
    • More aggressive cookie/dynamic integrity check
    • Cleanup / simplify connection and setup API
    • Shmif resize heuristics switched to reduce stalls / latency
    • Support for multiple video buffers / segment
    • Support for multiple audio buffers / segment
    • Support for Communicating buffer dimensions
    • More fine-grained control over I/O multiplexation, guard threads, synchronization, blocking vs tearing


    • Added terminal frameserver
    • ARCAN_FRAMESERVER_DEBUGSTALL switched to allow infinite or specific- sleep
    • VNC server support added to encode
    • Remoting frameserver added (primitive at the moment, support vnc client)
    • Decode_ default switched from av/ffmpeg to libvlc
    • Libretro graphing moved to a possible debug secondary segment
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Mar 8, 2014)

    General changes

    • Monitoring mode now uses the same namespace as themes, can now load .lua crashdumps
    • The core-engine builds and runs on arm/egl devices (e.g. raspberry PI), no working input layer or resolution switching controls yet. _math performance is horrible before we get working ARMv6 + NEON optimized options.
    • Frameserver API cleaned up, reworked build-system and source organisation.
    • Optional avfeed- frameserver added, this is just a skeleton to ease writing custom data sources ( corresponding lua calls are launch_avfeed) and needs to be enabled build-time.
    • Frameservers can now (except on windows) be built in a split- mode, where each subtype (movie, encode, libretro etc.) gets its own binary.
    • Alignment issues when running SIMD optimized math adjusted
    • OSX support partially re-added, no packaging / UI work as of yet.
    • Monitoring mode changed slightly, instead of forking, we now set envvar and re-exec ourselves to accommodate for systems with broken broken fork() support (seriously OSX...)

    LUA API changes

    • initial API documentation coverage now at 100%, language and descriptive qualities for individual pages still have a lot to go, this will be improved gradually.
    • system_load now accepts an optional trigger to disable _fatal calls when asked to load a broken script
    • target_coreopt added to force key,val options to target frameserver
    • target_verbose hints frameservers and their internal processing to expose more detailed data (e.g. pts/framecount/frameskipping for decode and encode)
    • define_calctarget added, similar in style to a recordtarget (without any audio) that exposes buffer data as a callback to a provided lua function
    • target_synchronous disables PTS enforcement and blocks on sync with frameserver and with GPU (only for very specific uses)
    • exposing lua api to the VM is delayed until just before the themename() entry-point
    • all C<->LUA functions are now mapped to a LUA_TRACE(luasymbolname) macro (where ctx refers to the lua_State pointer) for engine dev. to ease customized tracing, by default, the macro is just empty.
    • system_snapshot function added (similar to a crashdump but can be invoked by script dev.)
    • image_children now returns correct VIDs
    • more functions aggressively shut down if a broken VID is provided

    Libretro frameserver

    • Support for Core Options
    • Support for 3D Cores (may cause some problems with certain window managers as we need to spawn full windows to get access to an off-screen FBO)
    • Improved support for analog devices and filtering
    • Rollback based input latency masking support added (experimental)

    Database tool

    • Improved builddb times and fixes for libretro core scanning
    • Now adds support for .descr files in games/target folder to disable and override scanning
    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Nov 15, 2013)

    Download links at the bottom

    Lots of changes this time around, while Gridle and associated themes (remote, streamer, ...) hasn't received much in terms of direct updates, they have benefited from several major engine revisions.

    Biggest change is the addition of the Desktop oriented theme AWB (~10k LOC). Excluding mame-keybinding generation, it should have more functions and features than gridle already. Feedback appreciated!.

    Brief changelog: LUA

    Can now be built using luajit-2.0 instead of regular lua5.1, workaround hacks for tonumber/tostring compatibility issues where 
    [modified functions]
    image_texfilter (terminate on invalid filter specifier)
    image_clip_on (can now take clipping type specifier)
    hide_image, blend_image, show_image, order_image, 
    move_image, nudge_image all accept n-indexed tables of vids as first argument as well.
    image_tracetag (vid only argument returns current tag)
    build_shader (now accepts nil as vertex or fragment and assumes built-in default)
    camtag (can now set near, far, fov, aspect, facing), camtag object scale affects output (-1 flips vertical))
    game_info (can now grab table by ID and not just title)
    [new functions]
    attrtag_model (switch 3dmodel transform state, e.g. infinite- distance models)
    target_seek (seek absolute or relative in decoding frameservers)
    recordtarget_gain (set mixing properties for an audio source in a recordtarget)
    inputanalog_filter (set low-level analog device input filtering)
    inputanalog_query (get current dev/axis filtering state)
    inputanalog_toggle (mass disable/enable all analog input processing)
    benchmark_data (copy the current benchmark ring-buffer)
    benchmark_enable (toggle gathering of benchmarking data)
    benchmark_timestamp (get system clock time in millis)
    forward3d_model (push the model along its current forward facing vector)
    strafe3d_model (push the model along the vector perpendicular to up and forward)
    image_sharestorage (discard the storage of the dst object and replace it with a reference to src)
    null_image (create an object without a GL storage attached, useful as property masters and anchors)
    color_image (create an object without a GL storage and uses a single-color shader without samplers)
    storepush_video_context, storepop_video_context (allocate a new object, store the visible output of this context into the new object and push/pop the rest, returning a handle to the new object)
    image_inherit_order (set order value to be relative to parent)
    frame_pulse entry-point added (only tested for once and disabled if not found)
    [new "debug build" only functions]
    freeze_image (trap as soon as image state is modified after this has been set)
    [new reserved functions]
     clipboard_getmsg, camtaghmd_model


    • Refactored out most OS / Platform specific stuff into platforms/*
    • SDL_Image made optional, using libpng for screenshot/image loading.
    • SDL_TTF requirement dropped, using freetype with a simplified sdl_ttf version in-source for now (more refactoring will happen here).
    • Picking- group functions can now have their order reversed.
    • Broken math in picking functions fixed.
    • Video- pipeline state serialization (for debugging, crashlogs etc).
    • LodePNG for screenshots dropped.
    • Monitor mode (linux/BSD only currently) added, where on arcan session can sample the state of another.
    • Internal streaming audio playback dropped and replaced with decode frameserver entirely.
    • Individual resource loading switched to an internal resource mapping API to fit better with the platform split.
    • Reference counted GL storage decoupled from video object, allows storage to be shared (in preparation for sprite sheets and to circumvent restrictions in instance_ and linking).
    • Frame generation times, logic update times and frame syncronization times now tracked for benchmarking.
    • Switched db default fsynch on write to be off (performance boost, but may introduce corruption side-cases, monitor for future changes).
    • Debug option to dump textures as PNG on upload.
    • Hierarchical pick fix to take resolved rather than local opacity when selecting.
    • Re-added the aggressive "dupm stack and die" for getvid in debug builds.
    • Notable 2D pipeline optimization work; transformations chain resolves are cached, transformation matrixes as well, most expensive operations being being replaced with SIMD versions.
    • Default- oriented 2D objects gets a cheaper renderpath and simplified picking costs.
    • Instances can no-longer be linked to or be part of framesets, use null_images instead.
    • 3D pipeline simplified to reflect camtag changes, still missing render-to-cubemap though.
    • 3D pipeline now supports infinite distance objects (e.g. skyboxes)
    • Math, added basic frustum tests and quat_matr -> view vector extraction
    • Renderbuffers vs Framebuffer confusion problems fixed.
    • FBO internal resdolution can now be set to higher than output display resolution.
    • Begun closing down traversal options (still possible in some places)
    • Framequeue decoding timing etc. reworked (again, doubt there's a good possible universal solution).
    • Framequeue cleanups (still horrible though).
    • Skewing pitch support dropped in audio (should have effect approach reworked anyhow).


    • Mouse- handling support script added (with mouse gestures etc.).
    • LUA interface mapping method switched, work on automated API documentation/test/example generation (see doc/*) begun, about 80% coverage.
    • Win32 got a new tool, ArcanLauncher which helps with setting launch arguments and DB scraping.
    • Build- system refactored into platform/*
    • out-of-tree building fixes
    • SQLite3 can now be built-in using the amalgamation (external/sqlite3)
    • LUA debug.debug gets patched to unlock mouse on trigger
    • Frameserver decode now encodes FFT in video channel for audio only playback.
    • Seeking added to frameserver decode.
    Source code(tar.gz)
    Source code(zip)
    Arcan-0.3.1-win32.exe(23.99 MB)
Bjorn Stahl
Open source Sewage Worker / Security Consultant with a predilection for reversing and visualization. Disillusioned Academic (comp.sci.Ph.D).
Bjorn Stahl
AnUI is a powerful Graphical User Interface framework made for people that actually care about design!

What's AuUI ** Project is not finished ** AuUI, an abbreviation for "Actual Understandable User Interface" is a graphical user interface framework to

Goat 4 Jun 17, 2022
Library for writing text-based user interfaces

Termbox for RT-Thread 中文说明文档 This repository forks from nullgemm/termbox_next Getting started Termbox's interface only consists of 12 functions: tb_in

Meco Jianting Man 5 May 25, 2022
A small C library for building user interfaces with C, XML and CSS

LCUI A small C library for building user interfaces with C, XML and CSS. Table of contents Table of contents Introduction Features Screenshots Related

Liu 3.8k Aug 7, 2022
A simple/fast stacking box layout library. It's useful for calculating layouts for things like 2D user interfaces.

A simple/fast stacking box layout library. It's useful for calculating layouts for things like 2D user interfaces. It compiles as C99 or C++. It's tested with gcc (mingw64), VS2015, and clang/LLVM. You only need one file to use it in your own project: layout.h.

Andrew Richards 679 Jul 28, 2022
U++ is a C++ cross-platform rapid application development framework focused on programmer's productivity. It includes a set of libraries (GUI, SQL, Network etc.), and integrated development environment (TheIDE).

Ultimate++ Ultimate++ is a C++ cross-platform rapid application development framework focused on programmers productivity. It includes a set of librar

Ultimate++ 464 Jul 26, 2022
ZIAPI repository which contains the interfaces and concrete implementations that make up our Epitech Zia project API proposal.

ZIAPI Welcome to the ZIAPI repository which contains the interfaces and concrete implementations that make up our Epitech Zia project API proposal. ZI

Martin Olivier 29 Mar 17, 2022
ROS_Melodic_Qt_GUI_Template is a Graphical User Interface programmed with Qt framework.

This is a GUI template for ros to control your robot and read data from sensors.

null 26 Jul 16, 2022
Purely native C++ cross-platform GUI framework for Android and iOS development.

BODEN CROSS-PLATFORM FRAMEWORK Build purely native cross-platform experiences with Boden Website ⬡ Getting Started ⬡ API Reference ⬡ Guides ⬡ Twitter

Ashampoo Systems GmbH & Co KG 1.5k Jul 31, 2022
Neutralinojs is a lightweight and portable desktop application development framework

Neutralinojs is a lightweight and portable desktop application development framework. It lets you develop lightweight cross-platform desktop applications using JavaScript, HTML and CSS.

Neutralinojs 5.9k Aug 4, 2022
A powerful and fast search tool using regular expressions

A powerful and fast search tool using regular expressions

Stefan Küng 1.2k Aug 7, 2022
A library for creating native cross-platform GUI apps

Yue A library for creating native cross-platform GUI apps. Getting started Documentations FAQ Development Examples Sample apps (with screenshots) Muba

Yue 2.8k Jul 27, 2022
GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.

GacUI GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features. Read the LICENSE first

Vczh Libraries 2.1k Jul 29, 2022
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

omar 40.3k Aug 5, 2022
RmlUi - The HTML/CSS User Interface library evolved

RmlUi - The HTML/CSS User Interface Library Evolved RmlUi - now with added boosters taking control of the rocket, targeting your games and application

Michael R. P. Ragazzon 1.3k Aug 5, 2022
AirPods desktop user experience enhancement program

AirPodsDesktop AirPods desktop user experience enhancement program

Sprite 246 Aug 6, 2022
ImTui: Immediate Mode Text-based User Interface C++ Library

ImTui is an immediate mode text-based user interface library. Supports 256 ANSI colors and mouse/keyboard input.

Georgi Gerganov 1.9k Jul 27, 2022
This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain

This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window and input handling but instead provides a very modular library approach by using simple input state for input and draw commands describing primitive shapes as output.

Micha Mettke 13.4k Aug 4, 2022
LicenseValidationDialog is a class designed to validate license keys on the user's side.

QT-LicenseValidationDialog Basic LicenseValidationDialog is a class designed to validate license keys on the user's side. The class is designed to ver

Piotr Napierała 1 Jun 10, 2022
Cross-platform malware development library for anti-analysis techniques

The Anti-Analysis Menagerie Cross-platform malware development library for anti-analysis techniques. Design Goals Provide a rich and convenient interf

Alan 19 Jul 22, 2022