library(tuicalendr)

Create a calendar

Create a new calendar with function calendar:


6  Sun
7  Mon
8  Tue
9  Wed
10  Thu
11  Fri
12  Sat
All Day
0 am
1 am
2 am
3 am
4 am
5 am
6 am
7 am
8 am
9 am
10 am
11 am
12 pm
1 pm
2 pm
3 pm
4 pm
5 pm
6 pm
7 pm
8 pm
9 pm
10 pm
11 pm
04:30
today

Default view is “week”, you can also choose “day” or “month”:

calendar(defaultView = "month")

Sun
Mon
Tue
Wed
Thu
Fri
Sat
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9

You can use some options to customize the calendar:

calendar(defaultView = "month") %>% 
  set_month_options(
    startDayOfWeek = 1,
    daynames = c("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"),
    narrowWeekend = TRUE
  )

Lun
Mar
Mer
Jeu
Ven
Sam
Dim
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10

Add schedules

Add task and planning with add_schedule:


14  Tue
All Day
Basile birthday
0 am
1 am
2 am
3 am
4 am
5 am
6 am
7 am
8 am
9 am
10 am
11 am
12 pm
1 pm
2 pm
3 pm
4 pm
5 pm
6 pm
7 pm
8 pm
9 pm
10 pm
11 pm
R - introduction
 
Lunch
 
R - visualisation
 

You can also use a data.frame containing schedules:

my_schedules <- data.frame(
  title = c("R - introduction", "R - visualisation",
            "Basile birthday", "Lunch"), 
  body = c("What is R?", "With ggplot2", "Don't forget!", "With Fanny"),
  start = c(sprintf("%s 08:00:00", Sys.Date()), sprintf("%s 13:30:00", Sys.Date()),
            format(Sys.Date()), sprintf("%s 12:00:00", Sys.Date())),
  end = c(sprintf("%s 12:30:00", Sys.Date()), sprintf("%s 18:00:00", Sys.Date()), 
          format(Sys.Date()), sprintf("%s 14:00:00", Sys.Date())),
  category = c("time", "time", "allday", "time")
)

calendar(defaultView = "day", defaultDate = Sys.Date()) %>% 
  add_schedule_df(my_schedules)

14  Tue
All Day
Basile birthday
0 am
1 am
2 am
3 am
4 am
5 am
6 am
7 am
8 am
9 am
10 am
11 am
12 pm
1 pm
2 pm
3 pm
4 pm
5 pm
6 pm
7 pm
8 pm
9 pm
10 pm
11 pm
R - introduction
 
Lunch
 
R - visualisation
 

Define calendars properties to add color and group schedules into groups (you’ll need to use a calendarId into your shedules):

my_schedules$calendarId <- c("courses", "courses", "birthdays", "social")

calendar(defaultView = "day", defaultDate = Sys.Date()) %>% 
  set_calendars_props(id = "courses", name = "Courses", color = "#FFF", bgColor = "#E41A1C") %>%
  set_calendars_props(id = "birthdays", name = "Birthdays", color = "#FFF", bgColor = "#377EB8") %>%
  set_calendars_props(id = "social", name = "Social", color = "#FFF", bgColor = "#4DAF4A") %>%
  add_schedule_df(my_schedules)

14  Tue
All Day
Basile birthday
0 am
1 am
2 am
3 am
4 am
5 am
6 am
7 am
8 am
9 am
10 am
11 am
12 pm
1 pm
2 pm
3 pm
4 pm
5 pm
6 pm
7 pm
8 pm
9 pm
10 pm
11 pm
R - introduction
 
Lunch
 
R - visualisation
 

A monthly calendar (with navigation buttons) :

my_schedules <- data.frame(
  calendarId = c("courses", "courses", "birthdays", "social"),
  title = c("R - introduction", "R - visualisation",
            "Basile birthday", "Lunch"), 
  body = c("What is R?", "With ggplot2", "Don't forget!", "With Fanny"),
  start = c(sprintf("%s 08:00:00", Sys.Date() - 3), sprintf("%s 13:30:00", Sys.Date() + 1),
            format(Sys.Date() - 7), sprintf("%s 12:00:00", Sys.Date() + 7)),
  end = c(sprintf("%s 12:30:00", Sys.Date()), sprintf("%s 18:00:00", Sys.Date() + 6), 
          format(Sys.Date() - 7), sprintf("%s 14:00:00", Sys.Date() + 7)),
  category = c("allday", "allday", "allday", "time")
)

calendar(defaultView = "month", useNav = TRUE) %>% 
  set_calendars_props(id = "courses", name = "Courses", color = "#FFF", bgColor = "#E41A1C") %>%
  set_calendars_props(id = "birthdays", name = "Birthdays", color = "#FFF", bgColor = "#377EB8") %>%
  set_calendars_props(id = "social", name = "Social", color = "#FFF", bgColor = "#4DAF4A") %>%
  add_schedule_df(my_schedules)
2025-06-29 - 2025-08-09

Sun
Mon
Tue
Wed
Thu
Fri
Sat
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9