Polyglot Notebooks: The difference between .dib and .ipynb Files
Tags: dotnet, notebooks, datascience, csharp
Published: 2023-05-11 02:42:34

---
title: Polyglot Notebooks: The difference between .dib and .ipynb Files
canonical_url: https://accessibleai.dev/post/polyglot_dib_vs_ipynb/
published: true
series: Polyglot Notebooks
description: What's the difference between an .ipynb file and a .dib file? Find out here.
tags: Dotnet, Notebooks, DataScience, CSharp
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wyv5zt7ed9zu1o6zd0zf.png
# Use a ratio of 100:42 for best results.
# published_at: 2023-05-11 02:40 +0000
---

I've been talking more and more about [Polyglot Notebooks](https://accessibleai.dev/post/introducing_polyglot_notebooks/) and as people try it out, they tend to ask me one common question: *should I create a `.dib` file or an `.ipynb` file? What's the difference anyways?*

![Create as .dib or .ipynb](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/esa7ehwjoybjzk2wmavc.png)

In this short article I'm going to explore the `.dib` and `.ipynb` file formats and explain the difference between the two while answering the question of which one you should choose when creating your own notebooks in Polyglot Notebooks.

## .ipynb Files

`.ipynb` files are interactive python notebook files and are a format introduced by Jupyter Notebooks. 

These files represent the code and markdown in a data science notebook plus the metadata behind the notebook's execution, including the results of the last time each cell was run.

This means that an `.ipynb` file contains everything you need to read the notebook in the form it was last executed without needing to re-run the notebook.

However, you should also understand that `.ipynb` files are larger than `.dib` files and are not intended to be manually edited. This means that these files will take up more disk space and may be harder to manage in a version-controlled environment where you may encounter situations where you need to merge changes into the same notebook.

## .dib Files

`.dib` files are a new file format introduced with Polyglot Notebooks. I've not seen a definition for the file extension, but if I had to guess I'd wager that it stood for **d**otnet **i**nteractive note**b**ook.

Like `.ipynb` files, `.dib` files store the code and documentation present in a notebook. However, unlike an `.ipynb` file, the results of prior executions are not stored in a `.dib` file. This means that `.dib` files are much smaller and are easier to manage in a version-controlled environment.

Here's a small snippet from a `.dib` file for reference:

```
#!meta

{"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"name":"csharp"}]}}

#!markdown

### Classes

Note: Custom namespaces and `partial` classes are not supported. Classes exist in the global namespace.

#!csharp

public class Point
{
    public Point(int x, int y) {
        this.X = x;
        this.Y = y;
    }

    public int X {get; set;}
    public int Y {get; set;}

    public override string ToString() => $"Point({X}, {Y})";
}

#!csharp

// Instantiate the class
Point p = new(4,2);

p
```

As you can tell, `.dib` files are shockingly simple and consist purely of the markdown and code mixed together with directives that govern the flow of cells.

## Should you Choose .dib or .ipynb Files?

So now that we see that `.ipynb` and `.dib` files are relatively similar, but `.dib` files are smaller and don't store results, you'll need to make a decision as to which you should use for your projects.

My personal preference is to go with `.dib` files unless I have a compelling reason to go with `.ipynb` files instead.

For example, if I wanted to share a notebook file with someone else and not require them to execute its code, an `.ipynb` file would be a good choice.

Similarly, if I had a team of Python developers who are familiar with `.ipynb` files or a toolset geared around those files, I'd probably want to stick with that file format for simplicity.

However, barring any compelling reason to go with `.ipynb` files, I personally prefer the smaller `.dib` files that are easier to manage in version control and clearly communicate by their extension that the code I'm working with is a Polyglot Notebooks notebook.

So, as with anything in software, it depends, but hopefully this article has given you and your team enough information to make your choice when creating a new Polyglot Notebook.