Skip to main content

Project Structure

Every Oidis project follows the same directory layout. Understanding this structure is the first step to navigating any codebase.

Root Directory​

io-oidis-yourproject/
├── bin/
│ └── project/
│ ├── configs/ # JSONP configuration files
│ │ ├── commons.jsonp # Runtime config (DB, auth, etc.)
│ │ ├── licensesRegister.jsonp
│ │ └── package.conf.schema.jsonp
│ └── solutions/ # Build variants
│ ├── static/
│ └── shared/
├── dependencies/ # Cloned Oidis dependencies (gitignored)
│ ├── io-oidis-commons/
│ ├── io-oidis-hub/
│ ├── io-oidis-hub-gui/
│ └── ...
├── resource/ # Static resources
│ ├── sass/ # SCSS stylesheets
│ ├── template/ # Bootstrap theme, CSS/JS bundles
│ ├── data/ # JSONP data files
│ ├── graphics/ # SVG, PNG, favicon
│ ├── javascript/ # Loader.js, global scripts
│ └── libs/ # Fonts, third-party assets
├── source/ # Source code
│ ├── typescript/ # TypeScript source
│ ├── html/ # HTML templates, .bsdesign files
│ └── docker/ # Docker build configs
├── test/ # Tests
│ ├── unit/ # Unit tests
│ ├── selenium/ # Browser tests
│ └── resource/ # Test data
├── build/ # Build output (gitignored)
├── package.conf.jsonp # Project config (source of truth)
├── LICENSE.txt # BSD-3-Clause
├── README.md # Project readme
├── package.json # Generated — DO NOT EDIT
├── tsconfig.json # Generated — DO NOT EDIT
└── webpack.config.js # Generated — DO NOT EDIT

Source Code Layout​

The TypeScript source follows the namespace convention Io/Oidis/[LibraryName]/:

source/typescript/Io/Oidis/YourProject/
│
├── Models/ # Backend models (@Entity + BaseModel)
│ └── Converters/ # Model converters (Ref, Inclusion)
│
├── Utils/ # Backend services
│ ├── AuthManager.ts # Authorization manager
│ └── BusinessManager.ts # Core business logic
│
├── Connectors/ # Backend external integrations
│ └── ExternalAPIConnector.ts
│
├── HttpProcessor/
│ └── Resolvers/ # Backend HTTP resolvers
│ └── FrontEndLoader.ts # HTML shell generator
│
├── Interfaces/ # Shared TypeScript interfaces
│ └── IProject.ts
│
├── Loader.ts # Backend entry point
├── ForceCompile.ts # Backend compile manifest
│
└── Gui/ # ═══ Frontend (Browser) ═══
│
├── Models/ # Frontend models (mirror backend)
│ └── Converters/ # FE-specific converters
│
├── Pages/ # Page layouts (tab configs)
│ └── MainPage.ts
│
├── Panels/ # Panel views (HTML + components)
│ ├── DashboardPanel.ts
│ ├── UsersPanel.ts
│ └── SettingsPanel.ts
│
├── Controllers/
│ ├── Pages/ # Page controllers
│ │ └── MainPageController.ts
│ └── Panels/ # Panel controllers
│ ├── DashboardPanelController.ts
│ ├── UsersPanelController.ts
│ └── SettingsPanelController.ts
│
├── Connectors/ # Frontend RPC connectors
│ └── BusinessManagerConnector.ts
│
├── Stores/ # Singleton state stores
│ └── SessionStore.ts
│
├── UserControls/ # Custom table items, components
│ └── UsersTable.ts
│
├── Dialogs/ # Reusable dialog components
│ └── ConfirmDialog.ts
│
├── Bindings/ # Custom binding helpers
│ └── CustomValidation.ts
│
├── Loader.ts # Frontend entry point
└── ForceCompile.ts # Frontend compile manifest

Key Files Explained​

Configuration Files​

FileLocationPurpose
package.conf.jsonpRootProject identity, dependencies, build settings
commons.jsonpbin/project/configs/Runtime config (DB, auth, email)
licensesRegister.jsonpbin/project/configs/Software Content Register

Entry Points​

FileSidePurpose
Loader.tsBackendBootstrap — registers connectors, symbol mappings
Gui/Loader.tsFrontendBootstrap — registers GUI classes
ForceCompile.tsBackendEnsures dynamic classes are compiled
Gui/ForceCompile.tsFrontendEnsures dynamic GUI classes are compiled

Generated Files (Never Edit)​

FileGenerated From
package.jsonpackage.conf.jsonp → npm dependencies
tsconfig.jsonDependency tree → paths aliases
webpack.config.jsSASS alias resolution
.gitignorePartially generated (manual section at end is editable)

Resource Directory​

resource/
├── sass/Io/Oidis/[LibraryName]/
│ ├── reference.d.scss # SCSS type references
│ ├── GeneralVariables.d.scss # Shared SCSS variables
│ └── Pages/ # Per-page stylesheets
├── template/Io/Oidis/[LibraryName]/
│ ├── _variables-override.scss # Bootstrap theme overrides
│ └── theme.min.css # Compiled theme (committed)
├── data/Io/Oidis/[LibraryName]/
│ └── FAQData.jsonp # JSONP data files
├── graphics/Io/Oidis/[LibraryName]/
│ ├── logo.svg # SVG logos
│ └── favicon.ico # Favicon
├── javascript/Io/Oidis/[LibraryName]/
│ └── Loader.js # Global error handler
└── libs/
└── fonts/ # Web fonts (WOFF2)

The Dependencies Directory​

dependencies/ contains cloned Oidis packages (git repos). This directory is gitignored — it's populated by oidis install.

dependencies/
├── io-oidis-commons/ # Core utilities, BaseModel, decorators
├── io-oidis-services/ # Backend services, DAO
├── io-oidis-gui/ # BasePanel, EventsBinding, GuiCommons
├── io-oidis-usercontrols/ # Button, TextField, Table, etc.
├── io-oidis-localhost/ # @Extern, @Route, local connectors
├── io-oidis-hub/ # Hub backend (AuthManager, SystemLog)
└── io-oidis-hub-gui/ # Hub frontend (BasePanelController, Convert)

Each dependency has the same structure as your project — you can explore them to understand framework internals.

Naming Patterns​

What You SeeWhat It Is
*Panel.tsUI view component (HTML template)
*PanelController.tsUI logic (events, validation, data)
*Page.tsPage layout (tab configuration)
*PageController.tsPage-level controller
*Connector.tsRPC connector (FE or BE)
*Manager.tsBackend service class
*Record.tsData model
*Store.tsFrontend state singleton
*Table.ts / *TableItem.tsCustom table + row component
*Converter.tsModel property converter
*Test.tsTest class
Loader.tsBootstrap entry point
ForceCompile.tsDynamic class manifest

Next: Try your First Build to see the project compile and run.


See also: First Build | Architecture Overview