descriptiondconf mirror
homepage URLhttp://www.gnome.org
repository URLgit://git.gnome.org/dconf
ownerdmitrij.ledkov@ubuntu.com
last changeTue, 21 Aug 2018 21:47:12 +0000 (21 22:47 +0100)
last refreshWed, 22 Aug 2018 19:37:28 +0000 (22 21:37 +0200)
content tags
add:
README
dconf is a simple key/value storage system that is heavily optimised for
reading.  This makes it an ideal system for storing user preferences
(which are read 1000s of times for each time the user changes one).  It
was created with this usecase in mind.

All preferences are stored in a single large binary file.  Layering of
preferences is possible using multiple files (ie: for site defaults).
Lock-down is also supported.  The binary file for the defaults can
optionally be compiled from a set of plain text keyfiles.

dconf has a partial client/server architecture.  It uses D-Bus.  The
server is only involved in writes (and is not activated in the user
session until the user modifies a preference).  The service is
stateless and can exit freely at any time (and is therefore robust
against crashes).  The list of paths that each process is watching is
stored within the D-Bus daemon itself (as D-Bus signal match rules).

Reads are performed by direct access (via mmap) to the on-disk database
which is essentially a hashtable.  For this reason, dconf reads
typically involve zero system calls and are comparable to a hashtable
lookup in terms of speed.  Practically speaking, in simple non-layered
setups, dconf is less than 10 times slower than GHashTable.

Writes are not optimised at all.  On some file systems, dconf-service
will call fsync() for every write, which can introduce a latency of up
to 100ms.  This latency is hidden by the client libraries through a
clever "fast" mechanism that records the outstanding changes locally (so
they can be read back immediately) until the service signals that a
write has completed.

dconf mostly targets Free Software operating systems.  It will
theoretically run on Mac OS but there isn't much point to that (since
Mac OS applications want to store preferences in plist files).  It is
not possible to use dconf on Windows because of the inability to rename
over a file that's still in use (which is what the dconf-service does on
every write).

The dconf API is not particularly friendly.  Because of this and the
lack of portability, you almost certainly want to use some sort of
wrapper API around it.  The wrapper API used by Gtk+ and GNOME
applications is GSettings, which is included as part of GLib.  GSettings
has backends for Windows (using the registry) and Mac OS (using property
lists) as well as its dconf backend and is the proper API to use for
graphical applications.

dconf itself attempts to maintain a rather low profile with respect to
dependencies.  For the most part, there is only a dependency on GLib.

With the exception of the bin/ directory, dconf is written in C using
libglib.  This is a very strong dependency due to the fact that dconf's
type system is GVariant.

The dconf-service has a dependency on libgio, as do the client libraries
that make use of GDBus (and the utilities that make use of those
libraries).

The standard client library is libdconf (in client/).  If you can't use
GSettings then you should probably want to use this next.

There is also a libdbus-1 based library.  It does not depend on libgio,
but still depends on libglib.  It is not recommended to use this library
unless you have a legacy dependency on libdbus-1 (such as in Qt
applications).

bin/ is written in Vala, hence the Vala compiler is required.

Installing dconf follows the typical meson dance:

  meson builddir
  ninja -C builddir
  ninja -C builddir install

If you plan to contribute to dconf, please see the HACKING file.
shortlog
2018-08-21 Emmanuele BassiDeclare libdconf_service as a dependencymasterbf103302332603a637f1c33e603c93b82aa1dc0b
2018-08-21 Philip WithnallMerge branch '1454-gvdb-corruption' into 'master'a060755f30e5c89882b160e7f284eee003a960ec
2018-08-20 Philip Withnallservice: Rename a method to make its behaviour more... 8d76d4881f14af8a78029a89b43ce99cc558a65f8/head
2018-08-16 Philip Withnalltests: Port log message handling in tests to use struct... fc6852c47a65dfadf415a09706e3dadf97be5ec0
2018-08-16 Philip Withnalltests: Stop using deprecated g_test_trap_fork() API
2018-08-16 Philip Withnallbuild: Enable G_LOG_USE_STRUCTURED=1
2018-08-16 Philip Withnalltests: Add unit tests for some of service/dconf-writer.c
2018-08-16 Philip Withnallservice: Split most code into a static helper library
2018-08-16 Philip Withnallservice: Add some initial g_autoptr() support
2018-08-16 Philip Withnallservice: Allow opening corrupt GVDB files when writing
2018-08-16 Philip WithnallMerge branch 'wip/lantw/dont-hard-code-etc' into 'master'e960b50696b95f4b035787e9cbceaa549c172c91
2018-08-16 Ting-Wei LanReplace all hard-coded /etc path with sysconfdir46574fcc54eba3ed4245f85d2725c6ea019b39be21/head
2018-08-15 Philip WithnallMerge branch 'style/overflow-int' into 'master'a28fd39f780bbd6098a4852696de1a432b1a61c1
2018-08-14 Daniel Playfair CalEngine: Change overflow thresholds in subscription... 63c985f5afecc69eee3fe7a7e04cc8118097b3c320/head
2018-08-14 Daniel Playfair CalMerge branch 'revert-060b9a17' into 'master'24f89a956a22e140db8eca4abdf1338b5c3d4dd8
2018-08-14 Daniel Playfair CalRevert "Merge branch 'fix/build-gtk-doc' into 'master'"01cb4e826f16b5b274c4525d8ddc11703142db3d19/head
...
tags
5 years ago 0.29.1 Release dconf 0.29.1
6 years ago 0.28.0 dconf 0.28.0
6 years ago 0.27.1 dconf 0.27.1
6 years ago 0.26.1 0.26.1
8 years ago 0.26.0 dconf 0.26.0
8 years ago 0.25.1 dconf 0.25.1
9 years ago 0.24.0 dconf 0.24.0
9 years ago 0.23.2 dconf 0.23.2
9 years ago 0.23.1 dconf 0.23.1
9 years ago 0.22.0 dconf 0.22.0
9 years ago 0.21.0 dconf 0.21.1
10 years ago 0.20.0 dconf 0.20.0
10 years ago 0.19.92 dconf 0.19.92
10 years ago 0.19.91 dconf 0.19.91
10 years ago 0.19.90 dconf 0.19.90
10 years ago 0.19.3 dconf 0.19.3
...
heads
5 years ago master
5 years ago testing/add-service-cradle
5 years ago 1454-gvdb-corruption
6 years ago wip/inigomartinez/meson
6 years ago dconf-0.22
6 years ago dconf-0.26
7 years ago wip/apparmor
7 years ago wip/proxy
8 years ago dconf-0.14
8 years ago dconf-0.20
8 years ago dconf-0.16
8 years ago dconf-0-18
8 years ago wip/0-25-1
8 years ago wip/peruserprofile
8 years ago dconf-0.24
10 years ago wip/varlib
...