A Jupyter kernel for Stata built on pystata
nbstata: a new Stata kernel
nbstata is a Jupyter kernel for Stata built on top of pystata.
*For the User Guide, click here.*
What is Jupyter?
A Jupyter notebook allows you to combine interactive code and results with Markdown in a single document. Though it is named after the three core programming languages it supports (Julia, Python, and R), it can be used with with a wide variety of languages.
nbstata allows you to create Stata notebooks (as opposed to using Stata within a Python notebook, which is needlessly clunky if you are working primarily with Stata).
Key nbstata features
- [x] Easy
- [x] Works with Stata 17+ (only).
- [x] DataGrid widget with
browse-like capabilities (e.g., interactive
- [x] Variable and data properties available in a ‘contextual help’ side
- [x] Quarto inline
Users of Stata 17 or 18.0 also get these features only built-in natively to Stata 18.5+:
- Displays Stata output without the redundant ‘echo’ of (multi-line)
- Autocompletion for variables, macros, matrices, and file paths
- Interactive/richtext help files accessible within notebook
#delimit ;interactive support (along with all types of comments)

What can you do with Stata notebooks…
…that you can’t do with the official Stata interface?
- Exploratory analysis that is both:
- Present results in a way that interweaves:[^1]
4. links
5. math: $y{it}=\beta0+\varepsilon_{it}$
Contributing
nbstata is being developed using nbdev. The /nbs directory is where edits to the source code should be made. (The python code is then exported to the /nbdev library folder.)
For more, see CONTRIBUTING.md.
Acknowledgements
Kyle Barron authored the original stata_kernel, which works for older versions of Stata. Vinci Chow created a Stata kernel that instead uses pystata, which first became available with Stata 17. nbstata was originally derived from his pystata-kernel, but much of the docs and newer features are derived from stata_kernel.
[^1]: Stata dynamic documents can do this part, though with a less interactive workflow. (See also: markstat, stmd, and Statamarkdown) Using nbstata with Quarto instead gives you a similar workflow, with greater flexibility of output.