Getting Started with Bryntum Scheduler in Ionic
Try Ionic demos
Bryntum Scheduler is delivered with a variety of Ionic demo applications showing its functionality. All demo applications have been verified to be compatible with Node.js 20.
Version requirements
Minimum supported:
- Angular:
9.0.0or higher - TypeScript:
3.6.0or higher (for TypeScript application) - Vite
4.0.0or higher (for application build with Vite)
Recommended:
- Angular:
12.0.0or higher - TypeScript:
4.0.0or higher (for TypeScript application) - Vite
5.0.0or higher (for application build with Vite)
Create Ionic application
To get started, the broad steps are as follows:
- Access to npm registry
- Create Application
- Install component
- Add component to Application
- Apply styles
- Run the application
The application we are about to build together is pretty simple, and will look like the illustration below:
Access to npm registry
You can try out Bryntum components for free using our public Bryntum trial packages. If you have a Bryntum license, please refer to our Npm Repository Guide to access the private Bryntum repository.
Create Application
Similarly to all the examples shipped with the distribution, we will be using Ionic CLI to build Ionic applications.
Type the following command to install Ionic CLI:
npm install -g @ionic/cli
We will then create a basic application with Ionic CLI:
ionic start IonicApp blank --type=angular
Here we are using blank, the most simple starter template for the app.
Ionic can use Angular, React, or Vue. By choosing --type=angular, we tell Ionic CLI to generate an application using Angular.
Feel free to select other defaults if needed following instruction provided in the Ionic Framework Documentation
IonicApp to your preferred application name You can then move to your application folder
cd IonicApp
Install component
From your terminal, update project dependencies using the following commands:
npm install @bryntum/scheduler@npm:@bryntum/scheduler-trial@7.3.0 @bryntum/scheduler-angular@7.3.0
npm install @bryntum/scheduler@7.3.0 @bryntum/scheduler-angular@7.3.0
Add component to Application
Edit the src/app/home/home.module.ts file and add the following:
import { BryntumSchedulerModule } from '@bryntum/scheduler-angular';
@NgModule({
imports : [
BryntumSchedulerModule
]
})
Then, edit the src/app/home/home.page.ts file and replace the content with the following:
import { Component, ViewChild} from '@angular/core';
import { BryntumSchedulerComponent } from '@bryntum/scheduler-angular';
import { schedulerProps } from './home.config';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
standalone: false,
})
export class HomePage {
schedulerProps = schedulerProps;
@ViewChild('scheduler') schedulerComponent!: BryntumSchedulerComponent;
}
Add component data
Create a assets/data/data.json file for example data and add the following JSON data to it:
{
"success": true,
"resources": {
"rows": [
{ "id": 1, "name": "Dan Stevenson" },
{ "id": 2, "name": "Talisha Babin" },
{ "id": 3, "name": "Ravi Kumar" },
{ "id": 4, "name": "Aisha Khan" },
{ "id": 5, "name": "Michael Chen" },
{ "id": 6, "name": "Sofia Lopez" },
{ "id": 7, "name": "James Anderson" },
{ "id": 8, "name": "Eddie Johnson" },
{ "id": 9, "name": "Ethan Wright" },
{ "id": 10, "name": "Liu Wei" }
]
},
"events": {
"rows": [
{ "resourceId": 1, "startDate": "2026-01-01", "endDate": "2026-01-05", "name": "Kickoff Meeting" },
{ "resourceId": 1, "startDate": "2026-01-06", "endDate": "2026-01-10", "name": "Scope Definition" },
{ "resourceId": 1, "startDate": "2026-01-12", "endDate": "2026-01-29", "name": "Project Plan Review" },
{ "resourceId": 2, "startDate": "2026-01-02", "endDate": "2026-01-06", "name": "Requirement Gathering" },
{ "resourceId": 2, "startDate": "2026-01-07", "endDate": "2026-01-21", "name": "Stakeholder Interviews" },
{ "resourceId": 2, "startDate": "2026-01-22", "endDate": "2026-01-27", "name": "Requirement Signoff" },
{ "resourceId": 3, "startDate": "2026-01-05", "endDate": "2026-01-14", "name": "System Design" },
{ "resourceId": 3, "startDate": "2026-01-10", "endDate": "2026-01-20", "name": "Database Modeling" },
{ "resourceId": 3, "startDate": "2026-01-23", "endDate": "2026-01-28", "name": "API Design" },
{ "resourceId": 4, "startDate": "2026-01-08", "endDate": "2026-01-15", "name": "Backend Setup" },
{ "resourceId": 4, "startDate": "2026-01-15", "endDate": "2026-01-22", "name": "Authentication Module" },
{ "resourceId": 4, "startDate": "2026-01-21", "endDate": "2026-01-27", "name": "Data Services" },
{ "resourceId": 5, "startDate": "2026-01-02", "endDate": "2026-01-14", "name": "UI Wireframes" },
{ "resourceId": 5, "startDate": "2026-01-15", "endDate": "2026-01-19", "name": "Frontend Components" },
{ "resourceId": 5, "startDate": "2026-01-20", "endDate": "2026-01-27", "name": "Styling & Theme" },
{ "resourceId": 6, "startDate": "2026-01-12", "endDate": "2026-01-16", "name": "API Integration" },
{ "resourceId": 6, "startDate": "2026-01-17", "endDate": "2026-01-21", "name": "GraphQL Setup" },
{ "resourceId": 6, "startDate": "2026-01-22", "endDate": "2026-01-25", "name": "Integration Testing" },
{ "resourceId": 7, "startDate": "2026-01-05", "endDate": "2026-01-10", "name": "Unit Testing" },
{ "resourceId": 7, "startDate": "2026-01-12", "endDate": "2026-01-19", "name": "Automation Scripts" },
{ "resourceId": 7, "startDate": "2026-01-18", "endDate": "2026-01-27", "name": "Performance Testing" },
{ "resourceId": 8, "startDate": "2026-01-10", "endDate": "2026-01-22", "name": "Bug Fix Round 1" },
{ "resourceId": 8, "startDate": "2026-01-23", "endDate": "2026-01-26", "name": "UI Fixes" },
{ "resourceId": 8, "startDate": "2026-01-27", "endDate": "2026-01-30", "name": "Regression Testing" },
{ "resourceId": 9, "startDate": "2026-01-03", "endDate": "2026-01-14", "name": "Client Demo Prep" },
{ "resourceId": 9, "startDate": "2026-01-15", "endDate": "2026-01-19", "name": "Client Review" },
{ "resourceId": 9, "startDate": "2026-01-20", "endDate": "2026-01-24", "name": "Feedback Implementation" },
{ "resourceId": 10, "startDate": "2026-01-02", "endDate": "2026-01-16", "name": "Deployment Setup" },
{ "resourceId": 10, "startDate": "2026-01-19", "endDate": "2026-01-22", "name": "Go-Live" },
{ "resourceId": 10, "startDate": "2026-01-23", "endDate": "2026-01-27", "name": "Post-Deployment Support" }
]
}
}
Create a src/app/home/home.config.ts file with the following content:
import { BryntumSchedulerProps } from '@bryntum/scheduler-angular';
export const schedulerProps: BryntumSchedulerProps = {
columns : [
{ text : 'Name', field : 'name', width : 160 }
],
startDate : new Date(2026, 0, 1),
endDate : new Date(2026, 1, 10),
crudManager : {
autoLoad : true,
loadUrl : 'assets/data/data.json',
// This config enables response validation and dumping of found errors to the browser console.
// It's meant to be used as a development stage helper only so please set it to false for production systems.
validateResponse : true,
}
};
startDate and endDate configs passed to schedulerConfig denote the currently visible timespan. And finally, edit the src/app/home/home.page.html file and replace the content with the following:
<ion-content [fullscreen] = "true">
<div id = "container">
<bryntum-scheduler
#scheduler
[crudManager] = 'schedulerProps.crudManager!'
[columns] = "schedulerProps.columns!"
[startDate] = "schedulerProps.startDate!"
[endDate] = "schedulerProps.endDate!"
></bryntum-scheduler>
</div>
</ion-content>
Apply styles
Stylesheets
The following CSS files are provided with the Bryntum npm packages or in the /build folder of the distribution:
| File | Contents |
|---|---|
scheduler.css |
Structural CSS |
svalbard-light.css |
Svalbard Light theme |
svalbard-dark.css |
Svalbard Dark theme |
visby-light.css |
Visby Light theme |
visby-dark.css |
Visby Dark theme |
stockholm-light.css |
Stockholm Light theme |
stockholm-dark.css |
Stockholm Dark theme |
material3-light.css |
Material3 Light theme |
material3-dark.css |
Material3 Dark theme |
fluent2-light.css |
Fluent2 Light theme |
fluent2-dark.css |
Fluent2 Dark theme |
fontawesome/css/fontawesome.css |
Font Awesome Free base CSS |
fontawesome/css/solid.css |
Font Awesome Free solid icons |
You'll need to import the structural CSS and the preferred theme into your project for the Bryntum Scheduler to render correctly, and if you are not replacing the icons used by the component, you will also need to include Font Awesome.
Edit the src/global.scss and add the following:
// FontAwesome is used for icons
@import "~@bryntum/scheduler/fontawesome/css/fontawesome.css";
@import "~@bryntum/scheduler/fontawesome/css/solid.css";
// Structural CSS
@import "~@bryntum/scheduler/scheduler.css";
// Bryntum theme of your choice
@import "~@bryntum/scheduler/svalbard-light.css";
Sizing the component
By default, the Bryntum Scheduler component is configured to occupy 100% of the parent DOM element with a min-height of 10em.
To display the component at the appropriate size, you can, for example, set parent components to take up the full height of the screen.
In your src/app/home/home.page.scss file, add the following:
#container {
height : 100vh;
}
There are many other solutions depending on the situation. Feel free to adapt the code above regarding your application layout. For more information on the topic, see this guide Sizing the component.
Run the application
From your terminal:
ionic serve
Your application is now available under http://localhost:8100, and your browser should automatically open it for you.
Troubleshooting
Please refer to this Troubleshooting guide.
What to do next?
Further on integration with Ionic
Do you want to know more about how Bryntum Scheduler integrates with Ionic and starts to customize your application? We provide you with a complete Ionic guide here.
Learn about Data
Bryntum components often use multiple data collections and entities.
For a detailed explanation of how these elements interact, see our guide to displaying data in Bryntum Scheduler.