Development
Open Data Editor uses a client/server architecture wrapped into a desktop application. As a server, we use a Python codebase that uses frictionless-py for data and metadata processing. As a client, we use this codebase written in TypeScript that uses React for components and Zustand for state management. As a desktop wrapper, we use Electron for NodeJS.
Prerequisites
To start working on the project you need the following dependencies in your machine:
- Python 3.11+
- Node 20+
- python3.11-dev (For PyInstaller)
Enviroment
NPM is included into the Node distribution so we just need to install hatch:
pip3 install hatchPython
Before starting with the project we recommend configuring hatch. The following line will ensure that all the virtual environments will be stored in the .python directory in project root:
hatch config set 'dirs.env.virtual' '.python'
hatch shell # Enter the venvNow you can setup you IDE to use a proper Python path:
.python/opendataeditor/bin/pythonInstallation
To start working on the project install the dependencies:
make installJavaScript
We highly recommend enabling TypeScript checks for your IDE.
Codebase
Application
To work on the whole application:
make startNote that there are few CSV files in the data folder to test the app. You can find more in the internet (it’s good to test it using different files).
Server
Running the server in isolation:
make server # default folder
# OR
hatch run start <data-folder> # optionally provide a data folder pathClient
Running the client in isolation:
make client
# OR
npm run startDesktop
Previewing descript application:
make preview
# OR
npm run previewDocumentation
Documentation is written with Starlight (in the portal directory). The source articles are in the portal/content/docs directory. To start a live-reload server and work on the docs:
make docsIt will be automatically published on CloudFlare when merged to the main branch with previews available for pull requests.
Releasing
You need to be a maintainer to release a new version
- Update the version in package.jsonaccording to SemVer
- Create a pull request with the changes and get it approved and merged
- Run make releaselocally to create a new release