JEF File Documentation


Summary

A Janome Embroidery File is a machine-embroidery design: the stitch-by-stitch instructions a Janome (or Elna) embroidery machine follows, storing the exact needle coordinates and the thread-colour changes rather than a picture. A .jef file is binary stitch data (MIME type application/octet-stream), sent to the machine on a USB stick. To preview it, use the free Wilcom TrueSizer or an online embroidery viewer; to edit or convert it to PES or DST, use embroidery software such as Embird or Embrilliance.

Technical details

FeatureValue
Full nameJanome Embroidery File
File extension.jef (enhanced variant .jef+)
MIME typeapplication/octet-stream
Format typeProprietary binary machine-embroidery stitch file
DeveloperJanome (Janome Sewing Machine Co.)
Also used byElna machines (made by Janome)
IntroducedLate 1990s
Design modelStitch-based (finished needle points), not outline/object
Byte orderLittle-endian
Header sizeRoughly 1440 bytes before the stitch list (offset in header)
Magic numberNone documented — identified by structure and extension
Stitch encoding2-byte signed (x, y) deltas; 0x80 introduces a 4-byte command
Coordinate units0.1 mm per unit
Colour dataThread (needle) list with colour-change sequence
Open standardNo — proprietary, reverse-engineered by libembroidery
Free viewerWilcom TrueSizer; Embrilliance Express; online viewers
EditorsJanome Digitizer, Embird, Embrilliance
Related extensions.jef+, .sew, .dst, .pes, .exp, .vp3, .hus
Specificationjanome.com (closed); community docs on KDE Liberty wiki
Structure at a glance

JEF has no fixed magic signature. It begins with a binary header (around 1440 bytes) whose first field is a little-endian offset to the stitch data, followed by the design dimensions, hoop code, colour count and the ordered thread list. The stitch records then follow. Each normal stitch is two signed bytes, a relative (dx, dy) move in the range −127..127 at 0.1 mm per unit. A byte of 0x80 (−128) in the x position marks a 4-byte command (0x80, code, dx, dy) for a colour change, jump or trim; 0x80 0x10 ends the design. Identify a JEF by its Janome/Elna origin and this layout, not by a header constant.

What is a JEF file?

A .jef file is a Janome Embroidery File, the native stitch-data format of Janome home embroidery machines, introduced in the late 1990s and also used by Elna machines (Janome manufactures Elna's embroidery hardware). It does not store a picture in the ordinary sense. It stores the physical path the needle takes: an ordered list of stitch coordinates and machine commands, plus a header recording the design's size, hoop and thread colours. The machine reads this and stitches the design onto fabric.

JEF is a stitch format, not an outline or object format. It records the finished stitches themselves, so unlike a digitizing project it carries no editable shapes and can be scaled only slightly before the stitch density distorts. This is the key mental model for the format and it explains most of what follows, including why “resize this design” is harder than it sounds and why converting to another machine's format is a stitch-for-stitch translation rather than a re-render.

Stitch data versus outline data

Embroidery formats fall into two camps. Outline (object) formats keep the digitized shapes, stitch types and parameters, so software can regenerate the stitches at any size. Stitch formats keep only the computed result: the exact needle penetrations. JEF is firmly in the stitch camp, alongside DST, PES (in its stitch portion), EXP and VP3. The practical consequence is density. Stitches were laid down for one physical size; enlarge the design 150% and the same number of stitches spreads over more fabric, thinning the fill, while shrinking it packs stitches until they pile up and jam. Small adjustments (a few percent) are fine; substantial resizing needs the original outline design or a re-digitize, not a stitch file.

The JEF file layout: header, thread list, stitch list

A JEF file is a binary stream in little-endian byte order, arranged in sections. There is no signature constant at the start; instead the header opens with an offset to the stitch data, and a reader uses that offset to know where the fixed header and thread tables end and the stitch records begin. The header region is roughly 1440 bytes.

JEF file sections (in order)
 ┌─ Header
 │   ├─ stitch-data offset      (little-endian; where the stitch list starts)
 │   ├─ format / version flags
 │   ├─ design width / height   (bounding box, 0.1 mm units)
 │   ├─ hoop code               (which Janome hoop the design targets)
 │   └─ colour (thread) count
 ├─ Thread list                 ordered thread/needle colours + change sequence
 ├─ Embedded bitmaps            small preview thumbnails at fixed offsets
 └─ Stitch list                 the (dx, dy) stitch and command records

The stored width and height are the design's bounding box, used by the machine to check the design fits the selected hoop. The hoop code matters in practice: a Janome machine refuses a design flagged for a hoop larger than the one fitted, which is one common reason a valid .jef “won't load.” The header also carries small embedded preview bitmaps at fixed offsets (reverse-engineering work places monochrome and per-colour thumbnails at offsets such as 0x004A and 0x010C), which let a machine or viewer show the design before stitching.

The thread list and colour changes

Before the stitches, JEF stores an ordered thread list: one entry per colour block, in stitching order, describing the thread colour and referencing a Janome thread palette. This list is what a viewer reads to show the design in colour and what the machine uses to tell you which thread to load at each stop. The number of entries matches the colour count in the header. Because the colours are an explicit ordered list rather than embedded per stitch, converting JEF to a format that carries no colour data, such as DST, loses this information: DST records only stitches and stops, so the operator must re-assign colours afterwards.

Stitch records and the 0x80 command escape

The stitch list is a sequence of short records. A normal stitch is two signed bytes, a relative move (dx, dy) from the previous point, each in the range −127 to +127, in units of 0.1 mm. Storing deltas rather than absolute positions keeps each stitch to two bytes and matches how the machine actually moves the hoop: step the frame by (dx, dy), drop the needle, repeat.

Normal stitch:   [dx] [dy]           dx, dy signed, 0.1 mm units
Command escape:  [0x80] [code] [dx] [dy]   4 bytes, when x byte == 0x80 (-128)
   code 0x01/0x02 …  colour change / stop
   code (jump)       move without stitching (long travel)
   code (trim)       cut the thread
End of design:   [0x80] [0x10]        terminates the stitch list

The value 0x80 (−128) never occurs as a legitimate stitch delta, so it is reused as an escape. When the x byte equals 0x80, the record is a 4-byte command: 0x80, a command code, then a (dx, dy) pair for the associated move. The command code selects a colour change (advance to the next thread in the list), a jump (reposition the hoop without stitching, used to travel between separated areas), or a trim (cut the thread). The design ends with the special two-byte sequence 0x80 0x10. A reader decodes the whole design by walking these records, accumulating an absolute needle position from the deltas and acting on each command in turn.

JEF+ and the format variants

Janome later introduced JEF+ for newer machines, an enhanced variant that adds sections beyond the base header and stitch list (extra design and editing data), and some files carry the .jef+ name. A machine expecting one variant may reject the other, which is another cause of load failures: a plain-JEF machine and a JEF+ file, or the reverse, will not agree. Embroidery software that writes JEF lets you pick the target variant and hoop so the output matches the specific machine.

Viewing, converting and loading onto the machine

To simply preview a design, the free Wilcom TrueSizer opens JEF and shows the stitches, thread colours and dimensions, as do Embrilliance Express and browser-based embroidery viewers. To edit or convert, an embroidery editor that reads JEF and writes other stitch formats, Embird or Embrilliance, exports to PES (Brother/Baby Lock), DST (near-universal Tajima), VP3 (Husqvarna Viking/Pfaff) or EXP (Melco/Bernina). Keep the original physical size when converting, for the density reasons above. One request is effectively pointless: exporting JEF to a vector format such as SVG produces a messy stitch trace, not clean editable outlines, because the file only ever held finished stitches. To stitch the design, copy the .jef to the USB stick or card exactly as the machine's manual specifies, in a hoop size the machine accepts.

References