The Python-Native In-Memory OLAP Engine.
A lightweight, high-performance alternative to IBM TM1, built on Python, Pandas, and FastAPI.
CubeOne is an open-source, in-memory multidimensional database (OLAP engine) built for the next generation of Financial Planning & Analysis (FP&A). It delivers a lightweight, programmable, Python-native solution that works seamlessly with Excel, empowering finance teams to move faster without sacrificing control.
Unlike traditional enterprise EPM platforms such as IBM TM1 or Oracle Hyperion, CubeOne is designed for flexibility, transparency, and modern development workflows:
-
High-Performance Vectorized Engine
Powered by Pandas vectorized calculations, CubeOne processes millions of records at exceptional speed. -
Multi-Instance by Design
A clean separation of application logic and data enables multiple business domains to run independently. Note: The Community Edition is optimized for single-user deployment and rapid prototyping. -
Developer-Friendly Architecture
Data is stored in open formats like JSON and Parquet, exposed through RESTful APIs for easy integration and automation. -
Open Source, Zero License Cost
No licensing fees, making CubeOne ideal for agile teams, rapid prototyping, and budget-conscious planning and forecasting initiatives.
CubeOne bridges the gap between Excel familiarity and Python-powered analyticsโunlocking a faster, smarter, and more open future for FP&A. ๐ซ
-
โก In-Memory Calculation Engine Sparse matrix storage built on Pandas Multi-Index, enabling real-time aggregation and consolidation.
-
๐งฎ Business Rules Engine Supports TM1-style rule syntax (e.g.
['Sales'] = ['Price'] * ['Units']), automatically compiled into vectorized Python code. -
๐ Stateless REST API Built with FastAPI, featuring a fully decoupled front-end and back-end architecture.
-
๐ Excel Client Powered by
xlwings, providing custom functions (M1_DIM_SET,M1_VIEW_READ๏ผetc.) to manage CubeOne components and read/write data directly from Excel. -
๐ก๏ธ Robust Design Includes built-in self-healing mechanisms, ordered CSV loading, and automatic alias cleanup.
-
๐ ETL Capabilities Supports server-side bulk CSV loading, column transformations, and flexible control over incremental or full overwrite modes.
-
Core Layer (
core.py) Calculation engine responsible for DataFrame joins, group-by operations, and rule-based calculations. -
Server Layer (
server.py) Resource management layer handling dimension and cube persistence, as well as ETL job scheduling. -
Interface Layer (
api.py) HTTP interface exposing Swagger/OpenAPI documentation.
CubeOne adopts a deployment architecture that separates the Application from the Data.
-
App Home (Read-Only): Contains source code (
app/, main.py`) and libraries. Shared by all instances.- Default Location:
C:\CubeOneor/opt/cubeone
- Default Location:
-
Instance Home (Read/Write): Contains business data (
.cub,.dim), configuration (cubeone.ini), and logs.- Example:
D:\Projects\Finance
- Example:
git clone https://github.com/smilingsand/CubeOne.git
cd <CubeOne_Image_Path>
pip install -r requirements.txt
We have prepared a sample "Finance" instance for you.
# Windows
cd <CubeOne_Image_Path>\samples\SalesPlan
python <CubeOne_Image_Path>\main.py --config cubeone.ini
# Linux/Mac
cd <CubeOne_Image_Path>/samples/SalesPlan
python3 <CubeOne_Image_Path>/main.py --config cubeone.ini
-
Swagger API: Open
http://127.0.0.1:8001/docs -
Excel Client: Open
client_app/cubeone_excel_sample.xlsm
- OS: Windows 10/11/Server or Linux.
- Python: 3.10+.
Bash
pip install fastapi,numpy,pandas,pydantic,Requests,starlette,uvicorn,xlwings
or
pip install -r requirements.txt
Copy the source code to your program directory (e.g., C:\CubeOne). Your directory structure should look like this:
Plaintext
C:\CubeOne\
โโโ main.py <-- Production Entry Point
โโโ app\ <-- Core Package
โ โโโ config.py
โ โโโ utils.py
โ โโโ rules.py
โ โโโ core.py
โ โโโ server.py
โ โโโ api.py
โ โโโ cubeone_excel.py
โโโ requirements.txt
โโโ client_app\ <-- Excel File Sample
โ โโโ cubeone_excel_sample.xlsm, *.xlsm
โโโ samples\ <-- Sample Instances
โโโ docs\
To run a specific business project (e.g., "Finance_Budget"), follow these steps:
Create a folder on your data drive, e.g., D:\Projects\Finance. Inside this folder, create subfolders: Data, Logs, Reports.
In D:\Projects\Finance, create a file named cubeone.ini with the following content:
Ini, TOML
[Instance]
name = Finance_Budget
[System]
# Listening Address: 0.0.0.0 allows LAN access; 127.0.0.1 limits to local machine only
host = 0.0.0.0
# Port must be unique for each instance (e.g., 8001 for Finance, 8002 for Sales)
port = 8001
[Storage]
# Path relative to this ini file
data_dir = ./Data
logs_dir = ./Logs
[Security]
auth_enabled = False
default_user = admin
Run main.py and point it to your configuration file.
Windows (Batch Script Example): Create Start_Server.bat in your instance folder:
DOS
@echo off
:: ==============================
:: 1. set environment variables
:: ==============================
:: set main program PATH
set APP_HOME=<path of main.py>
:: set Instance PATH
set CONF_PATH=<path of cubeone.ini>
:: ==============================
:: 2. Start Server
:: ==============================
title CubeOne Server - Loading...
echo Starting CubeOne Instance...
echo Program: %APP_HOME%
echo Config: %CONF_PATH%
echo ------------------------------
python "%APP_HOME%\main.py" --config "%CONF_PATH%"
pause
Linux:
Bash
python3 /opt/cubeone/main.py --config /var/data/finance/cubeone.ini
Open your browser and visit: http://127.0.0.1:8001/docs. If you see the Swagger UI, the instance is running successfully.
Note: please see file "CubeOne (Phase 2) - Installation and Configuration Manual (EN).docx" for more instructions.
-
Open Client:
Open cubeone_excel_sample.xlsm. -
Config Sheet: Go to the
Configsheet and setServer URLtohttp://127.0.0.1:8001. -
xlwings Setup:
-
In the Excel Ribbon, go to xlwings.
-
Set
PYTHONPATHto your App Home +appfolder (e.g.,C:\CubeOne\app). -
Set
UDF Modulestocubeone_excel. -
Click Import Functions.
-
CubeOne follows an Open Core strategy. We are committed to keeping the high-performance calculation engine open source forever.
| Feature | Community Edition | Commercial / Enterprise |
|---|---|---|
| In-Memory Calculation Engine | โ | โ |
| Stateless REST API | โ | โ |
| Excel Add-in (xlwings) | โ | โ |
| Web Management UI | ๐ง (Help Wanted!) |
๐๏ธ |
| Multi-User Concurrency & Locking | โ (Single User) | ๐๏ธ |
| User Authentication & RBAC | โ (Admin Only) | ๐๏ธ |
| More complex rules support and modern rule parser | โ | ๐ ๏ธ |
| Advanced Functions, like Data Spreading and Sandbox, etc | โ | ๐๏ธ |
| Audit Logs & Recovery | โ | ๐๏ธ |
| Technical Support | Community | SLA Support |
Legend:
- โ Ready: Fully implemented and production-ready.
- ๐ง In Development: Active work in progress. Contributions welcome!
- ๐ ๏ธ Roadmap Priority: Available first to Commercial Licensees.
- ๐๏ธ Planned: On the roadmap for future release.
- Web Management UI: We are launching a community-driven project to build the management console.
- More Connectors: Plugins to load data from SQL, CSV, and APIs.
- Performance Tuning: Continuous optimization of the Pandas-based engine.
While the Community Edition allows for powerful single-user analytics, organizations requiring AGPL-exemption, SLA Support, or prioritizing features like Multi-User Concurrency on the roadmap can purchase a Commercial License.
Commercial licensees gain priority influence over the development roadmap.
We welcome contributions! Please read our Contribution Guidelines first to understand the project structure and restricted features.
To maintain the stability of the Community Edition and the viability of the project, please follow these guidelines:
-
Web UI: We have separated the UI into a dedicated repository. Please contribute here: CubeOne-WebUI Repository Link.
-
Core Engine: We gladly accept Bug Fixes, Performance Improvements, and Connectors.
-
Feature Restrictions: Please DO NOT submit PRs related to Multi-user Concurrency, Locking Mechanisms, or Auth Layers. These features are reserved for the Enterprise Edition roadmap. Such PRs will be closed to avoid licensing conflicts.
Click here to view the Web UI Recruitment Plan
CubeOne is open-source software licensed under the GNU Affero General Public License v3.0 (AGPLv3).
You are free to download, use, and modify CubeOne for personal projects, academic research, or internal testing. If you distribute your modified version or provide it as a network service (SaaS), you must open-source your code under AGPLv3.
If you wish to use CubeOne in a proprietary (closed-source) commercial product, or if you cannot comply with the open-source requirements of AGPLv3, you must obtain a Commercial License.
Commercial licensing options allow you to:
-
Embed CubeOne into your proprietary software.
-
Distribute your software without releasing your source code.
-
Receive official technical support.
๐ผ Commercial Inquiries
For commercial licensing, please reach out to me on LinkedIn or email me at: >
chris.derong.wang @ outlook [dot] com.

