# Description of Changes Combine the Policies and Pipelines pages into one, so we have the new concept of Policies as Pipelines that always run which the user cannot disable. What used to be Policies are now referred to as Templates, and they allow you to create a new Pipeline more easily with the simple UI. There's followup work to be done here to improve the template UIs because they've not been touched in a long time, but I've considered that beyond the scope of this merge. The only real changes I've made to them in this PR is that they have a toggle for whether they're policies, they now have a "Customise" button to kick you into the full Pipeline editor, and I've removed the source selection. Previously, they supported selecting as many sources as you liked, but that feature never worked and is incompatible with the backend as it stands now, which only allows for one source. Because of that, I've made it so that they can only run in editor unless you open them in the custom pipeline editor, where you can switch out which source it will use. There's also another bit of followup to rename and remove all the previous Policies code. Now that they've been combined into one, we don't need a lot of the Policies code anymore, but also there's about 300 files in the frontend referencing policies in text/comments which need to be updated to say pipelines. This is way more work than is reasonable to do in this PR so I'll just do it in a new PR. ## Limitations This PR is about the merging of the old Policies and Pipelines and I'm considering enforcing the new definition of a Policy where it's only modifiable by admins beyond the scope of this PR. <img width="756" height="395" alt="image" src="https://github.com/user-attachments/assets/d31be5ce-f1c9-46b3-8e8d-866e63f89a81" /> <img width="1507" height="793" alt="image" src="https://github.com/user-attachments/assets/9ba8875f-8be5-4881-91cf-40e0bc1076dc" /> <img width="1508" height="787" alt="image" src="https://github.com/user-attachments/assets/3e1da77b-a0c0-4262-aad3-16650098db81" /> --------- Co-authored-by: EthanHealy01 <80844253+EthanHealy01@users.noreply.github.com>
Frontend
All frontend commands are run from the repository root using Task:
task frontend:dev— start Vite dev server (localhost:5173)task frontend:build— production buildtask frontend:test— run teststask frontend:test:watch— run tests in watch modetask frontend:lint— run lintingtask frontend:typecheck— run TypeScript type checkingtask frontend:check— run typecheck + lint + testtask frontend:install— install npm dependencies
For desktop app development, see the Tauri section below.
Layout
frontend/ is a workspace containing one or more apps. Today it holds the
PDF editor under frontend/editor/; new apps (the developer portal, etc.)
will sit alongside it as siblings. Shared tooling — package.json, node_modules,
.storybook/, oxlint, oxfmt — lives at frontend/ so every app installs
once and lints with the same config.
Environment Variables
The editor's environment variables live in committed .env files at
frontend/editor/:
.env— used by all builds (core, proprietary, and as the base for desktop/SaaS).env.desktop— additional vars loaded in desktop (Tauri) mode.env.saas— additional vars loaded in SaaS mode
These files contain non-secret defaults and are checked into Git, so most dev work needs no further setup.
To override values locally (API keys, machine-specific settings), create an uncommitted sibling editor/.env.local / editor/.env.desktop.local / editor/.env.saas.local. Vite automatically layers these on top of the committed files.
Docker Setup
For Docker deployments and configuration, see the Docker README.
Tauri
All desktop tasks are available via Task. From the root of the repo:
Dev
task desktop:dev
This ensures the JLink runtime and backend JAR exist (skipping if already built), then starts Tauri in dev mode.
Build
task desktop:build
This does a full clean rebuild of the backend JAR and JLink runtime, then builds the Tauri app for production.
Platform-specific dev builds are also available:
task desktop:build:dev # No bundling
task desktop:build:dev:mac # macOS .app bundle
task desktop:build:dev:windows # Windows NSIS installer
task desktop:build:dev:linux # Linux AppImage
JLink Tasks
You can also run JLink steps individually:
task desktop:jlink # Build JAR + create JLink runtime
task desktop:jlink:jar # Build backend JAR only
task desktop:jlink:runtime # Create JLink custom JRE only
task desktop:jlink:clean # Remove JLink artifacts
Clean
task desktop:clean
Removes all desktop build artifacts including JLink runtime, bundled JARs, Cargo build, and dist/build directories.