A Free Software CAD framework

Xi is an Emacs-inspired framework for free (as in, free speech) CAD software. It is still in early development.

Production-grade free CAD software is still somewhat scarce. There are a bunch of small, specialized applications like gEDA for schematic capture and PCB layout, Freecad for mechanical engineering, and xfig, tgif and many more for generic technical drawing. This is absolutely in the spirit of UNIX programming but forces these projects to handle basic user interface and scripting issues on their own. Not surprisingly, these programs usually lack more advanced features (with some exceptions, e.g. transparent reading and writing of zipped files in xfig).

The aim of this project is to provide a common infrastructure for these programs—basically, a GUI which can be filled with domain-specific code. It covers common, reusable features such as an undo/redo mechanism, property editor, library browser, navigation between files and management of file dependencies. The domain modules (which are intended to be written in a scripting language as far as reasonably possible) provide a description of the actual objects and operations. This architecture roughly compares to that of Emacs.

Implemented features

Planned features

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.


Main window:

Dock windows:


Xi has not been released yet. If you are interested in development, you can download the latest source tarball here.



This package follows standard GNU compilation and installation conventions. Briefly, run the shell commands

    ./configure && make && make install

to configure, build, and install the package. If you are compiling from the git sources, run

    autoreconf -i

in the source directory before running ‘configure’. See the file INSTALL in the source distribution for more-detailed instructions.


The current implementation assumes there is already an existing .xi directory structure, so some preparation is required in order to run Xi for the first time. You can either download a prepared .xi directory containing some example schematics, extract it and move it to your home directory. Or you can create a minimal .xi directory structure yourself:

  1. Create a directory .xi inside your home directory.
  2. Create subdirectories projects and library inside ~/.xi.
  3. Create a file ~/.xi/projects/unnamed0.xml with the contents
    <?xml version="1.0"?>
  4. Create a file ~/.xi/font.xml with the contents
    <?xml version="1.0"?>

You may want to copy some gEDA example files to ~/.xi/projects and the referenced symbol files to ~/.xi/library. Do not copy the whole library as this will make starting the program extremely slow.


What do you mean by Xi being a “common infrastructure” for CAD programs?

When writing an editor for .po files, you can either choose to build a standalone application (as Qt did with the Linguist), or you can use Emacs and just write a po-mode that covers the idiosyncrasies of .po files. Likewise, if you wanted to build a, say, PCB layout program, you usually don't want to do stuff like undo/redo yourself. So you could just write a Xi domain module that covers what is special about PCB layout, and let Xi provide the rest. While developing the shared parts of the program, I'm using schematic capture as the “placeholder” domain because it's something I know well and it's not too complicated. This doesn't mean I'm primarily interested in writing a schematic capture tool.

How will Xi interact with existing CAD software? Does it work with other programs' file formats or is it intended to actually interface with them in some way?

It is not currently planned to have Xi interface with other free CAD programs in a way other than reading and writing files (which is the primary means of communication for the programs I had a closer look at). However, programs that use a scripting language can be modified to run within the Xi GUI. I'm currently working on this with gEDA.

Is there a reason that you don't use, say, GTK+?

When I started the project, I was using Qt. After some time I realized I spent too much time and code working around the problems with Qt, effectively writing a wrapper for the framework; some things didn't work properly even then (docks, for example, and the property editor). GTK+ solved some of the problems, but it didn't solve others (I'd still have to poke around in the internals of the toolkit), so I decided to build a custom toolkit which exactly suited the needs of the program.

This worked out nicely. I spent much time on the trickier parts of the toolkit (now I know why docks always are a problem), but the code turned out to be much clearer, and it was much easier to implement some of the features that previously were a problem.

Mailing lists


general development discussion about Xi


bug reports (but the preferred method is reporting directly to the bug tracker, if you don't mind creating an account)

To subscribe to either list, send an empty mail to listname-subscribe@lists.hedmen.org.


(print-era legal stuff required by German law)