Build from source
Run FolioOrb as a local web app straight from the source: one setup script starts the
server and you use the dashboard in your browser at http://localhost:8000. It works on
macOS (Apple Silicon or Intel), Windows, and Linux with Python 3.11+ — no installer, no
account, nothing hosted. (You can also build the desktop installers yourself — see below.)
Run from source
Section titled “Run from source”git clone https://github.com/udhawan97/FolioOrb.gitcd FolioOrb./scripts/setup.shgit clone https://github.com/udhawan97/FolioOrb.gitcd FolioOrb.\scripts\setup.ps1The setup script creates a virtual environment, installs dependencies, writes a local
.env, prepares the database/ folder, and starts the app at http://localhost:8000.
For day-to-day use afterwards, run ./scripts/start.sh (or .\scripts\start.ps1).
Manual setup
Section titled “Manual setup”python3 -m venv venvsource venv/bin/activate # Windows: .\venv\Scripts\activatepython -m pip install --upgrade pippython -m pip install -r requirements.txtcp .env.example .env # Windows: copy .env.example .envpython run.pyOne-line install scripts
Section titled “One-line install scripts”For a quick source install without cloning manually, these download the latest release and set up a local environment. They’re short and readable — open them first (mac, win).
curl -fsSL https://raw.githubusercontent.com/udhawan97/FolioOrb/main/scripts/install-mac.sh | bashirm https://raw.githubusercontent.com/udhawan97/FolioOrb/main/scripts/install-win.ps1 | iexSet FOLIO_REF to install a specific v5.16.0 or newer tag, or the dev channel, e.g.
curl -fsSL https://raw.githubusercontent.com/udhawan97/FolioOrb/main/scripts/install-mac.sh | FOLIO_REF=latest-main bash
on macOS/Linux, or $env:FOLIO_REF = "latest-main" before the Windows command.
Unlike a manual clone, a one-line install stores its entire writable profile outside the
replaceable source directory. When upgrading an older source install, the installer uses
SQLite’s backup API to migrate the database together with .env, Backup Vault, settings,
backup policy, update state, and logs. It also retains the prior install as a recovery copy;
if both old and new profile locations already contain data, it stops without choosing or
overwriting either one.
Build the desktop installers
Section titled “Build the desktop installers”The DMG and EXE are produced by PyInstaller plus native installer tooling. You can reproduce a build locally on the matching OS.
# Both platforms: freeze the app (onedir bundle)python -m pip install -r requirements.txt -r requirements-desktop.txtpython -m PyInstaller packaging/pyinstaller/FolioOrb.spec
# macOS only: repair a PyInstaller BUNDLE quirk that can leave data-only# directories (static/, templates/, pytz's timezone data) as dangling# symlinks instead of real files — see the script for the full explanation.python packaging/pyinstaller/fix_macos_bundle_symlinks.py dist
# Sanity-check the frozen bundle boots# macOS: dist/FolioOrb.app/Contents/MacOS/FolioOrb --smoke# Windows: dist\FolioOrb\FolioOrb.exe --smokebrew install create-dmgmkdir -p dist/dmg-src && cp -R dist/FolioOrb.app dist/dmg-src/create-dmg \ --volname "FolioOrb" \ --volicon packaging/icons/FolioOrb.icns \ --app-drop-link 390 190 \ --icon "FolioOrb.app" 150 190 \ "dist/FolioOrb-macOS-arm64-local.dmg" "dist/dmg-src/"choco install innosetup -y& "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" ` /DMyAppVersion=5.16.1 ` /DMyOutputName=FolioOrb-Windows-x64-local-Setup ` packaging\windows\installer.issUseful local URLs
Section titled “Useful local URLs”| URL | Purpose |
|---|---|
http://localhost:8000 |
Dashboard |
http://localhost:8000/docs |
Interactive Swagger API docs |
http://localhost:8000/health |
Health check |