A new item has appeared: markers!
A marker is new item that can be added to a timeline. It is used to represent a point in time.
Markers can be added and manipulated on a timeline the same way as clips; selection, copy-paste, edit modes etc. should work. A markers also has a specialization, just like clips (Animation Clip, Activation Clip, Control Clip, etc.). In 2019.1, Timeline offers its first built-in marker: Signal Emitter marker. See this thread to know more about signals.
It is also possible to write custom markers!
How to create a custom marker
In order to let timeline know that you have a new type of marker, all you have to do is to create a class that inherits Marker.
public class CustomMarker : UnityEngine.Timeline.Marker {}
That’s it! This custom marker can now be added on any track and on the timeline marker area.
At this point, the custom marker is only a visual item on the timeline. This means that this marker cannot invoke code when triggered. That doesn’t mean it is not useful; a marker can be a snap point or a chapter. It is also accessible through the Timeline API in editor and at runtime
How to create a custom marker that will invoke code
In order to have a marker trigger something, it needs to implement the INotification interface.
{
public PropertyName id { get { return new PropertyName(); } }
}```
Implementing the *INotification* interface will tell timeline that the marker will need to react when triggered.
The *INotification* interface is part of the *Playable* notification system. Each marker that implements *INotification* will have a node added in the timeline’s *Playable Graph*.

To make things clear, here’s a table of the particularities of the different ways to create custom marker:

When a *INotification* node in the *Playable Graph* is sent, the *PlayableOutput* will receive it. One last piece will need to be added in order to process this notification.
```public class MessageReceiver : MonoBehaviour, INotificationReceiver
{
public void OnNotify(Playable origin, INotification notification, object context) {}
}```
The *PlayableOutput* will need to have a *CustomReceiver* component in order to receive and process the *INotification*s.
Here’s a summary of what you need to do if you want to invoke code with your custom marker:
- Create a class inheriting from Marker and implementing *INotification*.
- Create a component implementing *INotificationReceiver*.
- Add this component on the correct Gameobject
- If your custom marker is on a track, add the component on the track’s bound object.
- If your custom marker is on the timeline itself (the timeline marker area), add the component on the Gameobject that has the *PlayableDirector* component.
In order to show you what is possible to do with custom markers, I created Message markers. These markers act like Animation events, but directly in the Timeline. **See this [Github repo](https://github.com/Unity-Technologies/Timeline-MessageMarker) to download the project and see how I did it.** The relevant[ code is here](https://github.com/Unity-Technologies/Timeline-MessageMarker/tree/master/Assets/MessageMarker) (the rest is just inspector code).
**One last thing...**
We just saw that we can customize the behaviour of a marker. But that is not the only you can do; it is also possible to customize a marker’s appearance. It is not yet available in 2019.a11, but it will release in 2019.1. Stay tuned.