Contact Us


Initiative B@bel

WSI Guidelines


















Type Design


Design Tools



Font Downloads










Font FAQ



Computers & Writing Systems


You are here: Input > Utilities
Short URL: https://scripts.sil.org/ukelele_history

Ukelele version history

Jonathan Kew, 2005-12-02

Please note

The Ukelele site has been moved to a new location: http://software.sil.org/ukelele. This page is now obsolete and no longer contains current releases or information.

This page records the release notes from older versions of the Ukelele tool; the latest version of the software, and recent release notes, can be found on the main Ukelele page.

15 September 2009 — Released version 1.8.4

  • Fixed a problem with certain keyboard layouts that had been hand-edited to have gaps in the numbering of their key maps.

8 June 2009 — Released version 1.8.3

  • Keyboards with a Fn key did not show the delete key as a forward delete when the Fn or Num Lock keys were down. This is fixed.
  • Changed the output so that, if there are no actions, no actions section is in the XML. This may fix an issue introduced by a Security Update for 10.4.11.

30 April 2009 — released version 1.8.2

  • Fixed a hang when deleting the last comment in a keyboard layout.
  • Fixed a bug which caused a crash when trying to unlink a key with no output.
  • Fixed a bug in saving a keyboard layout when some of the headers were not specified.

6 January 2009 — released version 1.8.1

  • When Sticky Modifiers is on, the modifiers are returned to their state when the window is activated (such as after a dialog is dismissed), rather than going back to the state of the hardware keyboard modifiers.
  • Avoid a crash when you close a keyboard layout when you are in a dead key state other than state “none”.
  • Avoid a crash when editing a key with no output in the current dead key state that is not state “none”.

29 July 2008 — released version 1.8

  • We now remove unused actions when removing unused states, which improves the behaviour, removing more states.
  • Fixed a bug which occasionally made Ukelele crash when editing the terminator of a dead key state by double-clicking the dead key.
  • Fixed a bug which caused a crash on quit after adding a new modifier combination.
  • Fixed a bug which caused a crash when a dead key state had no terminator specified, usually when a keyboard layout has been edited outside Ukelele.
  • Updated the resources list to reflect a changed URL.
  • Fixed a bug that caused a crash when you tried to open a file that had illegal XML.
  • Fixed a couple of places where strings were not properly encoded for XML, leading to a possibility of getting a file which was not legal XML, and therefore the system could not use the keyboard layout, and Ukelele could not open it again.
  • A malformed file could cause a crash on save. This is fixed.
  • When you change the script code, a random keyboard ID in the appropriate range is chosen. Also, new keyboards have a random keyboard ID.
  • Updated the manual to include information on the correct ranges of IDs allowed for each of the different script types. Keyboard IDs may have more influence than is implied by Apple’s documentation, but this is far from certain.
  • Updated the help book a little to reflect changes in the program and in terminology used in the manual.
  • Updated the Unicode system keyboard layouts to have all the current control keys having default output (they got missed in 1.8b6).

12 March 2008 — released version 1.8b6

  • Fixed a bug that made keys appear selected when the  Num Lock  key was down.
  • Corrected the behaviour of the Apple Aluminium Wireless keyboard and MacBook (Late 2007), which have a  Fn  key, but no embedded keypad.
  • Provided a better error message when a non-keyboard layout XML file is opened.
  • Changed the way the XML is produced to adhere to part of the original specification (the when element for state “none” must come first).
  • Added the current state and action names in the dialog asking for a new name.
  • Updated all the provided keyboard layouts, both System and Logitech, to have all control keys defined and to avoid numeric state names.
  • If you gave an empty string in a dialog that needed a non-empty string, you got stuck in a loop that wouldn’t accept the string until you clicked Cancel and tried again. This is now fixed.
  • Changed the display in dead key states so that only the output in the dead key state is shown. The previous behaviour was that keys that had only one output would show that, even if the key did not produce that output in the dead key state.
  • A completely rewritten manual is now included. Help files and an updated tutorial are still in progress.

6 November 2007 — released version 1.8b5

  • Apple has changed how the system keyboard layouts are organised, and so it is no longer possible to create a new keyboard layout based on a system keyboard layout. This option in the “New…” dialog is disabled on Leopard systems (but is still available on older systems).

5 November 2007 — released version 1.8b4

  • Made the default index a pop-up menu in the modifiers editor, so that you can change it there, as well as via the Keyboard menu.
  • Added resources to allow the new Apple aluminium keyboards (both wired and wireless) as options in the keyboard type for display.
  • Added support for the new function keys  F17 ,  F18  and  F19 . This produces a side effect that keyboard layouts will almost always warn that some of the control key output is missing. This is for  F16  to  F19 , so you should agree to add that output.
  • Double-clicking a control key with no output defined no longer silently adds the standard output.
  • Compiled under Xcode 3.0 on Leopard (Mac OS X 10.5), which hopefully makes it work on all systems from 10.2 to 10.5.
  • Added keyboard layouts from Logitech, converted from KCHR to uchr.

28 June 2007 — released version 1.8b3

  • Modified the new layout dialog to drop the “.keylayout” extension in the system keyboard layouts popup menu.
  • The dialog box that comes up when you double-click a key now treats the  return  key as clicking  OK .
  • When you copied a key, the paste command didn’t become active immediately, but only after some other action (opening a dialog, switching windows, switching applications, or making a change to the keyboard layout). This is now fixed.
  • Added a new command to unlink a whole modifier set at once, which unlinks all keys with the same modifier combination.
  • Fixed a bug in adding a new modifier combination as a copy of an existing key map which made the keyboard layout invalid and so unusable.
  • Fixed the dialog so that requesting a Dvorak lower case keyboard layout for a new modifier combination actually works.
  • Added new options for AZERTY layouts (upper and lower case) when creating a new modifier combination.
  • Added a new reference to the links page of the manual, with pointers to resources for users with non-Apple keyboards (PC keyboards, if you like).

May 30, 2007: released version 1.8b2

  • Fixed an error in the Serbian keyboard layout.
  • Added keyboard flag icons for almost all the system keyboards.
  • Opening a keyboard layout is now somewhat faster.
  • The output inspector and key code floating windows now remember their position.
  • Made finishing a dead key an undoable action, which avoids a crash when undoing entering a dead key state when you had already left it.
  • Added a new command to “unlink” a key, so that editing a key’s output with one set of modifiers does not affect its output with a different set of modifiers.
  • Tried to fix a crash related to memory management, and also plugged a memory leak.
  • Fixed a typo that made the uppercase Dvorak layout created with a new modifier combination produce “e” instead of “E”.
  • I have begun a complete rewrite of the manual, but that isn’t ready for this release, so there is only the updates to the current manual and help.

March 13, 2007: released version 1.8b1

  • Universal binary, moving to Xcode.
  • New preferences for creating dead keys. Now, naming the dead key state and providing a terminator are optional. If you don’t provide a name, a default name will be used, and, if you don’t give a terminator, a null terminator will be created. This simplifies the creation of dead keys for most users.
  • Resolved a couple of places where the program could crash, including some memory management problems that could also cause memory leaks.
  • Fixed a bug which meant that, though technically correct, produced output that was perhaps not what Apple’s keyboard layout compiler expected. I suggest that all existing keyboard layouts be opened, a change made and then undone, and saved. This may help the system retain the correct keyboard, but I’m not sure about that.
  • The XML file is now indented to show structure.
  • New feature to swap two keys directly. This swaps everything associated with the two keys, including all modifier combinations and dead keys.
  • New feature of cut/copy/paste keys. As with swapping keys, this operates on all modifier combinations. Pasting is only allowed within the same keyboard layout — you can’t copy a key from one keyboard layout and paste it into another.
  • Provided some feedback to tell the user that a control key can’t be made into a dead key.
  • Updated manual and help files, and provided a tutorial.
  • Fixed some problems with some Central European keyboard layouts converted from Apple’s resource files: Czech, Czech-QWERTY, Estonian, Polish and Slovak. Changing some keys with the old versions caused problems with the space key, among other problems.
  • Removed the Japanese, Korean, Simplified Chinese and Traditional Chinese keyboard layouts, as they are of no use — the input methods don’t allow modified keyboard layouts, unfortunately.
  • Improved the display in dead key states, no longer showing the terminator when there is no output in that state, but rather showing a blank key.

August 8, 2006: released version 1.7

  • The feature added in 1.7b6 has been extended so that an untitled keyboard will be given the name from the file name whenever it is saved, not just the first time.
  • Correctly handle the case of changing a control key which had no output associated with it.
  • Change the behaviour when deleting a dead key, so that you don’t get the terminator in states other than state “none”.
  • Handle characters that need to be coded for XML in the name of the keyboard.

July 8, 2006: released version 1.7b6

  • Added a feature to add a name for the keyboard layout when saving for the first time, if the name hasn’t been set from within the program.
  • There is now a new preference, for the default keyboard to display if the system does not recognise the hardware keyboard attached to the computer.
  • The dialog for keyboard type (the keyboard displayed on the screen) has been modified to use two popup menus rather than a list and a popup menu.
  • The manual and help have been updated to reflect the latest changes.
  • The version for OS X 10.2 (Jaguar) now has a “J” at the end of the version number.

June 23, 2006: released version 1.7b5

  • Fixed more (I think all, this time) cases of the random crashes introduced in 1.7b2.
  • Validate Unicode values input as &#x...; or &#...; to ensure that only valid Unicode code points are generated. Code points in the surrogate ranges are not permitted. If this is a problem, please tell me!
  • Enforce a system-level restriction that the maximum number of Unicode characters generated by a single key is 20. Attempting to make the output longer than 20 characters will result in a dialog explaining that this is not allowed.
  • Version 1.7b3 introduced output of named entities (e.g. ') in the keyboard layout file. These are not supported, so now numerical encoding is generated again.

June 8, 2006: released version 1.7b4

  • Fixed a second instance of the problem fixed in 1.7b3.

June 8, 2006: released version 1.7b3

  • Fixed a problem where a crash would occur some time after running the dialog from double-clicking a dead key, usually in the second time of bringing up that dialog.
  • Changed the code handling XML entities to produce named entities (e.g. ") rather than numerical entities (e.g. ").

May 23, 2006: released version 1.7b2

  • Added a new floating window, the Output Inspector, which shows the output of the key under the pointer as a Unicode code point. For dead keys, it shows the state entered by pressing the dead key, and the terminator for that state.
  • Added an option to the dialog when double-clicking a dead key. You can now choose to edit the dead key (i.e. enter the dead key state), as well as the previous options of changing the terminator or deleting the dead key.
  • Fixed a problem in handling code points outside the Basic Multilingual Plane when specified numerically.
  • Updated the manual more thoroughly.

May 15, 2006: released version 1.7b1

  • Provide some options when creating a new modifier set. The default is an empty key map, with only the control keys having any output set, but there are two new options: a standard key layout or a copy of another key map. The standard key layouts set the letter keys to the default US QWERTY or Dvorak key layouts in either upper or lower case. Copying an existing key map, for example making the caps lock initially the same as shift, is intended to save some extra work, by making you only specify what is different.
  • Allow navigation of bundles or packages, so that the user can open keyboard layouts that are bundled without having to manually open the bundle in the Finder and drop the keyboard layout file onto the Ukelele icon.
  • Updated help files and manual, including putting page numbers in the manual. Also, the references to web sites was revised, removing dead links and adding several new sites.
  • Fixed a bug that could cause a keyboard layout to become invalid when deleting output from a key in state “none”.
  • Fixed a bug introduced in version 1.6.6 which effectively disabled drag and drop when any modifiers were down, unless sticky modifiers was set.
  • Fixed a bug which meant that nothing was saved if the user double-clicked a key which didn’t already have output associated with it — the dialog ran, but the new output was not retained.

May 1, 2006: released version 1.6.7

  • Double-clicking a dead key changed the key with no modifiers (or, actually, what modifiers were current when the dialog ended). It is now fixed to behave as expected.
  • Added a section in the help and manual to explain the codes necessary to make keys into control keys such as Home, Page Up, arrow keys, etc.
  • Removed Hangul, SCIM & TCIM keyboards, as they are not useful on their own, since they are part of various input methods. At present, input methods are apparently not able to use other keyboard layouts.
  • Moved some initialisation code so that you don’t get warned about a missing KCAP resource when double-clicking a keyboard layout document.

February 24, 2006: released version 1.6.6

  • Improved the display when switching windows.
  • Try to solve a crash that some users get when working with dead keys (not too sure why it’s crashing, so I don’t guarantee it’s fixed).
  • Handle the case when a key is double-clicked and the output is deleted, when in a dead key state (gives the terminator, rather than a null output).
  • Show correct output in some dead key cases, where null output showed instead of the terminator.
  • Converted all the keyboard layouts provided with Mac OS X 10.4.5, giving a few more layouts than in previous versions. In particular, there are Hangul, SCIM and TCIM layouts which were not available before.

December 30, 2005: released version 1.6.5

  • Fixed a crash when adding a new modifier combination.
  • In previous versions (1.6.2–1.6.4), not all keyboard types would be available when opening or creating a new keyboard as the start-up action. This is now fixed, and all keyboard types are available at start-up as well as when opening or creating a new keyboard layout with the menu commands.
  • Ukelele now uses “Smart Crash Reports”. If you are running Mac OS X 10.4 (Tiger), you can go to  http://www.unsanity.com/smartcrashreports/ and download the client software. It enables you to send any crash logs directly to the author. This is not required for Ukelele to operate, and is intended to help the developer respond to crash reports more quickly.

September 22, 2005: released version 1.6.4

  • The fix in 1.6.3 didn’t work correctly. I believe that it’s fixed correctly now.
  • Fixed the code in naming new files so that you don’t get two .keylayout extensions in the file name.
  • Changed the handling of key down events slightly to improve visual appearance when the command key has been held down.

September 13, 2005: released version 1.6.3

  • Fixed a bug causing a crash on saving of a keyboard layout without any dead keys.

September 9, 2005: released version 1.6.2

  • Fixed an issue when undoing a change to a key which did not already have output.
  • The modifiers editor was not deleting the last row when a combination was deleted, and trying to delete it again led to a crash. This is now fixed.
  • Fixed a bug which caused a crash on quitting occasionally.
  • Added support for more keyboard types (all types recognised by Keyboard Viewer for Panther and Tiger or Key Caps for Jaguar).
  • Tweaked the code for determining whether to show output as small or large on a key cap.
  • Fixed a bug which failed to refresh the display of a key with no output, leaving it looking as though it had whatever output was last displayed. This was most noticeable when editing dead keys.
  • Correctly calculate the maxout figure, the maximum number of characters produced by a keystroke or sequence of keystrokes. A bug in calculation in earlier versions made some keyboard layouts behave incorrectly.

July 19, 2005: released version 1.6.1

  • Added a version that will run on Mac OS X 10.2.x (Jaguar) — identical except that it does not provide information about XML errors when opening a file that is not valid XML.
  • Fixed a bug that caused a crash when creating a dead key when the trigger did not have any output assigned to it.
  • The dialog asking whether to save changes now shows the long name of the file rather than the 31-character shortened version.
  • Fixed some issues with display when the Fn key is down (on some iBook and PowerBook keyboards).

June 29, 2005: released version 1.6

  • Fixed a problem which caused a crash when double-clicking a key which has no output.
  • Handled a problem which could cause a crash when clicking the splash screen just before it goes away with the timer.
  • Improved the display of control characters and symbols for control keys.
  • Improved the speed of determining whether the text will fit on the key cap.
  • Changed button labels in some dialogs to avoid using "Yes" and "No", so that it is clearer what action will happen when the button is clicked.
  • Fixed a crash when creating a dead key.

April 28, 2005: released version 1.6b1

  • Added the capability of changing the output of control keys by double-clicking them (not drag and drop).
  • Changed the way that Ukelele determines whether to show a key cap in the normal size or the reduced size, based on what will fit into the key cap on screen. Also tries to be intelligent about how to show non-printable characters. Unfortunately, this is a lot slower.
  • Fixed a bug which caused doubling of comments in the actions element in the keyboard layout file, when there was a comment between two actions. Duplicate comments are now deleted on saving the file.
  • Fixed a bug which caused a crash when creating a dead key from a key that had no output before creating the dead key.
  • Repaired an error in the Serbian keyboard layout which prevented it being used.
  • Fixed a cosmetic bug in the display when changing state names (some characters would appear to disappear).
  • Fixed a cosmetic bug when the menu would display “Hide” for a floating window (State Stack, Key Code or JIS Palette) that had been closed with the close button rather than through the menu.
  • Reworded an error message that would appear if the selected physical keyboard layout could not be loaded (which should never happen, but appears to happen to some people).
  • Provided more information about the error in the dialog box displayed when a file is invalid XML.
  • Changed the default keyboard layout to the same as Keyboard Viewer (original “Cosmo” USB keyboard).
  • Fixed a crash when double-clicking the key cap in the terminator dialog.
  • Ukelele should now correctly display characters out of the Basic Multilingual Plane (i.e. code points greater than U+FFFF).
  • Fixed a bug which would sometimes cause a keyboard layout to be invalid when creating a second-level or higher dead key (i.e. a dead key starting from a state other than "none").
  • Fixed a crash when saving a keyboard layout which was read from a file not encoded as UTF-8.

January 16, 2005: released version 1.5

  • Lowered the baseline so that tall characters (such as those with two diacritics) show up correctly (this was in 1.5b2, but not noted then).
  • Fixed a bug where dragging and dropping certain characters could create an output file which is illegal XML, and so would not appear in the input menu.
  • Fixed a bug which, in certain circumstances, would put the program into an infinite loop when creating a dead key.
  • Changed the pop-up menus for action and state names to make a more readable form (convert to MacRoman rather than UTF-8).

January 7, 2005: released version 1.5b2

  • Included XML versions of all the non-Unicode system keyboard layouts (converted to XML with Apple’s klkchrtoxml and kluchrtoxml tools, part of  Font Tools 2.0).
  • Fixed a bug that caused a crash when the JIS palette was closed with the close box.
  • Fixed a bug that caused a crash when clicking on a key to select it as a dead key trigger.
  • Corrected the output for the up arrow and down arrow (they had been reversed).
  • Fixed a bug that caused a crash on save if the opened file was not in UTF-8 format but still valid XML (e.g. ISO 8859-1 coding).

December 21, 2004: released version 1.5b1 — first test release of Ukelele 1.5, adding significant new features to the 1.0 version:

  • Rewrote the code for displaying keyboards so that any physical keyboard layout that the system knows about can be displayed.
  • Key sizes can be made larger to see longer output strings.
  • Added output for non-editable keys (return, enter, tab, escape, delete, F-keys, arrow keys, page up, page down, etc) when starting from an empty keyboard layout.
  • Missing non-editable key output is diagnosed and can be repaired when a keyboard layout is opened. A menu command is also provided so that it can be done at any time, if you elect not to do so when opening the file.
  • Added display of symbols for modifier and non-editable keys so that they can be recognised.
  • Added a palette for use with JIS keyboards to allow changes to be for JIS only or for all keyboard types.
  • New menu commands to change state and action names.
  • New menu command to remove unused states.
  • New comments editor that allows you to add your own comments to the XML keyboard layout file, and edit or delete them as well.
  • Improved the new file dialog to allow creation of an empty layout, a layout based on a system keyboard layout, or a copy of an existing, non-system keyboard layout.
  • Changed the dialog for editing or creating dead keys to allow easy access to existing dead keys.
  • Added a command to import a dead key from another keyboard layout.
  • The modifiers editor window now shows the default modifier index.
  • Added more keyboard shortcuts.
  • You can undo almost any action now, including creating a dead key.
  • Wrote a real manual, as well as updated the help book.
  • Made first steps to making Ukelele ready for localizing.
  • Improved error reporting from keyboard layout files that are not valid for some reason.

September 20, 2004: released version 1.0.5

  • Fixed a bug that meant that use of the Fn or Num Lock keys did not work correctly (the keypad and non-keypad keys were mapped together). However, some keyboard layouts affected by this bug may still have problems caused by the bug, and may need to be regenerated. The problem can be fixed by editing the XML output file. If you really want to do that, ask for details.
  • Changed the position of the state window so that it can be seen on 800 x 600 screens.
  • Finally fixed the bug noted in 1.0b4, where creating a keyboard layout based on a system keyboard layout would crash in Mac OS X 10.2.8, and perhaps other versions as well.
  • Added a feature showing the names of missing actions when reading a keyboard layout file which is missing some actions.
  • Added a new command to set the script code and numeric ID of the keyboard.

August 14, 2004: released version 1.0.4

  • Fixed an issue that crippled the modifier combination dialog.
  • Corrected the handling of double-clicking the terminator key cap in the dialog asking for a terminator.

August 2, 2004: released version 1.0.3

  • Really fixed the bug with keyboard layouts created with “New…”. (The fix in version 1.0.1 didn’t actually solve the problem.)
  • If the bug was manifested in a keyboard layout file, it will be corrected on opening in 1.0.3. A dialog will tell you if this has happened.
  • Added comments to the keyboard layout files indicating creation and modification times.
  • Removed some unused code.
  • Fixed a memory leak when saving a keyboard layout file.
  • Added information about keyboard names and icons to the help book.

July 17, 2004: released version 1.0.2

  • Made deleting a dead key work correctly and properly flag it as non-undoable.
  • Improved documentation of multi-level dead keys in the help book.
  • Cosmetic changes to various windows and dialogs.

July 13, 2004: released version 1.0.1

  • Corrected a bug which made keyboard layouts created with “New…” invalid.
  • Added the ability to edit dead-key terminators.

June 28, 2004: released version 1.0

  • This is the final release of Ukelele 1.0, with no currently-known bugs.

April 13, 2004: released version 1.0b4

  • Fixed a problem where an XML control character (&<>") was assigned to a key, resulting in invalid XML.
  • Known problem: One user reported a crash when creating a new keyboard layout based on a system keyboard layout. It may be a Jaguar vs. Panther issue, but I haven't been able to reproduce it. If you can reproduce this problem, please let me know exactly what you did!

March 31, 2004: released version 1.0b3.

  • Fixed a bug which caused Ukelele to crash after the state window was closed.
  • Created a real JIS keyboard layout for PowerBook/iBook keyboards.
  • Added preferences window for setting whether the splash screen is shown at startup and the startup action.
  • Added a splash screen.
  • Fixed a bug which caused Ukelele to crash when adding a new modifier combination to a keyboard with exactly one existing modifier combination.
  • Fixed a bug with creating dead keys which put them onto the wrong modifier combination.

March 20, 2004: released version 1.0b2.

  • This version corrects a problem in 1.0b1 that was generating invalid XML files.

© 2003-2020 SIL International, all rights reserved, unless otherwise noted elsewhere on this page.
Provided by SIL's Writing Systems Technology team (formerly known as NRSI). Read our Privacy Policy. Contact us here.