{"id":14653550,"url":"https://github.com/briefercloud/briefer","last_synced_at":"2025-05-13T15:09:49.464Z","repository":{"id":256219382,"uuid":"854628278","full_name":"briefercloud/briefer","owner":"briefercloud","description":"Dashboards and notebooks in a single place. Create powerful and flexible dashboards using code, or build beautiful Notion-like notebooks and share them with your team.","archived":false,"fork":false,"pushed_at":"2025-04-16T18:18:27.000Z","size":68255,"stargazers_count":3978,"open_issues_count":72,"forks_count":247,"subscribers_count":22,"default_branch":"main","last_synced_at":"2025-04-17T03:10:01.964Z","etag":null,"topics":["analytics","bi","bigquery","briefer","business-intelligence","businessintelligence","dashboard","data-analysis","data-visualization","jupyter","notebook","postgres","postgresql","reporting","visualization"],"latest_commit_sha":null,"homepage":"https://briefer.cloud","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/briefercloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-09T14:04:37.000Z","updated_at":"2025-04-16T18:18:32.000Z","dependencies_parsed_at":"2024-09-16T23:10:42.322Z","dependency_job_id":"42c91f28-6833-4d9e-b26d-0f1b222e4a84","html_url":"https://github.com/briefercloud/briefer","commit_stats":{"total_commits":83,"total_committers":12,"mean_commits":6.916666666666667,"dds":"0.40963855421686746","last_synced_commit":"162620059c05aa965d7296c17b44749d8f4fd5e9"},"previous_names":["briefercloud/briefer"],"tags_count":119,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briefercloud%2Fbriefer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briefercloud%2Fbriefer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briefercloud%2Fbriefer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/briefercloud%2Fbriefer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/briefercloud","download_url":"https://codeload.github.com/briefercloud/briefer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250496948,"owners_count":21440231,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","bi","bigquery","briefer","business-intelligence","businessintelligence","dashboard","data-analysis","data-visualization","jupyter","notebook","postgres","postgresql","reporting","visualization"],"created_at":"2024-09-11T08:00:53.574Z","updated_at":"2025-04-23T18:54:50.573Z","avatar_url":"https://github.com/briefercloud.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003e❇️ Briefer\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n    Notebooks and dashboards with Python, SQL, scheduling, native visualizations, code generation, and more.\n  \u003c/p\u003e\n\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://join.slack.com/t/briefercommunity/shared_invite/zt-2geo5vlh2-RxEOwCRrVEz6JDkrPHuf0g\" target=\"_blank\"\u003eSlack\u003c/a\u003e\n    |\n    \u003ca href=\"https://briefer.cloud\" target=\"_blank\"\u003eWebsite\u003c/a\u003e\n    |\n    \u003ca href=\"https://docs.briefer.cloud\" target=\"_blank\"\u003eDocs\u003c/a\u003e\n    |\n    \u003ca href=\"https://briefer.cloud/blog\" target=\"_blank\"\u003eBlog\u003c/a\u003e\n    |\n    \u003ca href=\"https://github.com/briefercloud/briefer\"\u003eIssues\u003c/a\u003e\n    |\n    \u003ci\u003e\u003ca href=\"https://app.briefer.cloud\" target=\"_blank\"\u003e\u003cstrong\u003eTry the cloud version »\u003c/strong\u003e\u003c/a\u003e\u003c/i\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://github.com/briefercloud/briefer/stargazers\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/briefercloud/briefer\" alt=\"Github Stars\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://pypi.org/project/briefer/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/briefer.svg?style=flat-square\u0026label=PyPI+briefer\" alt=\"PyPi Briefer\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/briefercloud/briefer/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-AGPLv3-red\" alt=\"License\"\u003e\u003c/a\u003e\n   \u003ca href=\"https://www.ycombinator.com/companies/briefer\"\u003e\u003cimg src=\"https://img.shields.io/badge/Y%20Combinator-S23-orange\" alt=\"Backed by Y Combinator S23\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  We can help you deploy Briefer for free. \u003ca href=\"https://calendly.com/lucasfcosta/briefer-deployment\"\u003eBook a time here\u003c/a\u003e.\n\u003c/p\u003e\n\n---\n\n\u003ci\u003eHere's a brief demo (no pun intended) of Briefer. It may take a few seconds to load.\u003c/i\u003e\n\nhttps://github.com/user-attachments/assets/dfc6c1ef-f26c-44a9-8566-857178a8c5db\n\n---\n\nBriefer is like Notion for code notebooks and dashboards. It gives technical users all the flexibility they need to publish dashboards, analyze data, create reports, and build data apps. At the same time, Briefer makes it easy for non-technical users to view and interact with data.\n\nIn Briefer, you can:\n\n- 📚📊 **Create notebooks and dashboards** using Markdown, Python, SQL, and native visualizations.\n- 🤳 **Build interactive data apps** using inputs, dropdowns, and date pickers.\n- 🤖 **Generate code and queries** using an AI that understands your database schema and your notebook's context.\n- 🕰️ **Schedule notebooks and dashboards** to run and update periodically.\n- ⚙️ **Create and test ad-hoc pipelines** using writebacks.\n\nIn addition to all that, Briefer is also multiplayer, meaning two or more people can work on the same notebook or dashboard at the same time and see each other's changes in real-time.\n\n\u003cbr /\u003e\n\n## Quick Start\n\nThe recommended way to run Briefer locally is to install it using `pip` and run it using the `briefer` command. Please note that Briefer requires [Docker](https://www.docker.com) to run, so make sure you have it installed before running the commands below.\n\n```bash\n# Install Briefer\npip install briefer\n\n# Run Briefer and access it on http://localhost:3000\nbriefer\n```\n\nIf you run Briefer using `pip`, our initialization scripts will take care of downloading [our docker image](https://hub.docker.com/r/briefercloud/briefer), setting up volumes to store Briefer's data, and starting the application.\n\nAlternatively, you can also run Briefer using Docker directly:\n\n```bash\n# Run Briefer using Docker\ndocker run -d \\\n  -p 3000:3000 \\\n  -v briefer_psql_data:/var/lib/postgresql/data \\\n  -v briefer_jupyter_data:/home/jupyteruser \\\n  -v briefer_briefer_data:/home/briefer \\\n  briefercloud/briefer\n```\n\nWhen running on Windows' PowerShell, it might be necessary to add an extra `` ` `` to the end of each line instead of the `\\`, like this:\n\n```bash\n# Run Briefer using Docker\ndocker run -d `\n  -p 3000:3000 `\n  -v briefer_psql_data:/var/lib/postgresql/data `\n  -v briefer_jupyter_data:/home/jupyteruser `\n  -v briefer_briefer_data:/home/briefer `\n  briefercloud/briefer\n```\n\nThese volumes are for Briefer to store its data, including its pages, dashboards, schedules, and users. If you want to remove Briefer's data, you can remove these volumes.\n\nFor more information on how to deploy Briefer in production, please refer to our [deployment guide](https://docs.briefer.cloud/get-started/deploy).\n\nIf you want to contribute to Briefer, please read our [contributing guide](/.github/contributing/CONTRIBUTING.md) which explains how run Briefer in development mode.\n\n\u003cbr /\u003e\n\n## How do I use Briefer?\n\nBriefer is a collaborative web application. Each instance of Briefer can have multiple users who share a workspace containing multiple pages.\n\nIdeally, you'll deploy Briefer somewhere where your team can access it, like a server or a cloud provider. Once you have Briefer running, you can access it on your browser and start creating pages.\n\nTo fetch external data in Briefer, you can connect it to your databases, like PostgreSQL, BigQuery, Redshift, Athena, or MySQL. You can also upload any types of files and work with them as if they were on disk.\n\n\u003cbr /\u003e\n\u003cp\u003e\n\u003cpicture align=\"center\"\u003e\n  \u003csource  align=\"center\" media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/img/briefer-usage-overview-dark.png\"\u003e\n  \u003csource align=\"center\" media=\"(prefers-color-scheme: light)\" srcset=\"./assets/img/briefer-usage-overview.png\"\u003e\n  \u003cimg align=\"center\" alt=\"Briefer usage diagram\" src=\"./assets/img/briefer-usage-overview.png\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\nYou can view each Briefer page as a notebook or a dashboard.\n\n**In the notebook mode**, you can write SQL to fetch data, Python to manipulate or visualize it, and Markdown to document your analysis. You can also use native visualizations to create charts and tables without having to write code.\n\nThen, **in the dashboard mode**, you can create dashboards by dragging and dropping the elements from your notebook. You can also add inputs, dropdowns, and date pickers to create interactive filters or data apps.\n\nAfter you're done creating your notebook or dashboard, you can save your changes so that other users can see them.\n\nOnce a page is saved, you'll be able to schedule it to run periodically so that your dashboards and notebooks are always up-to-date.\n\n\u003cbr /\u003e\n\n## How is Briefer different from other tools?\n\nThere are two types of tools people usually compare us against. The first type is traditional BI tools like Tableau, Looker, or Power BI. The second type is notebooks like Jupyter, or Google Colab, whose results often get screenshoted and pasted in Notion or Confluence.\n\n\u003cbr /\u003e\n\u003cp\u003e\n\u003cpicture align=\"center\"\u003e\n  \u003csource  align=\"center\" media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/img/one-tool-dark.png\"\u003e\n  \u003csource align=\"center\" media=\"(prefers-color-scheme: light)\" srcset=\"./assets/img/one-tool.png\"\u003e\n  \u003cimg align=\"center\" alt=\"Briefer usage diagram\" src=\"./assets/img/one-tool.png\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\nHere's how Briefer compares to each of them.\n\n\u003cbr /\u003e\n\n### Briefer vs. Traditional BI Tools\n\nBriefer is better than traditional BI tools because it's faster and more flexible, thanks to Python.\n\nTraditional BI tools often require you to write complex SQL queries to fetch data, and then limit you to a set of pre-defined visualizations. Most of the time, the only way to manipulate these visualizations is by clicking around the UI, which can be slow and error-prone.\n\nBriefer supports SQL and no-code visualizations too, but it also allows you to write Python code to manipulate data and create custom visualizations.\n\nThis means you can do things like:\n\n- Fetch data from multiple sources and join them together without having to create a data pipeline beforehand\n- Hit APIs to gather data or enrich your own\n- Use machine learning to include predictive analytics in your dashboards\n\nAdditionally, many data and engineering teams end up splitting their work between a BI tool and a jupyter notebook. That makes it hard to keep track of what's happening and to collaborate effectively. In Briefer, you can do everything in one place.\n\n\u003cbr /\u003e\n\n### Briefer vs. Traditional Notebooks\n\nWe love notebooks, but there are three main problems with them:\n\n1. They're difficult to share and maintain, especially with non-technical people.\n2. They require local credentials and lots of boilerplate code to fetch data from databases or APIs.\n3. Their UX is far from ideal: you don't have integrated scheduling or code generation, for example.\n\n#### Sharing notebooks with Briefer\n\nThe main problem with notebooks is that they're difficult to share and maintain, especially with non-technical people. Therefore, data scientists, analysts, and engineers often struggle to share their work and get the visibility they deserve within their organizations.\n\nUsually, the only way to share a notebook is to take screenshots and paste them in Notion or Confluence. That workaround is not ideal because it's time-consuming, and the information quickly becomes outdated, especially when you need to update it.\n\nBriefer solves this problem because every Briefer notebook is stored in a single place that everyone in your organization can access. Briefer's interface is also much more user-friendly than Jupyter, which makes it easier for non-technical people to view and interact with data.\n\nIn addition to Briefer's friendly interface, you can also choose which blocks of your notebook you want to publish, so you can keep your data jiu-jitsu private while sharing the relevant insights and visualizations with your team.\n\n#### Fetching data with Briefer (+ automatic data frames)\n\nCurrently, people who want to gather data in notebooks have to keep credentials in their machines, which is not secure. They also have to write a lot of boilerplate code to run simple queries. Sometimes, people create whole libraries to handle queries.\n\nIn Briefer, you can run SQL queries against connected data sources directly in your notebook. Then, **Briefer will automatically turn your query into a data frame and store it in a variable that you can use in your Python blocks**.\n\nIf you need to fetch data from an API, you can use Briefer's environment variables to store your credentials securely in a single place instead of handing them out to everyone in your organization.\n\nFinally, in case you want to use files, you can upload them to Briefer and read them in Python or query them using SQL thanks to our [DuckDB](https://github.com/duckdb/duckdb) integration.\n\n#### UX improvements in Briefer\n\nBesides our improved interface, Briefer integrates several UX improvements directly into your notebooks.\n\nIn Briefer, you can schedule your notebooks to run periodically. That way, you don't have to turn them into an ad-hoc script that you schedule with cron or Airflow. Each of these scheduled runs generates a snapshot that you can use to compare changes over time.\n\nFinally, Briefer can generate code for you. If you're not sure how to write a query or a Python block, you can ask Briefer to generate it for you. Briefer will look at your database schema and your notebook's context to suggest changes. If you run into an error, Briefer can also suggest fixes.\n\n\u003cbr /\u003e\n\n## Briefer's architecture\n\nBriefer is an application with three main components: the `web`, the `api`, and an optional `ai` service. These three components require a PostgreSQL database to store their data, and a jupyter server to run your code.\n\n\u003cbr /\u003e\n\u003cp\u003e\n\u003cpicture align=\"center\"\u003e\n  \u003csource  align=\"center\" media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/img/briefer-arch-overview-dark.png\"\u003e\n  \u003csource align=\"center\" media=\"(prefers-color-scheme: light)\" srcset=\"./assets/img/briefer-arch-overview.png\"\u003e\n  \u003cimg align=\"center\" alt=\"Briefer usage diagram\" src=\"./assets/img/briefer-arch-overview.png\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\nThe `web` is the main interface of Briefer. It's where you create and edit your notebooks and dashboards. The `web` is a [Next.js](https://nextjs.org/) application that communicates with the `api` to fetch and save data.\n\nBesides responding to `web`'s requests, the `api` is also responsible for running your notebooks and dashboards, and fetching data from the data sources you add to Briefer. The `api` is a Node.js application.\n\nFinally, the optional `ai` service is a Python service that generates code for the AI features, like _\"Edit with AI\"_ and _\"Fix with AI\"_. You don't necessarily need to run it, unless you're working on these features or want to use them. Please note that using the `ai` service requires an admin to configure an OpenAI API key under the `Settings` page. This service does make requests to OpenAI's API.\n\n\u003cbr /\u003e\n\n## More information\n\n### Licensing and open-source\n\n**Briefer's open-source offering is licensed under the AGPLv3 license**. This license allows you to use Briefer for free, but it requires you to open-source any changes you make to the codebase under the same license. Your notebooks and dashboards are yours, and you can do whatever you want with them.\n\nBriefer's cloud offering is a separate piece of software that we host and maintain. It's _not_ open-source, but it's free to use and includes additional features like email and Slack integrations, more granular permissions, and SSO.\n\n\u003cbr /\u003e\n\u003cp\u003e\n\u003cpicture align=\"center\"\u003e\n  \u003csource  align=\"center\" media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/img/paid-vs-oss-dark.png\"\u003e\n  \u003csource align=\"center\" media=\"(prefers-color-scheme: light)\" srcset=\"./assets/img/paid-vs-oss.png\"\u003e\n  \u003cimg align=\"center\" alt=\"Briefer usage diagram\" src=\"./assets/img/paid-vs-oss.png\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\nYou can read more about our licensing decisions and open-source philosophy [in this blog post](https://briefer.cloud/blog/posts/open-source-strategy/). To summarise, we'll aim to include all data-related features in the open-source version and save integrations and granular permissions for the cloud version.\n\n### Anonymous telemetry and updates\n\nBriefer collects anonymous telemetry that we use to improve our product. This telemetry includes only event counts and a randomly generated ID for each user. We don't collect any personal information or data from your notebooks, dashboards, queries, or prompts.\n\nYou can opt-out of telemetry by setting the environment variable `DISABLE_ANONYMOUS_TELEMETRY` to `true`. To also disable the periodic requests that Briefer makes to check for updates, you can set the environment variable `DISABLE_UPDATE_CHECK` to `true`.\n\n### F.A.Q.\n\n\u003cdetails\u003e\n  \u003csummary\u003eCan I use the cloud version for free instead?\u003c/summary\u003e\n\nYes you can. The cloud version is free to use and includes unlimited documents and all the core features of Briefer.\n\nYou can sign up for the cloud version [here](https://briefer.cloud) and read more about our pricing [in our pricing page](https://briefer.cloud/pricing).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eWhat are the differences between the open-source and cloud versions?\u003c/summary\u003e\n  The main difference between the open-source and cloud versions is that the cloud version is a hosted service that we maintain and update. Additionally, the cloud version supports multiple workspaces, has more granular permissions, email and Slack integrations. Our enterprise tier also includes SSO.\n\nIn any case, Briefer's open-source version includes all the most important features, like SQL, Python, visualizations, writebacks, notebooks, dashboards, scheduling, and code generation.\n\nOur goal is for the open-source version to be fully functional and ideal for teams up to approximately a hundred people. That's why granular permissions and integrations are reserved for the cloud version.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eHow easy is it to self-serve in Briefer?\u003c/summary\u003e\n\nBriefer is easy to self-serve in the sense that it's pretty straightforward for anyone with a basic knowledge of SQL to fetch data and create visualizations. If someone doesn't know SQL, they can also use the AI assistant to generate queries for them.\n\nStill, we don't believe that _any_ tool can be 100% self-serve. That's because even if people manage to create a query and fetch data, non-technical users usually can't validate or interpret the results without some context. [We've written a detailed blog post about this theme here](https://briefer.cloud/blog/posts/self-serve-bi-myth/).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eHow can I get in touch?\u003c/summary\u003e\n\nYou can reach out to us on [Slack](https://join.slack.com/t/briefercommunity/shared_invite/zt-2geo5vlh2-RxEOwCRrVEz6JDkrPHuf0g) or by email at [founders@briefer.cloud](mailto:founders@briefer.cloud).\n\nWe personally read and respond to every message we receive, so don't hesitate to reach out if you have any questions or feedback.\n\nIf you need a demo or want to learn more about how Briefer could help, you can book some time [here](https://calendly.com/lucasfcosta/briefer-intro-call).\n\n\u003c/details\u003e\n","funding_links":[],"categories":["TypeScript","Notebooks","前端开发框架及项目","business-intelligence"],"sub_categories":["管理面板"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbriefercloud%2Fbriefer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbriefercloud%2Fbriefer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbriefercloud%2Fbriefer/lists"}