# What callbacks/hooks exist in Base/stdlibs

**URL:** <https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476>\
**Category:** General Usage\
**Created:** [September 3, 2023, 5:43am UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476 "2023-09-03T05:43:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [September 3, 2023, 5:43am UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476/1 "2023-09-03T05:43:38Z")

</div>

What hook exist in Base/Core/stdlibs?

By hooks I mean places you can register an arbitrary function to run whenever something occurs.

Ones I am aware of out of hand:

- `finalizer(f, x)` runs when object `x` has no program-accessible references
- `atexit` runs when julia exits ([docs](https://docs.julialang.org/en/v1/base/base/#Base.atexit))
- `atreplinit` runs just prior to when the REPL inializes ([docs](https://docs.julialang.org/en/v1/stdlib/REPL/#Base.atreplinit))
- `Base.package_callbacks` runs whenever a module (or is it package?) is loaded ([docs](https://docs.julialang.org/en/v1/devdocs/require/#Module-loading-callbacks)

Are there any others?

(and: no, I don’t intend to use this for evil. Would I do something like that?)

---

<div class="post-metadata">

**Author:** ![maleadt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maleadt/32/10097_2.png) [@maleadt](https://discourse.julialang.org/u/maleadt)\
**Post date:** [September 3, 2023, 11:27am UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476/2 "2023-09-03T11:27:03Z")

</div>

- The REPL’s `ast_transforms`, used by many packages
- `Base.update_stackframes_callback`, used by e.g. AbbreviatedStackTraces
- `Base.methodloc_callback`, used by Revise

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [September 3, 2023, 12:35pm UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476/3 "2023-09-03T12:35:37Z")

</div>

I believe that, when run, `Base.set_active_project(...)` will call callbacks.

I don’t remember off the top of my head how those callbacks are registered.

---

<div class="post-metadata">

**Author:** ![ffevotte](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ffevotte/32/6587_2.png) [@ffevotte](https://discourse.julialang.org/u/ffevotte)\
**Post date:** [September 3, 2023, 5:28pm UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476/4 "2023-09-03T17:28:07Z")

</div>

`Revise` also uses `Base.include_callbacks`, which AFAIU contains a list of callbacks that are run when any file is `include`d somewhere.

---

<div class="post-metadata">

**Author:** ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)\
**Post date:** [September 3, 2023, 5:35pm UTC](https://discourse.julialang.org/t/what-callbacks-hooks-exist-in-base-stdlibs/103476/5 "2023-09-03T17:35:42Z")

</div>

See “Other global state in Base”

> <https://gist.github.com/JeffBezanson/dd86043ef867954bd7e2163ab66f8b4e#other-global-state-in-base>
