Cinnamon is composed a lot of smaller interconnected projects:
Cinnamon, forked from GNOME Shell, is the "shell" of Cinnamon. It provides the user interface such as
interpretation is done by SpiderMonkey. Instead, the role of Cjs is to provide bindings to GNOME libraries
through GObject Introspection.
Cinnamon Control Center
Cinnamon Control Center is a fork of GNOME Control Center. The official control center of Cinnamon in Cinnamon Settings, which is written in python and part of Cinnamon itself. However, some of the modules are still not yet ported to python, and we have to rely on the C modules, which are found here.
Cinnamon Desktop, fork of GNOME desktop, provides certain useful resources for Cinnamon. Most importantly,
it contains the schemas for most Cinnamon components, eg. `org.cinnamon.desktop.screensaver`. It also has a
small library that provides certain functions used in, say, Cinnamon Screensaver.
Cinnamon Menus, fork of GNOME menus, contains the
libcinnamon-menu library, the layout
configuration files for the Cinnamon menu, as well as a simple menu editor.
libcinnamon-menu library implements the "Desktop Menu Specification" from freedesktop.org:
Muffin, forked from Mutter, which is in turn forked from Metacity, is the window manager of Cinnamon.
Cinnamon is implemented as a plugin of Muffin.
Cinnamon Screensaver, forked from GNOME Screensaver, is the screen locker you see when you leave the session
idle for the a long time. It currently supports loading xscreensaver hacks as well as webkit screensaver.
You can also write your own Cinnamon Screensaver plugin without tying to either xscreensaver or webkit.
This is responsible for starting the Cinnamon session. This is typically executed by the login manager (either mdm, xdm, or from your X startup scripts). It will load either your saved session, or it will provide a default session for the user as defined by the system administrator (or the default GNOME installation on your system).
Cinnamon Settings Daemon
Cinnamon Settings Daemon is a fork of GNOME Settings Daemon.
It provides many session-wide services and functions that require a long-running process. Among the services implemented by cinnamon-settings-daemon are an XSettings manager, which provides theming, font and other settings to GTK+ applications, and a clipboard manager, which preserves clipboard contents when an application exits. Many user interface elements of cinnamon and cinnamon-settings rely on cinnamon-settings-daemon for their functionality.
The internal architecture of cinnamon-settings-daemon consists of a number of plugins, which provide functionality such as printer notifications, software update monitoring, background changing, etc. For debugging purposes, these plugins can be individually disabled by changing the gsettings key `org.cinnamon.settings-daemon.plugins.plugin-name.active`, where `plugin-name` is the name of the plugin. To see a list of all plugins, use the command `gsettings list-children org.cinnamon.settings-daemon.plugins`.
Cinnamon Settings Daemon takes the name `org.cinnamon.SettingsDaemon` on the session bus to ensure that only one instance is running. Some plugins export objects under this name to make their functionality available to other applications. The interfaces of these objects should generally be considered private and unstable.
Cinnamon Settings Daemon is a required component of the Cinnamon desktop, i.e. it is listed in the RequiredComponents field of `/usr/share/cinnamon-session/sessions/cinnamon.session`. It is started in the initialization phase of the session, and cinnamon-session will restart it if it crashes.
Modify your Cinnamon desktop environment and extend its features with Cinnamon Spices. Cinnamon supports the following types of spices: Themes, applets, desklets and extensions.
Cinnamon translations is a package that contains the translations used in Cinnamon