"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6084],{95788:(e,t,n)=>{n.d(t,{Iu:()=>p,yg:()=>m});var r=n(11504);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=l(n),d=o,m=c["".concat(u,".").concat(d)]||c[d]||g[d]||i;return n?r.createElement(m,a(a({ref:t},p),{},{components:n})):r.createElement(m,a({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[c]="string"==typeof e?e:o,a[1]=s;for(var l=2;l<i;l++)a[l]=n[l];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},32204:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(45072),o=(n(11504),n(95788));const i={title:"Types of Contributions",hide_title:!0,sidebar_position:2,version:1},a=void 0,s={unversionedId:"contributing/types-of-contributions",id:"contributing/types-of-contributions",title:"Types of Contributions",description:"Types of Contributions",source:"@site/docs/contributing/types-of-contributions.mdx",sourceDirName:"contributing",slug:"/contributing/types-of-contributions",permalink:"/docs/contributing/types-of-contributions",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/contributing/types-of-contributions.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Types of Contributions",hide_title:!0,sidebar_position:2,version:1},sidebar:"tutorialSidebar",previous:{title:"Contributing to Superset",permalink:"/docs/contributing/contributing-page"},next:{title:"Pull Request Guidelines",permalink:"/docs/contributing/pull-request-guidelines"}},u={},l=[{value:"Types of Contributions",id:"types-of-contributions",level:2},{value:"Report Bug",id:"report-bug",level:3},{value:"Submit Ideas or Feature Requests",id:"submit-ideas-or-feature-requests",level:3},{value:"Fix Bugs",id:"fix-bugs",level:3},{value:"Implement Features",id:"implement-features",level:3},{value:"Improve Documentation",id:"improve-documentation",level:3},{value:"Add Translations",id:"add-translations",level:3},{value:"Ask Questions",id:"ask-questions",level:3}],p={toc:l},c="wrapper";function g(e){let{components:t,...n}=e;return(0,o.yg)(c,(0,r.c)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.yg)("h2",{id:"types-of-contributions"},"Types of Contributions"),(0,o.yg)("h3",{id:"report-bug"},"Report Bug"),(0,o.yg)("p",null,"The best way to report a bug is to file an issue on GitHub. Please include:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Your operating system name and version."),(0,o.yg)("li",{parentName:"ul"},"Superset version."),(0,o.yg)("li",{parentName:"ul"},"Detailed steps to reproduce the bug."),(0,o.yg)("li",{parentName:"ul"},"Any details about your local setup that might be helpful in troubleshooting.")),(0,o.yg)("p",null,"When posting Python stack traces, please quote them using\n",(0,o.yg)("a",{parentName:"p",href:"https://help.github.com/articles/creating-and-highlighting-code-blocks/"},"Markdown blocks"),"."),(0,o.yg)("p",null,(0,o.yg)("em",{parentName:"p"},"Please note that feature requests opened as GitHub Issues will be moved to Discussions.")),(0,o.yg)("h3",{id:"submit-ideas-or-feature-requests"},"Submit Ideas or Feature Requests"),(0,o.yg)("p",null,"The best way is to start an ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/discussions/categories/ideas"},'"Ideas" Discussion thread')," on GitHub:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Explain in detail how it would work."),(0,o.yg)("li",{parentName:"ul"},"Keep the scope as narrow as possible, to make it easier to implement."),(0,o.yg)("li",{parentName:"ul"},"Remember that this is a volunteer-driven project, and that your contributions are as welcome as anyone's :)")),(0,o.yg)("p",null,"To propose large features or major changes to codebase, and help usher in those changes, please create a ",(0,o.yg)("strong",{parentName:"p"},"Superset Improvement Proposal (SIP)"),". See template from ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/issues/5602"},"SIP-0")),(0,o.yg)("h3",{id:"fix-bugs"},"Fix Bugs"),(0,o.yg)("p",null,"Look through the GitHub issues. Issues tagged with ",(0,o.yg)("inlineCode",{parentName:"p"},"#bug")," are\nopen to whoever wants to implement them."),(0,o.yg)("h3",{id:"implement-features"},"Implement Features"),(0,o.yg)("p",null,"Look through the GitHub issues. Issues tagged with\n",(0,o.yg)("inlineCode",{parentName:"p"},"#feature")," is open to whoever wants to implement it."),(0,o.yg)("h3",{id:"improve-documentation"},"Improve Documentation"),(0,o.yg)("p",null,"Superset could always use better documentation,\nwhether as part of the official Superset docs,\nin docstrings, ",(0,o.yg)("inlineCode",{parentName:"p"},"docs/*.rst")," or even on the web as blog posts or\narticles. See ",(0,o.yg)("a",{parentName:"p",href:"#documentation"},"Documentation")," for more details."),(0,o.yg)("h3",{id:"add-translations"},"Add Translations"),(0,o.yg)("p",null,"If you are proficient in a non-English language, you can help translate\ntext strings from Superset's UI. You can jump into the existing\nlanguage dictionaries at\n",(0,o.yg)("inlineCode",{parentName:"p"},"superset/translations/<language_code>/LC_MESSAGES/messages.po"),", or\neven create a dictionary for a new language altogether.\nSee ",(0,o.yg)("a",{parentName:"p",href:"#translating"},"Translating")," for more details."),(0,o.yg)("h3",{id:"ask-questions"},"Ask Questions"),(0,o.yg)("p",null,"There is a dedicated ",(0,o.yg)("a",{parentName:"p",href:"https://stackoverflow.com/questions/tagged/apache-superset"},(0,o.yg)("inlineCode",{parentName:"a"},"apache-superset")," tag")," on ",(0,o.yg)("a",{parentName:"p",href:"https://stackoverflow.com/"},"StackOverflow"),". Please use it when asking questions."))}g.isMDXComponent=!0}}]);