Project GNU's extension language

(About Guile)

About Guile
What is Guile?
Recent news
Mailing lists


Getting Guile
Anonymous CVS


Project Summary
Helping out
Cool ideas

Guile Resources
Scheme Resources

Project GNU Home Page

What is Guile? What can it do for you?

Guile is a library designed to help programmers create flexible applications. Using Guile in an application allows programmers to write plug-ins, or modules (there are many names, but the concept is essentially the same) and users to use them to have an application fit their needs.

There is a long list of proven applications that employ extension languages. Successful and long-lived examples in the free software world are GNU Emacs and The GIMP.

Very popular examples of extending server applications are the Apache projects Perl and PHP modules.

Extension languages allow users, programmers, and third-party developers to add features to a program without having to re-write the program as a whole, and it allows people extending a program to co-operate with each other, without having to expend any extra effort.

Guile is a programming language

Guile is an interpreter for the Scheme programming language, packaged as a library which can be incorporated into your programs. Your users have full access to the interpreter, so Guile itself can be extended, based on the needs of the user. The result is a scripting language tailored to your application.

Guile gives your programs more power

Using Guile with your program makes it more usable. Users don't need to learn the plumbing of your application to customize it; they just need to understand Guile, and the access you've provided. They can easily trade and share features by downloading and creating scripts, instead of trading complex patches and recompiling their applications. They don't need to coordinate with you, or anyone else.

The true cost of doing it yourself

When you get to the point in your project where you need a scripting language or a configuration file format and reader, the normal course of things is to say ``I'll just do something clean and simple.'' This is a good decision. Adding a full programming language is just a distraction from your project. But simple languages don't seem capable of staying simple. For example, early releases of PHP, a language for generating web pages dynamically, enjoyed its minute memory footprint and simplicity. However over time PHP has grown, with the latest releases giving PHP an object system and other features that have grown it to a much larger size. Compare Tcl from its 1988 origins with the modern, sizable language. Broadly, the same progression has occurred with Perl.

The point here is not to criticize these very successful and useful languages. The point is to demonstrate how commonly the simple, good scripting languages have turned into complex systems. This is not necessary, but it's a new problem that Guile attempts to address.

Guile has the fundamentals you need; you simply specialize it for your application. It has arrays and lists; modules; objects; and first-class functions. It has garbage collection --- which makes using Guile especially simple. Using Guile, your application has a full-featured scripting language right from the beginning, so you can focus your manpower on the novel and attention-getting parts of your application.

How do I get Guile?

The latest release of Guile is available via anonymous FTP, at However, please consider also making a donation to the FSF. The software page has full details about mirror sites, etc.

Guile's ongoing development sources are available, via anonymous CVS and nightly snapshots, available via FTP. If you want to see Guile being developed, this is where it happens.

Last modified: Wed Apr 3 15:39:29 PST 2002

Please send FSF & GNU inquiries & questions to There are also other ways to contact the FSF.

Please send comments on these web pages to, send other questions to

Copyright (C) 2000,2001,2002,2005 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA

Verbatim copying and distribution of this entire web page is permitted in any medium, provided this notice is preserved.

Updated: $Date: 2005/06/05 01:07:45 $ $Author: kryde $