{"id":40699393,"url":"https://github.com/joular/joularcore","last_synced_at":"2026-02-24T11:13:27.167Z","repository":{"id":328223655,"uuid":"1072209222","full_name":"joular/joularcore","owner":"joular","description":"Joular Core is a platform to measure power and energy across all systems, OSes and devices","archived":false,"fork":false,"pushed_at":"2026-02-19T21:17:58.000Z","size":2081,"stargazers_count":19,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-02-20T00:54:19.169Z","etag":null,"topics":["energy","green","joular","joular-core","joularcore","power","rust","software"],"latest_commit_sha":null,"homepage":"https://www.noureddine.org/research/joular/joularcore","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joular.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-08T12:08:27.000Z","updated_at":"2026-02-19T22:20:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/joular/joularcore","commit_stats":null,"previous_names":["joular/joularcore"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/joular/joularcore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fjoularcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fjoularcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fjoularcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fjoularcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joular","download_url":"https://codeload.github.com/joular/joularcore/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fjoularcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29780604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T10:45:18.109Z","status":"ssl_error","status_checked_at":"2026-02-24T10:45:09.911Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["energy","green","joular","joular-core","joularcore","power","rust","software"],"created_at":"2026-01-21T12:00:23.585Z","updated_at":"2026-02-24T11:13:27.137Z","avatar_url":"https://github.com/joular.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ca href=\"https://www.noureddine.org/research/joular/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/joular/.github/main/profile/joular.png\" alt=\"Joular Project\" width=\"64\" /\u003e\u003c/a\u003e Joular Core :zap:\r\n\r\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue)](https://www.gnu.org/licenses/gpl-3.0) ![Made with Rust](https://img.shields.io/badge/Made%20with-Rust-2b2b2b?logo=rust\u0026logoColor=white)\r\n\r\n![Joular Core Logo](joularcore.png)\r\n\r\nJoular Core is a platform to measure power and energy across all systems and devices.\r\n\r\nDetailed documentation (including user and reference guides) are available at: [https://joular.github.io/joularcore/](https://joular.github.io/joularcore/).\r\n\r\n## :satellite: Supported platforms\r\n\r\n- 💻 **Supported Systems**: 🐧 Linux, 🪟 Windows, 🍎 MacOS, 🍓 Raspberry Pi, 💽 Virtual Machines.\r\n- ⚙️ **Supported Architectures**: x86_64 (amd64), x86/i686, aarch64, arm, armv7, GPUs (Nvidia, Apple, AMD).\r\n\r\n*Note: Joular Core is still under heavy development, in alpha quality. Expect bugs and still under-development features.*\r\n\r\n#### 🌍 **Universal Compatibility**:\r\n\r\n**CPU:**\r\n\r\n| OS                              | x86_64 | i686 | Apple Silicon | arm  | armv7 | aarch64 |\r\n|---------------------------------|--------|------|---------------|------|-------|---------|\r\n| Windows                         | 🌟     | 🌟   |               |      |       |         |\r\n| Linux                           | 🌟     | 🌟   |               |      |       |         |\r\n| macOS                           | 🌟     |      | 🌟            |      |       |         |\r\n| SBC (Raspberry Pi)              |        |      |               | 🌟   | 🌟    | 🌟      |\r\n| Virtual Machines                | 🌟     | 🌟   | 🌟            | 🌟   | 🌟    | 🌟      |\r\n\r\n**GPU:**\r\n\r\n| OS                           | Nvidia GPU | AMD GPU | Apple GPU |\r\n|------------------------------|------------|---------|-----------|\r\n| Windows                      | 🌟         | 🌟      |           |\r\n| Linux                        | 🌟         | 🌟      |           |\r\n| macOS                        |            |         | 🌟        |\r\n| SBC (Raspberry Pi)           |            |         |           |\r\n| Virtual Machines             | 🌟         | 🌟      | 🌟        |\r\n\r\n**Supported SBC platforms**: Raspberry Pi (models: Zero W, 1 B, 1 B+, 2 B, 3 B, 3 B+, 4 B, 400, 5 B), Asus Tinker Board S.\r\n\r\n## :rocket: Features\r\n\r\n- 📊 Monitor power consumption of CPU and GPU of PCs, servers, and single-board computers\r\n- 🌐 Monitor inside virtual machines\r\n- 🔍 Monitor individual processes and multi-process applications on all platforms and OSes\r\n- 📈 Expose power consumption to the terminal, CSV files, to a ring buffer (in multiple modes), and through an API with an HTTP server or WebSockets.\r\n- ⚙️ Expose specific hardware component power consumption (CPU, GPU or all)\r\n- ⌨️ Provide a command-line interface (CLI)\r\n- 🎨 Provide a multi-platform graphical user interface (GUI) to display power consumption\r\n- ⚙️ systemd service (daemon) to continuously \u0026 automatically monitor power on Linux\r\n- ⚡ Low overhead (written in Rust and compiled to native code)\r\n\r\n#### Cross-OS Command-Line Interface:\r\n\r\n\u003cimg src=\"img/joularcore-windows-cli.png\" width=\"500\"\u003e\r\n\r\n\u003cimg src=\"img/joularcore-linux-cli.png\" width=\"500\"\u003e\r\n\r\n\u003cimg src=\"img/joularcore-macos-cli.png\" width=\"500\"\u003e\r\n\r\n\u003cimg src=\"img/joularcore-rpi3.png\" width=\"500\"\u003e\r\n\r\n#### Cross-OS GUI:\r\n\r\n\u003cimg src=\"img/new-gui-windows-1.png\" width=\"250\"\u003e\r\n    \r\n\u003cimg src=\"img/new-gui-windows-2.png\" width=\"250\"\u003e\r\n\r\n\u003cimg src=\"img/new-gui-macos-1.png\" width=\"250\"\u003e\r\n    \r\n\u003cimg src=\"img/new-gui-macos-2.png\" width=\"250\"\u003e\r\n\r\n\u003cimg src=\"img/new-gui-linux-1.png\" width=\"250\"\u003e\r\n    \r\n\u003cimg src=\"img/new-gui-linux-2.png\" width=\"250\"\u003e\r\n\r\n\u003cimg src=\"img/joularcore-rpi1.png\" width=\"250\"\u003e\r\n    \r\n\u003cimg src=\"img/joularcore-rpi2.png\" width=\"250\"\u003e\r\n    \r\n#### Process monitoring:\r\n\r\n\u003cimg src=\"img/joularcore-pid-monitoring.png\" width=\"500\"\u003e\r\n    \r\n#### Multi-process application monitoring:\r\n\r\n\u003cimg src=\"img/joularcore-app-monitoring.png\" width=\"500\"\u003e\r\n\r\n#### Other features\r\n\r\n\u003cimg src=\"img/joularcore-windows-cli-numeric.png\" width=\"500\"\u003e\r\n\r\n\u003cimg src=\"img/joularcore-windows-cli-csv.png\" width=\"500\"\u003e\r\n\r\n## :package: Building \u0026 Compiling\r\n\r\nJoular Core is written in Rust and uses Cargo for compilation.\r\n\r\n#### Default build:\r\n\r\n```bash\r\ncargo build --release\r\n```\r\n\r\nThis will build Joular Core with the virtual machine and GUI features, but not with SBC support.\r\n\r\n#### SBC (Raspberry Pi) build:\r\n\r\n```bash\r\ncargo build --release --features sbc\r\n```\r\n\r\nThis will build Joular Core with the virtual machine and GUI features, and with SBC support.\r\n\r\n\r\n#### Feature selection:\r\n\r\nYou can build Joular Core with or without virtual machine support or the GUI.\r\nFor instane, this is useful when you don't need the GUI (*i.e.*, in server environments) and want to build a smaller binary.\r\n\r\n```bash\r\ncargo build --release --no-default-features\r\n```\r\n\r\n⚙️ **Available Features:**\r\n\r\n- `vm` *(default: ON)*: Enables support for monitoring inside virtual machines.\r\n- `api` *(default: OFF)*: Enables support for the API with an HTTP server or WebSockets. Exporting power data to CSV files or to a ring buffer is enabled by default regardless of this feature.\r\n- `gui` *(default: ON)*: Compiles the application with the graphical user interface.\r\n- `sbc` *(default: OFF)*: Enables support for monitoring on single-board computers (*e.g.*, Raspberry Pi) running Linux.  \r\n  - This disables RAPL-based monitoring and uses our SBC-specific power models.\r\n\r\nYou can mix and match features, for example:\r\n```bash\r\n# No GUI, but with VM\r\ncargo build --release --no-default-features --features vm\r\n\r\n# No GUI, no VM, but with SBC\r\ncargo build --release --no-default-features --features sbc\r\n\r\n# No VM, but with GUI and SBC\r\ncargo build --release --no-default-features --features gui,sbc\r\n```\r\n\r\n#### Cross-Compilation\r\n\r\nTo cross-compile, use `cargo-make` with one of the targets defined in `Makefile.toml`.\r\n\r\nFor example, to build for all supported Raspberry Pi architectures (`aarch64`, `arm`, `armv7`):\r\n\r\n```bash\r\ncargo make build-sbc\r\n```\r\n\r\nWith the proper Rust targets installed, you can hence cross-compile on all architectures and operating systems.\r\n\r\n## :bulb: Configuration\r\n\r\nOn all platforms (except virtual machines), Joular Core will work automatically without any specific settings or configuration.\r\nJoular Core will detect the platform, collect relevant power and CPU usage data, and display power consumption for CPU and supported GPUs.\r\n\r\n### Dependencies\r\n- **Linux (PC, servers)**: Requires the RAPL interface for CPU power readings. RAPL files are usually readable only by the administrator, so you must either grant read access to these files or run Joular Core with sudo. [More information in this issue](https://github.com/joular/joularcore/issues/12).\r\n- **Windows**: a RAPL driver. We currently support [Hubblo's RAPL driver](https://github.com/hubblo-org/windows-rapl-driver). The easiest way to install a signed version of the driver is to install the [Scaphandre](https://github.com/hubblo-org/scaphandre) tool from [this installer](https://github.com/hubblo-org/scaphandre/releases/download/v1.0.0/scaphandre_v1.0.0_installer.exe).\r\n- **macOS**: no dependencies required 😇 Uses powermetrics (already installed by default).\r\n- Raspberry Pi: No dependencies required 😇\r\n\r\n### Virtual Machines\r\n\r\nFor virtual machines, two environment variables must be set depending on whether you want to monitor the CPU, the GPU, or both:\r\n- `VM_CPU_POWER_FILE`: Path to the CPU power data file\r\n- `VM_CPU_POWER_FORMAT`: Format of the CPU power data (`joularcore`  or `powerjoular` or `watts`, default is `watts` if not set)\r\n- `VM_GPU_POWER_FILE`: Path to the GPU power data file\r\n- `VM_GPU_POWER_FORMAT`: Format of the GPU power data (`joularcore` or `powerjoular` or `watts`, default is `watts` if not set)\r\n\r\n### Single-Board Computers (SBC)\r\n\r\nOn SBC (Raspberry Pi, Asus TinkerBoard), Joular Core uses our own regression models to calculate CPU power consumption.\r\nThese models are hard-coded in the code, but you can use your own models by supplying a JSON file with the model detail with the `SBC_POWER_MODEL_JSON` environmental variable.\r\nThe format needs to follow the one used in our [Power Models Database](https://github.com/joular/powermodels).\r\n\r\n### Options\r\n\r\n- `-p`, `--pid \u003cPID\u003e`              : Monitor a specific process by its PID\r\n- `-a`, `--app \u003cAPP\u003e`              : Monitor a specific application by its name (all PIDs)\r\n- `-f`, `--file \u003cFILE\u003e`            : Write output to CSV file\r\n- `-c`, `--component \u003cCOMPONENT\u003e`  : Monitor only specific component (values: `cpu`, `gpu`)\r\n- `-i`, `--numeric`                : Output only numeric value (no formatting)\r\n- `-o`, `--overwrite`              : Overwrite file instead of append (only with -f)\r\n- `-g`, `--gui`                    : Start GUI interface\r\n- `-r`, `--ringbuffer`             : Send power data to ring buffer\r\n- `-h`, `--help`                   : Print help\r\n- `-V`, `--version`                : Print version\r\n\r\n### Graphical user interface (GUI)\r\n\r\nJoular Core is also available with a graphical user interface (GUI), which works seamlessly and in a coherent way across all platforms and operating systems.\r\nMost functionalities of Joular Core can be executed from the GUI, such as monitoring a specific process or a specific application, or writing to a CSV file.\r\nThe GUI also supports the same CLI arguments as the terminal version, such as exporting data to an HTTP API/sockets.\r\n\r\nTo run the GUI, either:\r\n- Start Joular Core with the `-g` or `--gui` argument.\r\n- Use the specific GUI binary directly (double click for instance): `joularcoregui` or `joularcoregui.exe` (on Windows).\r\n\r\n### Shared memory ring buffer\r\n\r\nJoular Core output power data to the terminal and to CSV files, but it can also write this data to a shared memory ring buffer, on all OSes.\r\nThis allows much faster communication and sharing power data between Joular Core and other programs.\r\n\r\nDefault ring buffer paths are:\r\n- `/dev/shm/joularcorering` on Linux\r\n- `/tmp/joularcorering` on macOS\r\n- `Local\\\\JoularCoreRing` on Windows\r\n\r\nThe ring buffer have a size of 5 data stuctures with the following values (by order): `CPU power`, `GPU power`, `Total power`, `CPU usage`, and `PID or APP power`.\r\nUnavailable values, such as when monitoring entire CPU and not a specific application, will be at 0.\r\n\r\n### HTTP and WebSockets API\r\n\r\nJoular Core can expose power data through an HTTP server or WebSockets.\r\nTo use this API, you need to enable the `api` feature when building Joular Core.\r\n\r\nTo run Joular Core and export data through the API, use the `--api-port` option to specify the port for the HTTP and WebSockets server endpoint. For example:\r\n```bash\r\njoularcore --api-port 8080\r\n```\r\n\r\nThe API will expose the following endpoints:\r\n- `/data`: HTTP endpoint to get the latest power data\r\n- `/ws`: WebSockets endpoint for real-time power data\r\n\r\nThe API exposes data in JSON format:\r\n- `cpu_power`: CPU power in Watts\r\n- `gpu_power`: GPU power in Watts\r\n- `total_power`: Total power in Watts\r\n- `cpu_usage`: CPU usage in percentage\r\n- `pid_or_app_power`: PID or application power in Watts (0 if option not selected)\r\n\r\n### 🟢 Systemd service on Linux\r\n\r\nA systemd service is provided and can be installed (by copying `joularcore.service` in `systemd` folder to `/etc/systemd/system/`).\r\nThe service will run the program with the `-o` option (which only saves the latest power data) and the `-f` option to save data to `/tmp/joularcore-service.csv`.\r\nThe service can be enabled to run automatically on boot.\r\n\r\n## :hourglass: Goals of Joular Core\r\n\r\nJoular Core is currently under development and aims to:\r\n- Replace our collection of energy and power measurement tools and software, in particular PowerJoular, WinPowerMonitor and MacPowerMonitor.\r\nWindows and macOS now support features previously exclusive to Linux in PowerJoular, including per-process and per-application monitoring, file exports, and a GUI interface.\r\n- Simplify and streamline cross-OS development with a unified code base in Rust, replacing our existing code in Ada (Linux), C++ (Windows) and Shell scripts (macOS).\r\n- Measure energy everywhere and anywhere, that is on all platforms, operating systems, architectures and hardware components (CPU, GPU, etc.).\r\n- Be the core foundation for source-code monitoring tools and profilers, containers and virtual machine monitoring, and be embedded in other monitoring and reporting tools, GUIs or dashboards.\r\n- Provide seamless features across all platforms, including a solid and reliable command-line tool, and an easy-to-use GUI.\r\n\r\n## :bookmark_tabs: Help needed!\r\n\r\nJoular Core is a free and open-source tool. We call for developers and researchers to contribute to the development, testing and using of this software.\r\nFeel free to provide pull requests, comments and ideas in our issue tracker, and report testing on various hardware platforms.\r\n\r\n## :newspaper: License\r\n\r\nJoular Core is licensed under the GNU GPL 3 license only (GPL-3.0-only).\r\n\r\nCopyright © 2025-2026, Adel Noureddine.\r\nAll rights reserved. This program and the accompanying materials are made available under the terms of the [GNU General Public License v3.0 (GPL-3.0-only)](https://www.gnu.org/licenses/gpl-3.0.en.html) which accompanies this distribution.\r\n\r\nAuthor : Prof. Adel Noureddine","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoular%2Fjoularcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoular%2Fjoularcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoular%2Fjoularcore/lists"}