Skip to content
Tags give the ability to mark specific points in history as being important
  • 1.55.1
    Version 1.55.1
    - New API for programs that embed GJS: gjs_memory_report(). This was already an
      internal API, but now it is exported.
    - Closed bugs and merge requests:
      * object: Implement newEnumerate hook for GObject [!155, Ole Jørgen Brønner]
      * Various maintenance [!228, Philip Chimento]
      * ByteArray.toString should stop at null bytes [#195, !232, Philip Chimento]
      * Byte arrays that represent encoded strings should be 0-terminated [#203,
        !232, Philip Chimento]
      * context: Defer and therefore batch forced GC runs [performance] [!236,
        Daniel van Vugt]
      * context: use timeout with seconds to schedule a gc trigger [!239, Marco
      * arg: Add special-case for byte arrays going to C [#67, !49, Jasper
        St. Pierre, Philip Chimento]
  • 1.52.4
    Version 1.52.4
    - Closed bugs and merge requests:
      * `ARGV` encoding issues [#22, !108, Evan Welsh]
      * Segfault on enumeration of GjSFileImporter properties when a searchpath
        entry contains a symlink [#154, !144, Ole Jørgen Brønner]
      * Possible refcounting bug around GtkListbox signal handlers [#24, !154,
        Philip Chimento]
      * Fix up GJS_DISABLE_JIT flag now the JIT is enabled by default in
        SpiderMonkey [!159, Christopher Wheeldon]
      * Expose GObject static property symbols. [!197, Evan Welsh]
      * Do not run linters on tagged commits [!181, Claudio André]
      * gjs-1.52.0 fails to compile against x86_64 musl systems [#132, !214, Philip
      * gjs no longer builds after recent autoconf-archive updates [#149, !217,
        Philip Chimento]
  • 1.54.1
    Version 1.54.1
    - Closed bugs and merge requests:
      * legacy: Ensure generated GType names are valid [!229, Florian Müllner]
      * Fix GJS profiler with MozJS 60 [!230, Georges Basile Stavracas Neto]
      * Regression with DBus proxies [#202, !231, Philip Chimento]
  • 1.54.0
    Version 1.54.0
    - Compatibility fix for byte arrays: the legacy toString() behaviour of byte
      arrays returned from GObject-introspected functions is now restored. If you
      use the functionality, a warning will be logged asking you to upgrade your
    - Closed bugs and merge requests:
      * byteArray: Add compatibility toString property [Philip Chimento, !227]
  • 1.53.92
    Version 1.53.92
    - Technology preview of a GNOME 3.32 feature: native Promises for GIO-style
      asynchronous operations. This is the result of Avi Zajac's summer internship.
      To use it, you can opt in once for each specific asynchronous method, by
      including code such as the following:
          Gio._promisify(Gio.InputStream.prototype, 'read_bytes_async',
      After executing this, you will be able to use native Promises with the
      Gio.InputStream.prototype.read_async() method, simply by not passing a
      callback to it:
          try {
              let bytes = await stream.read_bytes_async(count, priority, cancel);
          } catch (e) {
              logError(e, 'Failed to read bytes');
      Note that any "success" boolean return values are deleted from the array of
      return values from the async method. That is,
          let [contents, etag] = file.load_contents_async(cancel);
      whereas the callback version still returns a useless [ok, contents, etag]
      that can never be false, since on false an exception would be thrown. In the
      callback version, we must keep this for compatibility reasons.
      Note that due to a bug in GJS (,
      promisifying methods on Gio.File.prototype and other interface prototypes will
      not work. We provide the API Gio._LocalFilePrototype on which you can
      promisify methods that will work on Gio.File instances on the local disk only:
          Gio._promisify(Gio._LocalFilePrototype, 'load_contents_async',
      We estimate this will cover many common use cases.
      Since this is a technology preview, we do not guarantee API stability with
      the version coming in GNOME 3.32. These APIs are marked with underscores to
      emphasize that they are not stable yet. Use them at your own risk.
    - Closed bugs and merge requests:
      * Added promisify to GJS GIO overrides [!225, Avi Zajac]
      * Temporary fix for Gio.File.prototype [!226, Avi Zajac]
  • 1.53.91
    Version 1.53.91
    - Closed bugs and merge requests:
      * CI: add webkit and gtk-app tests [!222, Claudio André]
      * Fix example eslint errors [!207, Claudio André, Philip Chimento]
      * Fix more "lost" GInterface properties [!223, Florian Müllner]
      * Fix --enable-installed-tests when built from a tarball [!224, Simon
  • 1.53.90
    Version 1.53.90
    - GJS now depends on SpiderMonkey 60 and requires a compiler capable of C++14.
    - GJS includes a simple debugger now. It has basic stepping, breaking, and
      printing commands, that work like GDB. Activate it by running the GJS console
      interpreter with the -d or --debugger flag before the name of the JS program
      on the command line.
    - New API for programs that embed GJS: gjs_context_setup_debugger_console().
      To integrate the debugger into programs that embed the GJS interpreter, call
      this before executing the JS program.
    - New JavaScript features! This version of GJS is based on SpiderMonkey 60, an
      upgrade from the previous ESR (Extended Support Release) of SpiderMonkey 52.
      Here are the highlights of the new JavaScript features.
      For more information, look them up on MDN or
      * New syntax
        + `for await (... of ...)` syntax is used for async iteration.
        + The rest operator is now supported in object destructuring: e.g.
          `({a, b,} = {a: 1, b: 2, c: 3, d: 4});`
        + The spread operator is now supported in object literals: e.g.
          `mergedObject = {...obj1, ...obj2};`
        + Generator methods can now be async, using the `async function*` syntax,
          or `async* f() {...}` method shorthand.
        + It's now allowed to omit the variable binding from a catch statement, if
          you don't need to access the thrown exception: `try {...} catch {}`
      * New APIs
        + Promise.prototype.finally(), popular in many third-party Promise
          libraries, is now available natively.
        + String.prototype.toLocaleLowerCase() and
          String.prototype.toLocaleUpperCase() now take an optional locale or
          array of locales.
        + Intl.PluralRules is now available.
        + Intl.NumberFormat.protoype.formatToParts() is now available.
        + Intl.Collator now has a caseFirst option.
        + Intl.DateTimeFormat now has an hourCycle option.
      * New behaviour
        + There are a lot of minor behaviour changes as SpiderMonkey's JS
          implementation conforms ever closer to ECMAScript standards. For complete
          information, read the Firefox developer release notes:

      * Backwards-incompatible changes
        + Conditional catch clauses have been removed, as they were a Mozilla
          extension which will not be standardized. This requires some attention in
          GJS programs, as previously we condoned code like `catch (e if
          e.matches(Gio.IOError, Gio.IOError.EXISTS))`  with a comment in
          overrides/GLib.js, so it's likely this is used in several places.
        + The nonstandard `for each (... in ...)` loop was removed.
        + The nonstandard legacy lambda syntax (`function(x) x*x`) was removed.
        + The nonstandard Mozilla iteration protocol was removed, as well as
          nonstandard Mozilla generators, including the Iterator and StopIteration
          objects, and the Function.prototype.isGenerator() method.
        + Array comprehensions and generator comprehensions have been removed.
        + Several nonstandard methods were removed: ArrayBuffer.slice() (but not
          the standard version, ArrayBuffer.prototype.slice()),
          Date.prototype.toLocaleFormat(), Function.prototype.isGenerator(),
, and Object.prototype.unwatch().
    - Many of the above backwards-incompatible changes can be caught by scanning
      your source code using, or
    - Deprecation: the custom ByteArray is now discouraged. Instead of ByteArray,
      use Javascript's native Uint8Array. The ByteArray module still contains
      functions for converting between byte arrays, strings, and GLib.Bytes
      The old ByteArray will continue to work as before, except that Uint8Array
      will now be returned from introspected functions that previously returned a
      ByteArray. To keep your old code working, change this:
          let byteArray = functionThatReturnsByteArray();
      to this:
          let byteArray = new ByteArray.ByteArray(functionThatReturnsByteArray());
      To port to the new code:
      * ByteArray.ByteArray -> Uint8Array
      * ByteArray.fromArray() -> Uint8Array.from()
      * ByteArray.ByteArray.prototype.toString() -> ByteArray.toString()
      * ByteArray.ByteArray.prototype.toGBytes() -> ByteArray.toGBytes()
      * ByteArray.fromString(), ByteArray.fromGBytes() remain the same
      * Unlike ByteArray, Uint8Array's length is fixed. Assigning an element past
        the end of a ByteArray would lengthen the array. Now, it is ignored.
        Instead use Uint8Array.of(), for example, this code:
            let a = ByteArray.fromArray([97, 98, 99, 100]);
            a[4] = 101;
        should be replaced by this code:
            let a = Uint8Array.from([97, 98, 99, 100]);
            a = Uint8Array.of(...a, 101);
        The length of the byte array must be set at creation time. This code will
        not work anymore:
            let a = new ByteArray.ByteArray();
            a[0] = 255;
        Instead, use "new Uint8Array(1)" to reserve the correct length.
    - Closed bugs and merge requests:
      * Run tests using real software [#178, !192, Claudio André]
      * Script tests are missing some errors [#179, !192, Claudio André]
      * Create a '--disable-readline' option and use it [!196, Claudio André]
      * CI: stop using Fedora for clang builds [!198, Claudio André]
      * Expose GObject static property symbols. [!197, Evan Welsh]
      * CI fixes [!200, Claudio André]
      * Docker images creation [!201, Claudio André]
      * Get Docker images built and stored in GJS registry [#185, !203, !208,
        Claudio André, Philip Chimento]
      * Clear the static analysis image a bit more [!205, Claudio André]
      * Rename the packaging job to flatpak [!210, Claudio André]
      * Create SpiderMonkey 60 docker images [!202, Claudio André]
      * Debugger [#110, !204, Philip Chimento]
      * Add convenience g_object_set() replacement [!213, Florian Müllner]
      * Add dependencies of the real tests (examples) [!215, Claudio André]
      * CWE-126 [#174, !218, Philip Chimento]
      * gjs no longer builds after recent autoconf-archive updates [#149, !217,
        Philip Chimento]
      * gjs-1.52.0 fails to compile against x86_64 musl systems [#132, !214, Philip
      * Run the GTK real tests (recently added) [!212, Claudio André]
      * Fix thorough tests failures [!220, Philip Chimento]
      * Port to SpiderMonkey 60 [#161, !199, Philip Chimento]
      * Replace ByteArray with native ES6 TypedArray [#5, !199, Philip Chimento]
      * Overriding GInterface properties broke [#186, !216, Florian Müllner, Philip
      * Avoid segfault when checking for GByteArray [!221, Florian Müllner]
    - Various build fixes [Philip Chimento]
  • 1.53.4
    Version 1.53.4
    - Refactored the way GObject properties are accessed. This should be a bit more
      efficient, as property info (GParamSpec) is now cached for every object type.
      There may still be some regressions from this; please be on the lookout so
      we can fix them in the next release.
    - The memory usage for each object instance has been reduced, resulting in
      several dozens of megabytes less memory usage in GNOME Shell.
    - The CI pipeline was refactored, now runs a lot faster, detects more failure
      situations, builds on different architectures, uses the GitLab Docker
      registry, and publishes code coverage statistics to
    - For contributors, the C++ style guide has been updated, and there is now a
      script in the tools/ directory that will install a Git hook to automatically
      format your code when you commit it. The configuration may not be perfect yet,
      so bear with us while we get it right.
    - Closed bugs and merge requests:
      * Define GObject properties and fields as JS properties [#160, !151, Philip
      * Possible refcounting bug around GtkListbox signal handlers [#24, !154,
        Philip Chimento]
      * Fix up GJS_DISABLE_JIT flag now the JIT is enabled by default in
        SpiderMonkey [!159, Christopher Wheeldon]
      * Various CI maintenance [!160, !161, !162, !169, !172, !180, !191, !193,
        Claudio André]
      * Update GJS wiki URL [!157, Seth Woodworth]
      * Build failure in GNOME Continuous [#104, !156, Philip Chimento]
      * Refactor ObjectInstance into C++ class [!158, !164, Philip Chimento]
      * Use Ubuntu in the coverage job [!163, Claudio André]
      * Remove unused files [!165, Claudio André]
      * Add a ARMv8 build test [!166, Claudio André]
      * Make CI faster [!167, Claudio André]
      * Add a PPC4LE build test [!168, Claudio André]
      * gdbus: Fix deprecated API [!170, Philip Chimento]
      * Change Docker images names pattern [#173, !174, Claudio André]
      * Assert failure on a GC_ZEAL run [#165, !173, Philip Chimento]
      * Do not run linters on tagged commits [!181, Claudio André]
      * Fail on compiler warnings [!182, Claudio André]
      * Save code statistics in GitLab Pages [!183, Claudio André]
      * Build static analysis Docker image in GitLab [!184, !185, !187, !189,
        Claudio André]
      * GNOME Shell always crashes with SIGBUS [#171, !188, Georges Basile
        Stavracas Neto]
      * Coverage badge is no longer able to show its value [#177, !186, Claudio
      * Move the Docker images creation to GitLab [!190, Claudio André]
      * Cut the Gordian knot of coding style [#172, !171, Philip Chimento]
      * Some GObect/GInterface properties broke [#182, !195, Philip Chimento]
  • 1.53.3
    Version 1.53.3
    - This release was made from an earlier state of master, before a bug was
      introduced, while we sort out how to fix it. As a result, we don't have too
      many changes this round.
    - Closed bugs and merge requests:
      * Adding multiple ESLint rules for spacing [!152, Avi Zajac]
      * Various maintenance [!153, Philip Chimento]
  • 1.53.2
    Version 1.53.2
    - The `Template` parameter passed to `GObject.registerClass()` now accepts
      file:/// URIs as well as resource:/// URIs and byte arrays.
    - New API: `gjs_get_js_version()` returns a string identifying the version of
      the underlying SpiderMonkey JS engine. The interpreter executable has also
      gained a `--jsversion` argument which will print this string.
    - Several fixes for memory efficiency and performance.
    - Once again we welcomed contributions from a number of first-time contributors!
    - Closed bugs and merge requests:
      * Add support for file:/// uri to glade template [#108, !41, Jesus Bermudez,
        Philip Chimento]
      * Reduce memory overhead of g_object_weak_ref() [#144, !122, Carlos Garnacho,
        Philip Chimento]
      * gjs: JS_GetContextPrivate(): gjs-console killed by SIGSEGV [#148, !121,
        Philip Chimento]
      * Use compacting GC on RSS size growth [#151, !133, Carlos Garnacho]
      * Segfault on enumeration of GjSFileImporter properties when a searchpath
        entry contains a symlink [#154, !144, Ole Jørgen Brønner]
      * Compare linter jobs to correct base [#156, !140, Claudio André]
      * Various maintenance [!141, Philip Chimento]
      * Support interface signal handlers [!142, Tomasz Miąsko]
      * Remove unnecessary inline [!145, Emmanuele Bassi]
      * Add badges to the readme [!146, !147, Claudio André]
      * Fix debug logging [!148, Philip Chimento]
      * CI: add a GC zeal test [!149, Claudio André]
  • 1.53.1
    Version 1.53.1
    - Improvements to garbage collection performance. Read for more information:
    - Now, when building a class from a UI template file (using the `Template`
      parameter passed to `GObject.registerClass()`, for example) signals defined in
      the UI template file will be automatically connected.
    - As an experimental feature, we now offer a flatpak built with each GJS commit,
      including branches. You can use this to test your apps with a particular GJS
      branch before it is merged. Look for it in the "Artifacts" section of the CI
    - Closed bugs and merge requests:
      * Tweener: Add min/max properties [!67, Jason Hicks]
      * `ARGV` encoding issues [#22, !108, Evan Welsh]
      * Make GC much more aggressive [#62, !50, Giovanni Campagna, Georges Basile
        Stavracas Neto, Philip Chimento]
      * Queue GC when a GObject reference is toggled down [#140, !114, !127, Georges
        Basile Stavracas Neto]
      * overrides: support Gtk template callbacks [!124, Andy Holmes]
      * Ensure not to miss the force_gc flag [#150, !132, Carlos Garnacho]
      * Create a flatpak on CI [#153, !135, Claudio André]
      * Readme update [!138, Claudio André]
  • 1.52.3
    Version 1.52.3
    - Closed bugs and merge requests:
      * Include calc.js example from Seed [!130, William Barath, Philip Chimento]
      * CI: Un-pin the Fedora Docker image [#141, !131, Claudio André]
      * Reduce overhead of wrapped objects [#142, !121, Carlos Garnacho, Philip
      * Various CI changes [!134, !136, Claudio André]
  • 1.52.2
    Version 1.52.2
    - This is an unscheuled release in order to revert a commit that causes a crash
      on exit, with some Cairo versions.
    - Closed bugs and merge requests:
      * CI: pinned Fedora to old tag [!119, Claudio André]
      * adjust terminal output style [!120, Andy Holmes]
      * CI: small tweaks [!123, Claudio André]
      * Warn about compilation warnings [!125, Claudio André]
      * Miscellaneous commits [Philip Chimento, Jason Hicks]
  • 1.52.1
    Version 1.52.1
    - This version has more changes than would normally be expected from a stable
      version. The intention of 1.52.1 is to deliver a version that runs cleaner
      under performance tools, in time for the upcoming GNOME Shell performance
      hackfest. We also wanted to deliver a stable CI pipeline before branching
      GNOME 3.28 off of master.
    - Claudio André's work on the CI pipeline deserves a spotlight. We now have
      test jobs that run linters, sanitizers, Valgrind, and more; the tests are
      run on up-to-date Docker images; and the reliability errors that were plaguing
      the test runs are solved.
    - In addition to System.dumpHeap(), you can now dump a heap from a running
      Javascript program by starting it with the environment variable
      GJS_DEBUG_HEAP_OUTPUT=some_name, and sending it SIGUSR1.
    - is a tool in the repository (not installed in distributions) for
      analyzing and graphing heap dumps, to aid with tracking down memory leaks.
    - The linter CI jobs will compare your branch against GNOME/gjs@master, and fail
      if your branch added any new linter errors. There may be false positives, and
      the rules configuration is not perfect. If that's the case on your merge
      request, you can skip the appropriate linter job by adding the text
      "[skip (linter)]" in your commit message: e.g., "[skip cpplint]".
    - We welcomed first merge requests from several new contributors for this
    - Closed bugs and merge requests:
      * Crash when resolving promises if exception is pending [#18, !95, Philip
      * gjs_byte_array_get_proto(JSContext*): assertion failed: (((void) "gjs_"
        "byte_array" "_define_proto() must be called before " "gjs_" "byte_array"
        "_get_proto()", !v_proto.isUndefined())) [#39, !92, Philip Chimento]
      * Tools for examining heap graph [#116, !61, !118, Andy Holmes, Tommi
        Komulainen, Philip Chimento]
      * Run analysis tools to prepare for release [#120, !88, Philip Chimento]
      * Add support for passing flags to Gio.DBusProxy in makeProxyWrapper [#122,
        !81, Florian Müllner]
      * Cannot instantiate Cairo.Context [#126, !91, Philip Chimento]
      * GISCAN GjsPrivate-1.0.gir fails [#128, !90, Philip Chimento]
      * Invalid read of g_object_finalized flag [#129, !117, Philip Chimento]
      * Fix race condition in coverage file test [#130, !99, Philip Chimento]
      * Linter jobs should only fail if new lint errors were added [#133, !94,
        Philip Chimento]
      * Disable all tests that depends on X if there is no XServer [#135, !109,
        Claudio André]
      * Pick a different C++ linter [#137, !102, Philip Chimento]
      * Create a CI test that builds using autotools only [!74, Claudio André]
      * CI: enable ASAN [!89, Claudio André]
      * CI: disable static analysis jobs using the commit message [!93, Claudio
      * profiler: Don't assume layout of struct sigaction [!96, James Cowgill]
      * Valgrind [!98, Claudio André]
      * Robustness of CI [!103, Claudio André]
      * CI: make a separate job for installed tests [!106, Claudio André]
      * Corrected Markdown format and added links to JHBuild in setup guide for GJS
        [!111, Avi Zajac]
      * Update tweener.js -- 48 eslint errors fixed [!112, Karen Medina]
      * Various maintenance [!100, !104, !105, !107, !110, !113, !116, Claudio
        André, Philip Chimento]
  • 1.52.0
    Version 1.52.0
    - No changes from 1.51.92 except for the continuous integration configuration.
    - Closed bugs and merge requests:
      * Various CI improvements [!84, !85, !86, !87, Claudio André]
  • 1.51.92
    Version 1.51.92
    - Closed bugs and merge requests:
      * abort if we are called back in a non-main thread [#75, !72, Philip Chimento]
      * 3.27.91 build failure on debian/Ubuntu [#122, !73, Tim Lunn]
      * Analyze project code quality with Code Climate inside CI [#10, !77, Claudio
      * Various CI improvements [!75, !76, !79, !80, !82, !83, Claudio André]
  • 1.51.91
    Version 1.51.91
    - Promises now resolve with a higher priority, so asynchronous code should be
      faster. [Jason Hicks]
    - Closed bugs and merge requests:
      * New build 'warnings' [#117, !62, !63, Claudio André, Philip Chimento]
      * Various CI maintenance [!64, !65, !66, Claudio André, Philip Chimento]
      * profiler: Don't include alloca.h when disabled [!69, Ting-Wei Lan]
      * GNOME crash with fatal error "Finalizing proxy for an object that's
        scheduled to be unrooted: Gio.Subprocess" in gjs [#26, !70, Philip Chimento]
  • 1.51.90
    Version 1.51.90
    - Note that all the old Bugzilla bug reports have been migrated over to GitLab.
    - GJS now, once again, includes a profiler, which outputs files that can be
      read with sysprof. To use it, simply run your program with the environment
      variable GJS_ENABLE_PROFILER=1 set. If your program is a JS script that is
      executed with the interpreter, you can also pass --profile to the
      interpreter. See "gjs --help" for more info.
    - New API: For programs that want more control over when to start and stop
      profiling, there is new API for GjsContext. When you create your GjsContext
      there are two construct-only properties available, "profiler-enabled" and
      "profiler-sigusr2". If you set profiler-sigusr2 to TRUE, then the profiler
      can be started and stopped while the program is running by sending SIGUSR2 to
      the process. You can also use gjs_context_get_profiler(),
      gjs_profiler_set_filename(), gjs_profiler_start(), and gjs_profiler_stop()
      for more explicit control.
    - New API: GObject.signal_connect(), GObject.signal_disconnect(), and
      GObject.signal_emit_by_name() are now available in case a GObject-derived
      class has conflicting connect(), disconnect() or emit() methods.
    - Closed bugs and merge requests:
      * Handle 0-valued GType gracefully [#11, !10, Philip Chimento]
      * Profiler [#31, !37, Christian Hergert, Philip Chimento]
      * Various maintenance [!40, !59, Philip Chimento, Giovanni Campagna]
      * Rename GObject.Object.connect/disconnect? [#65, !47, Giovanni Campagna]
      * Better debugging output for uncatchable exceptions [!39, Simon McVittie]
      * Update Docker images and various CI maintenance [!54, !56, !57, !58,
        Claudio André]
      * Install GJS suppression file for Valgrind [#2, !55, Philip Chimento]
  • 1.50.4
    Version 1.50.4
    - Closed bugs and merge requests:
      * Gnome Shell crash with places-status extension when you plug an USB device
        [#33, !38, Philip Chimento]
  • 1.50.3
    Version 1.50.3
    - GJS will now log a warning when a GObject is accessed in Javascript code
      after the underlying object has been freed in C. (This used to work most of
      the time, but crash unpredictably.) We now prevent this situation which, is
      usually caused by a memory management bug in the underlying C library.
    - Closed bugs and merge requests:
      * Add checks for GObjects that have been finalized [#21, #23, !25, !28, !33,
        Marco Trevisan]
      * Test "Cairo context has methods when created from a C function" fails [#27,
        !35, Valentín Barros]
      * Various fixes from the master branch for rare crashes [Philip Chimento]