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
| File | Location | Purpose |
|---|---|---|
package.conf.jsonp | Root | Project identity, dependencies, build settings |
commons.jsonp | bin/project/configs/ | Runtime config (DB, auth, email) |
licensesRegister.jsonp | bin/project/configs/ | Software Content Register |
Entry Points
| File | Side | Purpose |
|---|---|---|
Loader.ts | Backend | Bootstrap — registers connectors, symbol mappings |
Gui/Loader.ts | Frontend | Bootstrap — registers GUI classes |
ForceCompile.ts | Backend | Ensures dynamic classes are compiled |
Gui/ForceCompile.ts | Frontend | Ensures dynamic GUI classes are compiled |
Generated Files (Never Edit)
| File | Generated From |
|---|---|
package.json | package.conf.jsonp → npm dependencies |
tsconfig.json | Dependency tree → paths aliases |
webpack.config.js | SASS alias resolution |
.gitignore | Partially 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 See | What It Is |
|---|---|
*Panel.ts | UI view component (HTML template) |
*PanelController.ts | UI logic (events, validation, data) |
*Page.ts | Page layout (tab configuration) |
*PageController.ts | Page-level controller |
*Connector.ts | RPC connector (FE or BE) |
*Manager.ts | Backend service class |
*Record.ts | Data model |
*Store.ts | Frontend state singleton |
*Table.ts / *TableItem.ts | Custom table + row component |
*Converter.ts | Model property converter |
*Test.ts | Test class |
Loader.ts | Bootstrap entry point |
ForceCompile.ts | Dynamic class manifest |
Next: Try your First Build to see the project compile and run.
See also: First Build | Architecture Overview