├── data ├── releases.json └── updates.json ├── public ├── favicon.ico ├── og-image.svg └── rss.xml ├── postcss.config.mjs ├── next.config.ts ├── lib ├── utils.ts └── csv.ts ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── new-repository.yml └── workflows │ ├── auto-update.yml │ └── nextjs.yml ├── components.json ├── eslint.config.mjs ├── .gitignore ├── .claude └── settings.local.json ├── tsconfig.json ├── components ├── ui │ ├── input.tsx │ ├── table.tsx │ └── select.tsx ├── nav.tsx ├── post-job-modal.tsx └── job-list.tsx ├── package.json ├── app ├── layout.tsx ├── page.tsx ├── globals.css └── updates │ └── page.tsx ├── scripts ├── update-repos.ts ├── update-readme.js ├── fetch-releases.js └── generate-update-from-diff.js ├── repos.csv └── README.md /data/releases.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timqian/open-source-jobs/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: { 3 | "@tailwindcss/postcss": {}, 4 | }, 5 | }; 6 | 7 | export default config; 8 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | output: "export", 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # blank_issues_enabled: false 2 | # contact_links: 3 | # - name: 📝 Edit CSV Directly 4 | # url: https://github.com/timqian/open-source-jobs/blob/main/repos.csv 5 | # about: Experienced users can directly edit the repos.csv file 6 | # - name: 💬 Discussions 7 | # url: https://github.com/timqian/open-source-jobs/discussions 8 | # about: Ask questions and discuss with the community 9 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "iconLibrary": "lucide", 14 | "aliases": { 15 | "components": "@/components", 16 | "utils": "@/lib/utils", 17 | "ui": "@/components/ui", 18 | "lib": "@/lib", 19 | "hooks": "@/hooks" 20 | }, 21 | "registries": {} 22 | } 23 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig, globalIgnores } from "eslint/config"; 2 | import nextVitals from "eslint-config-next/core-web-vitals"; 3 | import nextTs from "eslint-config-next/typescript"; 4 | 5 | const eslintConfig = defineConfig([ 6 | ...nextVitals, 7 | ...nextTs, 8 | // Override default ignores of eslint-config-next. 9 | globalIgnores([ 10 | // Default ignores of eslint-config-next: 11 | ".next/**", 12 | "out/**", 13 | "build/**", 14 | "next-env.d.ts", 15 | ]), 16 | ]); 17 | 18 | export default eslintConfig; 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | -------------------------------------------------------------------------------- /.claude/settings.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "permissions": { 3 | "allow": [ 4 | "Bash(node fix-company-info.js:*)", 5 | "Bash(node -e:*)", 6 | "Bash(node fix-real-companies.js:*)", 7 | "Bash(cut -d',' -f1-2 echo \"\" echo \"Prometheus 生态系统:\" grep \"^prometheus/\\|^thanos-io/\\|^cortexproject/\" repos.csv)", 8 | "Bash(cut -d',' -f1-2 echo \"\" echo \"其他重要项目:\" grep \"^jaegertracing/\\|^open-telemetry/\\|^helm/\" repos.csv)", 9 | "Bash(node scripts/update-readme.js:*)", 10 | "Bash(npm run dev:*)", 11 | "Bash(node scripts/fetch-releases.js:*)", 12 | "Bash(node scripts/generate-update-from-diff.js:*)" 13 | ], 14 | "deny": [], 15 | "ask": [] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "react-jsx", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": [ 26 | "next-env.d.ts", 27 | "**/*.ts", 28 | "**/*.tsx", 29 | ".next/types/**/*.ts", 30 | ".next/dev/types/**/*.ts", 31 | "**/*.mts" 32 | ], 33 | "exclude": ["node_modules"] 34 | } 35 | -------------------------------------------------------------------------------- /components/ui/input.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | function Input({ className, type, ...props }: React.ComponentProps<"input">) { 6 | return ( 7 | 18 | ) 19 | } 20 | 21 | export { Input } 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "eslint", 10 | "update-repos": "npx tsx scripts/update-repos.ts", 11 | "update-readme": "node scripts/update-readme.js", 12 | "update-from-diff": "node scripts/generate-update-from-diff.js", 13 | "fetch-updates": "node scripts/fetch-releases.js" 14 | }, 15 | "dependencies": { 16 | "@radix-ui/react-select": "^2.2.6", 17 | "class-variance-authority": "^0.7.1", 18 | "clsx": "^2.1.1", 19 | "lucide-react": "^0.554.0", 20 | "next": "16.0.9", 21 | "papaparse": "^5.5.3", 22 | "react": "19.2.0", 23 | "react-dom": "19.2.0", 24 | "tailwind-merge": "^3.4.0" 25 | }, 26 | "devDependencies": { 27 | "@tailwindcss/postcss": "^4", 28 | "@types/node": "^20", 29 | "@types/papaparse": "^5.5.0", 30 | "@types/react": "^19", 31 | "@types/react-dom": "^19", 32 | "dotenv": "^17.2.3", 33 | "eslint": "^9", 34 | "eslint-config-next": "16.0.3", 35 | "tailwindcss": "^4", 36 | "tw-animate-css": "^1.4.0", 37 | "typescript": "^5" 38 | } 39 | } -------------------------------------------------------------------------------- /public/og-image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | open-source-jobs.com 24 | 25 | 26 | 27 | 28 | A List of Open Source projects offering jobs. 29 | 30 | 31 | -------------------------------------------------------------------------------- /.github/workflows/auto-update.yml: -------------------------------------------------------------------------------- 1 | name: Auto Update 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - 'repos.csv' 7 | 8 | permissions: 9 | contents: write 10 | pull-requests: write 11 | 12 | jobs: 13 | auto-update: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout repository 18 | uses: actions/checkout@v4 19 | with: 20 | token: ${{ secrets.GITHUB_TOKEN }} 21 | fetch-depth: 0 # Fetch all history for proper diff 22 | 23 | - name: Setup Node.js 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: '18' 27 | 28 | - name: Fetch base branch 29 | run: git fetch origin ${{ github.base_ref }} 30 | 31 | - name: Run update README script 32 | run: node scripts/update-readme.js 33 | 34 | - name: Generate updates from diff 35 | run: node scripts/generate-update-from-diff.js 36 | 37 | - name: Commit and push if changed 38 | run: | 39 | git config --local user.email "github-actions[bot]@users.noreply.github.com" 40 | git config --local user.name "github-actions[bot]" 41 | git add README.md data/updates.json public/rss.xml 42 | 43 | # Check if there are changes 44 | if ! git diff --staged --quiet; then 45 | git commit -m "chore: auto-update README, updates and RSS from repos.csv" 46 | git push origin HEAD:${{ github.head_ref }} 47 | fi 48 | -------------------------------------------------------------------------------- /lib/csv.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import Papa from 'papaparse'; 4 | 5 | export interface Job { 6 | repository: string; 7 | companyName: string; 8 | companyUrl: string; 9 | description: string; 10 | jobPage: string; 11 | tags: string[]; 12 | language: string; 13 | } 14 | 15 | export async function getJobs(): Promise { 16 | const filePath = path.join(process.cwd(), 'repos.csv'); 17 | const fileContent = fs.readFileSync(filePath, 'utf8'); 18 | 19 | const { data } = Papa.parse(fileContent, { 20 | header: true, 21 | skipEmptyLines: true, 22 | transformHeader: (header) => { 23 | // Map CSV headers to interface keys 24 | const headerMap: Record = { 25 | 'Repository': 'repository', 26 | 'Company Name': 'companyName', 27 | 'Company URL': 'companyUrl', 28 | 'Description': 'description', 29 | 'Career URL': 'jobPage', 30 | 'Tags': 'tags', 31 | 'Language': 'language' 32 | }; 33 | return headerMap[header] || header; 34 | }, 35 | transform: (value) => { 36 | // Trim whitespace from all field values 37 | return value.trim(); 38 | } 39 | }); 40 | 41 | return data.map((job: any) => ({ 42 | ...job, 43 | tags: job.tags ? job.tags.split(',').map((t: string) => t.trim()).filter(Boolean) : [], 44 | language: job.language || '' 45 | })) as Job[]; 46 | } 47 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import { Geist, Geist_Mono } from "next/font/google"; 3 | import "./globals.css"; 4 | 5 | const geistSans = Geist({ 6 | variable: "--font-geist-sans", 7 | subsets: ["latin"], 8 | }); 9 | 10 | const geistMono = Geist_Mono({ 11 | variable: "--font-geist-mono", 12 | subsets: ["latin"], 13 | }); 14 | 15 | export const metadata: Metadata = { 16 | title: "Open Source Jobs", 17 | description: "A list of companies that hire for open source roles.", 18 | icons: { 19 | icon: "/favicon.ico", 20 | }, 21 | metadataBase: new URL("https://open-source-jobs.com"), 22 | openGraph: { 23 | title: "Open Source Jobs", 24 | description: "A list of companies that hire for open source roles.", 25 | url: "https://open-source-jobs.com", 26 | siteName: "Open Source Jobs", 27 | locale: "en_US", 28 | type: "website", 29 | images: [ 30 | { 31 | url: "/og-image.svg", 32 | width: 1200, 33 | height: 630, 34 | alt: "Open Source Jobs", 35 | }, 36 | ], 37 | }, 38 | twitter: { 39 | card: "summary_large_image", 40 | title: "Open Source Jobs", 41 | description: "A list of companies that hire for open source roles.", 42 | images: ["/og-image.svg"], 43 | }, 44 | }; 45 | 46 | export default function RootLayout({ 47 | children, 48 | }: Readonly<{ 49 | children: React.ReactNode; 50 | }>) { 51 | return ( 52 | 53 | 54 | 60 | 61 | 64 | {children} 65 | 66 | 67 | ); 68 | } 69 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import { getJobs } from "@/lib/csv"; 2 | import { JobList } from "@/components/job-list"; 3 | import { PostJobModal } from "@/components/post-job-modal"; 4 | import { Nav } from "@/components/nav"; 5 | 6 | export default async function Home() { 7 | const jobs = await getJobs(); 8 | 9 | return ( 10 |
11 | {/* Background decoration */} 12 |
13 |
14 |
15 |
16 | 17 | {/* Navigation */} 18 |
40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /public/rss.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Open Source Jobs - Updates 5 | https://open-source-jobs.com 6 | Latest job opportunities from open source projects 7 | en-us 8 | Fri, 28 Nov 2025 01:52:15 GMT 9 | 10 | 11 | 12 | Merge 4fe7943fc3cf1f7cdcfec7228d2a437a24832928 into eff6f8413cdc3757f822b4b17f673ac12a05e683 13 | https://github.com/timqian/open-source-jobs/commit/25feed22ae211f941debc5f881a38ae881536d5d 14 | 25feed22ae211f941debc5f881a38ae881536d5d 15 | Fri, 28 Nov 2025 01:46:43 GMT 16 | Added 1 repository:]]> 17 | 18 | 19 | Add openedx/edx-platform repository (#151) 20 | https://github.com/timqian/open-source-jobs/commit/7d71f69378b5f4a2ce7d7ea3216b37f73e538443 21 | 7d71f69378b5f4a2ce7d7ea3216b37f73e538443 22 | Thu, 27 Nov 2025 02:42:53 GMT 23 | Added 1 repository:]]> 24 | 25 | 26 | Add maximhq/bifrost 27 | https://github.com/timqian/open-source-jobs/commit/a23a2f9288f11d627061a7c13d29d21f1ed6b776 28 | a23a2f9288f11d627061a7c13d29d21f1ed6b776 29 | Wed, 26 Nov 2025 07:04:40 GMT 30 | Added 1 repository:
  • maximhq/bifrost by Maxim AI
    Bifrost is a high-performance open source LLM gateway that connects 1000+ models through a single API interface with extremely high throughput.
    Apply for job
]]>
31 |
32 |
33 |
-------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new-repository.yml: -------------------------------------------------------------------------------- 1 | name: Add New Repository 2 | description: Submit a new open source repository with job opportunities 3 | title: "[New Repo]: " 4 | labels: ["new-repository"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thanks for taking the time to add a new repository! Please fill out the form below. 10 | 11 | - type: input 12 | id: repository 13 | attributes: 14 | label: Repository 15 | description: GitHub repository (e.g., facebook/react) 16 | placeholder: "organization/repository" 17 | validations: 18 | required: true 19 | 20 | - type: input 21 | id: company-name 22 | attributes: 23 | label: Company Name 24 | description: Name of the company hiring for this project 25 | placeholder: "e.g., Meta" 26 | validations: 27 | required: true 28 | 29 | - type: input 30 | id: company-url 31 | attributes: 32 | label: Company URL 33 | description: Official company website 34 | placeholder: "https://www.company.com" 35 | validations: 36 | required: true 37 | 38 | - type: input 39 | id: career-url 40 | attributes: 41 | label: Career/Job Page URL 42 | description: Direct link to the company's careers page or job listings 43 | placeholder: "https://www.company.com/careers" 44 | validations: 45 | required: true 46 | 47 | - type: textarea 48 | id: description 49 | attributes: 50 | label: Repository Description 51 | description: Brief description of the repository 52 | placeholder: "A declarative, efficient, and flexible JavaScript library for building user interfaces." 53 | validations: 54 | required: true 55 | 56 | - type: input 57 | id: language 58 | attributes: 59 | label: Primary Language 60 | description: Main programming language used in the repository 61 | placeholder: "JavaScript" 62 | validations: 63 | required: true 64 | 65 | - type: input 66 | id: tags 67 | attributes: 68 | label: Tags 69 | description: Comma-separated tags (e.g., frontend, react, ui, library) 70 | placeholder: "frontend, react, ui, library" 71 | validations: 72 | required: true 73 | 74 | - type: checkboxes 75 | id: verification 76 | attributes: 77 | label: Verification 78 | description: Please confirm the following 79 | options: 80 | - label: This repository is actively maintained and the company is currently hiring 81 | required: true 82 | - label: I have verified that the career/job page URL is correct and active 83 | required: true 84 | - label: This repository is not already in the list 85 | required: true 86 | 87 | - type: markdown 88 | attributes: 89 | value: | 90 | --- 91 | 92 | ### What happens next? 93 | 94 | Once you submit this issue, a maintainer will review your submission and add the repository to the CSV file if it meets the criteria. Thank you for contributing! 95 | -------------------------------------------------------------------------------- /data/updates.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "25feed22ae211f941debc5f881a38ae881536d5d", 4 | "type": "repo-update", 5 | "title": "Merge 4fe7943fc3cf1f7cdcfec7228d2a437a24832928 into eff6f8413cdc3757f822b4b17f673ac12a05e683", 6 | "message": "Merge 4fe7943fc3cf1f7cdcfec7228d2a437a24832928 into eff6f8413cdc3757f822b4b17f673ac12a05e683", 7 | "date": "2025-11-28T01:46:43.000Z", 8 | "html_url": "https://github.com/timqian/open-source-jobs/commit/25feed22ae211f941debc5f881a38ae881536d5d", 9 | "author": { 10 | "login": "Copilot", 11 | "email": "198982749+Copilot@users.noreply.github.com", 12 | "avatar_url": null, 13 | "html_url": null 14 | }, 15 | "changes": { 16 | "added": [ 17 | { 18 | "repository": "penpot/penpot", 19 | "companyName": "Penpot", 20 | "companyUrl": "https://penpot.app", 21 | "careerUrl": "https://penpot.app/careers", 22 | "tags": "design, clojure, ui, clojurescript, prototyping, ux-experience, ux-design", 23 | "language": "Clojure", 24 | "description": "Penpot: The open-source design tool for design and code collaboration" 25 | } 26 | ], 27 | "removed": [] 28 | } 29 | }, 30 | { 31 | "id": "7d71f69378b5f4a2ce7d7ea3216b37f73e538443", 32 | "type": "repo-update", 33 | "title": "Add openedx/edx-platform repository (#151)", 34 | "message": "Add openedx/edx-platform repository (#151)", 35 | "date": "2025-11-27T02:42:53.000Z", 36 | "html_url": "https://github.com/timqian/open-source-jobs/commit/7d71f69378b5f4a2ce7d7ea3216b37f73e538443", 37 | "author": { 38 | "login": "Copilot", 39 | "email": "198982749+Copilot@users.noreply.github.com", 40 | "avatar_url": null, 41 | "html_url": null 42 | }, 43 | "changes": { 44 | "added": [ 45 | { 46 | "repository": "openedx/edx-platform", 47 | "companyName": "OpenCraft", 48 | "companyUrl": "https://opencraft.com/", 49 | "careerUrl": "https://opencraft.com/jobs/", 50 | "tags": "edx, education", 51 | "language": "Python", 52 | "description": "The Open edX LMS & Studio" 53 | } 54 | ], 55 | "removed": [] 56 | } 57 | }, 58 | { 59 | "id": "a23a2f9288f11d627061a7c13d29d21f1ed6b776", 60 | "type": "repo-update", 61 | "title": "Add maximhq/bifrost", 62 | "message": "Add maximhq/bifrost", 63 | "date": "2025-11-26T07:04:40.000Z", 64 | "html_url": "https://github.com/timqian/open-source-jobs/commit/a23a2f9288f11d627061a7c13d29d21f1ed6b776", 65 | "author": { 66 | "login": "timqian", 67 | "email": "timqian@t9t.io", 68 | "avatar_url": null, 69 | "html_url": null 70 | }, 71 | "changes": { 72 | "added": [ 73 | { 74 | "repository": "maximhq/bifrost", 75 | "companyName": "Maxim AI", 76 | "companyUrl": "https://www.getmaxim.ai", 77 | "careerUrl": "https://www.getmaxim.ai/careers", 78 | "tags": "gateway, llm, mcp-server", 79 | "language": "Go", 80 | "description": "Bifrost is a high-performance open source LLM gateway that connects 1000+ models through a single API interface with extremely high throughput." 81 | } 82 | ], 83 | "removed": [] 84 | } 85 | } 86 | ] -------------------------------------------------------------------------------- /scripts/update-repos.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | import Papa from 'papaparse'; 5 | 6 | const GITHUB_API_BASE = 'https://api.github.com/repos'; 7 | 8 | interface RepoData { 9 | Repository: string; 10 | Description: string; 11 | 'Job Page': string; 12 | Tags?: string; 13 | Language?: string; 14 | } 15 | 16 | async function fetchRepoData(repo: string): Promise<{ topics: string[]; language: string; description: string }> { 17 | try { 18 | const headers: HeadersInit = { 19 | 'User-Agent': 'open-source-jobs-updater', 20 | 'Accept': 'application/vnd.github.mercy-preview+json' // For topics 21 | }; 22 | 23 | if (process.env.GITHUB_TOKEN) { 24 | headers['Authorization'] = `token ${process.env.GITHUB_TOKEN}`; 25 | } 26 | 27 | const response = await fetch(`${GITHUB_API_BASE}/${repo}`, { headers }); 28 | 29 | if (!response.ok) { 30 | if (response.status === 403) { 31 | console.warn(`Rate limit exceeded or forbidden for ${repo}. Status: ${response.status}`); 32 | // Return empty data to continue processing other repos or partial data 33 | return { topics: [], language: '', description: '' }; 34 | } 35 | if (response.status === 404) { 36 | console.warn(`Repo not found: ${repo}`); 37 | return { topics: [], language: '', description: '' }; 38 | } 39 | throw new Error(`Failed to fetch ${repo}: ${response.statusText}`); 40 | } 41 | 42 | const data = await response.json(); 43 | return { 44 | topics: data.topics || [], 45 | language: data.language || '', 46 | description: data.description || '' 47 | }; 48 | } catch (error) { 49 | console.error(`Error fetching ${repo}:`, error); 50 | return { topics: [], language: '', description: '' }; 51 | } 52 | } 53 | 54 | async function main() { 55 | const csvPath = path.join(process.cwd(), 'repos.csv'); 56 | const csvContent = fs.readFileSync(csvPath, 'utf8'); 57 | 58 | const { data, meta } = Papa.parse(csvContent, { 59 | header: true, 60 | skipEmptyLines: true 61 | }); 62 | 63 | const updatedData: RepoData[] = []; 64 | 65 | console.log(`Processing ${data.length} repositories...`); 66 | 67 | for (const [index, row] of data.entries()) { 68 | const repo = row.Repository; 69 | if (!repo) continue; 70 | 71 | console.log(`[${index + 1}/${data.length}] Fetching data for ${repo}...`); 72 | 73 | // Add a small delay to be nice to the API 74 | await new Promise(resolve => setTimeout(resolve, 500)); 75 | 76 | const { topics, language, description } = await fetchRepoData(repo); 77 | 78 | updatedData.push({ 79 | ...row, 80 | Description: description || row.Description, // Keep original if fetch fails or is empty 81 | Tags: topics.join(', '), 82 | Language: language 83 | }); 84 | } 85 | 86 | const newCsv = Papa.unparse(updatedData, { 87 | columns: ['Repository', 'Description', 'Job Page', 'Tags', 'Language'] 88 | }); 89 | 90 | fs.writeFileSync(csvPath, newCsv); 91 | console.log('Successfully updated repos.csv with Tags and Language.'); 92 | } 93 | 94 | main().catch(console.error); 95 | -------------------------------------------------------------------------------- /components/ui/table.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Table = React.forwardRef< 6 | HTMLTableElement, 7 | React.HTMLAttributes 8 | >(({ className, ...props }, ref) => ( 9 |
10 | 15 | 16 | )) 17 | Table.displayName = "Table" 18 | 19 | const TableHeader = React.forwardRef< 20 | HTMLTableSectionElement, 21 | React.HTMLAttributes 22 | >(({ className, ...props }, ref) => ( 23 | 24 | )) 25 | TableHeader.displayName = "TableHeader" 26 | 27 | const TableBody = React.forwardRef< 28 | HTMLTableSectionElement, 29 | React.HTMLAttributes 30 | >(({ className, ...props }, ref) => ( 31 | 36 | )) 37 | TableBody.displayName = "TableBody" 38 | 39 | const TableFooter = React.forwardRef< 40 | HTMLTableSectionElement, 41 | React.HTMLAttributes 42 | >(({ className, ...props }, ref) => ( 43 | tr]:last:border-b-0", 47 | className 48 | )} 49 | {...props} 50 | /> 51 | )) 52 | TableFooter.displayName = "TableFooter" 53 | 54 | const TableRow = React.forwardRef< 55 | HTMLTableRowElement, 56 | React.HTMLAttributes 57 | >(({ className, ...props }, ref) => ( 58 | 66 | )) 67 | TableRow.displayName = "TableRow" 68 | 69 | const TableHead = React.forwardRef< 70 | HTMLTableCellElement, 71 | React.ThHTMLAttributes 72 | >(({ className, ...props }, ref) => ( 73 |
81 | )) 82 | TableHead.displayName = "TableHead" 83 | 84 | const TableCell = React.forwardRef< 85 | HTMLTableCellElement, 86 | React.TdHTMLAttributes 87 | >(({ className, ...props }, ref) => ( 88 | 93 | )) 94 | TableCell.displayName = "TableCell" 95 | 96 | const TableCaption = React.forwardRef< 97 | HTMLTableCaptionElement, 98 | React.HTMLAttributes 99 | >(({ className, ...props }, ref) => ( 100 |
105 | )) 106 | TableCaption.displayName = "TableCaption" 107 | 108 | export { 109 | Table, 110 | TableHeader, 111 | TableBody, 112 | TableFooter, 113 | TableHead, 114 | TableRow, 115 | TableCell, 116 | TableCaption, 117 | } 118 | -------------------------------------------------------------------------------- /.github/workflows/nextjs.yml: -------------------------------------------------------------------------------- 1 | # Sample workflow for building and deploying a Next.js site to GitHub Pages 2 | # 3 | # To get started with Next.js see: https://nextjs.org/docs/getting-started 4 | # 5 | name: Deploy Next.js site to Pages 6 | 7 | on: 8 | # Runs on pushes targeting the default branch 9 | push: 10 | branches: ["main"] 11 | 12 | # Allows you to run this workflow manually from the Actions tab 13 | workflow_dispatch: 14 | 15 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 16 | permissions: 17 | contents: read 18 | pages: write 19 | id-token: write 20 | 21 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 22 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 23 | concurrency: 24 | group: "pages" 25 | cancel-in-progress: false 26 | 27 | jobs: 28 | # Build job 29 | build: 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v4 34 | - name: Detect package manager 35 | id: detect-package-manager 36 | run: | 37 | if [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then 38 | echo "manager=pnpm" >> $GITHUB_OUTPUT 39 | echo "command=install" >> $GITHUB_OUTPUT 40 | echo "runner=pnpm" >> $GITHUB_OUTPUT 41 | exit 0 42 | elif [ -f "${{ github.workspace }}/yarn.lock" ]; then 43 | echo "manager=yarn" >> $GITHUB_OUTPUT 44 | echo "command=install" >> $GITHUB_OUTPUT 45 | echo "runner=yarn" >> $GITHUB_OUTPUT 46 | exit 0 47 | elif [ -f "${{ github.workspace }}/package.json" ]; then 48 | echo "manager=npm" >> $GITHUB_OUTPUT 49 | echo "command=ci" >> $GITHUB_OUTPUT 50 | echo "runner=npx --no-install" >> $GITHUB_OUTPUT 51 | exit 0 52 | else 53 | echo "Unable to determine package manager" 54 | exit 1 55 | fi 56 | - name: Setup pnpm 57 | if: steps.detect-package-manager.outputs.manager == 'pnpm' 58 | uses: pnpm/action-setup@v3 59 | with: 60 | version: 8 61 | - name: Setup Node 62 | uses: actions/setup-node@v4 63 | with: 64 | node-version: "20" 65 | cache: ${{ steps.detect-package-manager.outputs.manager }} 66 | - name: Setup Pages 67 | uses: actions/configure-pages@v5 68 | - name: Restore cache 69 | uses: actions/cache@v4 70 | with: 71 | path: | 72 | .next/cache 73 | # Generate a new cache whenever packages or source files change. 74 | key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} 75 | # If source files changed but packages didn't, rebuild from a prior cache. 76 | restore-keys: | 77 | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml') }}- 78 | - name: Install dependencies 79 | run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} 80 | - name: Build with Next.js 81 | run: ${{ steps.detect-package-manager.outputs.runner }} next build 82 | - name: Upload artifact 83 | uses: actions/upload-pages-artifact@v3 84 | with: 85 | path: ./out 86 | 87 | # Deployment job 88 | deploy: 89 | environment: 90 | name: github-pages 91 | url: ${{ steps.deployment.outputs.page_url }} 92 | runs-on: ubuntu-latest 93 | needs: build 94 | steps: 95 | - name: Deploy to GitHub Pages 96 | id: deployment 97 | uses: actions/deploy-pages@v4 98 | -------------------------------------------------------------------------------- /scripts/update-readme.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | // 读取 repos.csv 5 | const csvPath = path.join(__dirname, '..', 'repos.csv'); 6 | const csvContent = fs.readFileSync(csvPath, 'utf8'); 7 | 8 | // 解析 CSV(简单解析,处理引号内的逗号) 9 | function parseCSVLine(line) { 10 | const result = []; 11 | let current = ''; 12 | let inQuotes = false; 13 | 14 | for (let i = 0; i < line.length; i++) { 15 | const char = line[i]; 16 | 17 | if (char === '"') { 18 | inQuotes = !inQuotes; 19 | } else if (char === ',' && !inQuotes) { 20 | result.push(current.trim()); 21 | current = ''; 22 | } else { 23 | current += char; 24 | } 25 | } 26 | 27 | result.push(current.trim()); 28 | return result; 29 | } 30 | 31 | // 解析所有行 32 | const lines = csvContent.split('\n').map(line => line.replace(/\r$/, '')); 33 | const headers = parseCSVLine(lines[0]); 34 | 35 | // 找到需要的列的索引 36 | const repoIndex = headers.indexOf('Repository'); 37 | const companyNameIndex = headers.indexOf('Company Name'); 38 | const companyUrlIndex = headers.indexOf('Company URL'); 39 | const descIndex = headers.indexOf('Description'); 40 | const careerUrlIndex = headers.indexOf('Career URL'); 41 | 42 | // 收集所有数据行 43 | const rows = []; 44 | for (let i = 1; i < lines.length; i++) { 45 | const line = lines[i]; 46 | if (!line.trim()) continue; // 跳过空行 47 | 48 | const columns = parseCSVLine(line); 49 | const repo = columns[repoIndex] || ''; 50 | const companyName = columns[companyNameIndex] || ''; 51 | const companyUrl = columns[companyUrlIndex] || ''; 52 | const desc = columns[descIndex] || ''; 53 | const careerUrl = columns[careerUrlIndex] || ''; 54 | 55 | rows.push({ 56 | repo, 57 | companyName, 58 | companyUrl, 59 | desc, 60 | careerUrl 61 | }); 62 | } 63 | 64 | // 按照公司名称字母顺序排序 65 | rows.sort((a, b) => a.companyName.localeCompare(b.companyName)); 66 | 67 | // 生成 Markdown 表格 68 | let markdownTable = '\n## Job List\n\n'; 69 | markdownTable += '> **Note:** This list is auto-generated. [Better view](https://open-source-jobs.com) | [Edit list](repos.csv) | [Add new repo](https://github.com/timqian/open-source-jobs/issues/new?template=new-repository.yml)\n\n'; 70 | markdownTable += '| Company | Repository | Job Page |\n'; 71 | markdownTable += '|---------|------------|----------|\n'; 72 | 73 | // 生成表格行 74 | for (const row of rows) { 75 | // Company 列:公司名称链接 76 | const companyLink = `[${row.companyName}](${row.companyUrl})`; 77 | 78 | // Repository 列:仓库链接 + star badge + 描述 79 | const repoUrl = row.repo.includes('http') ? row.repo : `https://github.com/${row.repo}`; 80 | const repoLink = `[${row.repo}](${repoUrl})`; 81 | const starBadge = `![Stars](https://img.shields.io/github/stars/${row.repo}?style=social&label=%20)`; 82 | 83 | // 使用
在同一单元格内换行 84 | const repoContent = `${repoLink} ${starBadge}
${row.desc}`; 85 | 86 | // Job Page 列 87 | const jobLink = row.careerUrl ? `[Apply](${row.careerUrl})` : ''; 88 | 89 | markdownTable += `| ${companyLink} | ${repoContent} | ${jobLink} |\n`; 90 | } 91 | 92 | // 读取现有的 README 93 | const readmePath = path.join(__dirname, '..', 'README.md'); 94 | let readmeContent = fs.readFileSync(readmePath, 'utf8'); 95 | 96 | // 移除旧的 Job List 部分(如果存在) 97 | const jobListStart = readmeContent.indexOf('## Job List'); 98 | if (jobListStart !== -1) { 99 | readmeContent = readmeContent.substring(0, jobListStart).trim(); 100 | } 101 | 102 | // 追加新的表格 103 | readmeContent += markdownTable; 104 | 105 | // 写入 README 106 | fs.writeFileSync(readmePath, readmeContent, 'utf8'); 107 | 108 | console.log('✅ README.md updated with job list!'); 109 | console.log(`📊 Added ${lines.length - 1} jobs`); 110 | -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss"; 2 | @import "tw-animate-css"; 3 | 4 | @custom-variant dark (&:is(.dark *)); 5 | 6 | @theme inline { 7 | --color-background: var(--background); 8 | --color-foreground: var(--foreground); 9 | --font-sans: var(--font-geist-sans); 10 | --font-mono: var(--font-geist-mono); 11 | --color-sidebar-ring: var(--sidebar-ring); 12 | --color-sidebar-border: var(--sidebar-border); 13 | --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); 14 | --color-sidebar-accent: var(--sidebar-accent); 15 | --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); 16 | --color-sidebar-primary: var(--sidebar-primary); 17 | --color-sidebar-foreground: var(--sidebar-foreground); 18 | --color-sidebar: var(--sidebar); 19 | --color-chart-5: var(--chart-5); 20 | --color-chart-4: var(--chart-4); 21 | --color-chart-3: var(--chart-3); 22 | --color-chart-2: var(--chart-2); 23 | --color-chart-1: var(--chart-1); 24 | --color-ring: var(--ring); 25 | --color-input: var(--input); 26 | --color-border: var(--border); 27 | --color-destructive: var(--destructive); 28 | --color-accent-foreground: var(--accent-foreground); 29 | --color-accent: var(--accent); 30 | --color-muted-foreground: var(--muted-foreground); 31 | --color-muted: var(--muted); 32 | --color-secondary-foreground: var(--secondary-foreground); 33 | --color-secondary: var(--secondary); 34 | --color-primary-foreground: var(--primary-foreground); 35 | --color-primary: var(--primary); 36 | --color-popover-foreground: var(--popover-foreground); 37 | --color-popover: var(--popover); 38 | --color-card-foreground: var(--card-foreground); 39 | --color-card: var(--card); 40 | --radius-sm: calc(var(--radius) - 4px); 41 | --radius-md: calc(var(--radius) - 2px); 42 | --radius-lg: var(--radius); 43 | --radius-xl: calc(var(--radius) + 4px); 44 | } 45 | 46 | :root { 47 | --radius: 0.625rem; 48 | --background: oklch(1 0 0); 49 | --foreground: oklch(0.145 0 0); 50 | --card: oklch(1 0 0); 51 | --card-foreground: oklch(0.145 0 0); 52 | --popover: oklch(1 0 0); 53 | --popover-foreground: oklch(0.145 0 0); 54 | --primary: oklch(0.205 0 0); 55 | --primary-foreground: oklch(0.985 0 0); 56 | --secondary: oklch(0.97 0 0); 57 | --secondary-foreground: oklch(0.205 0 0); 58 | --muted: oklch(0.97 0 0); 59 | --muted-foreground: oklch(0.556 0 0); 60 | --accent: oklch(0.97 0 0); 61 | --accent-foreground: oklch(0.205 0 0); 62 | --destructive: oklch(0.577 0.245 27.325); 63 | --border: oklch(0.922 0 0); 64 | --input: oklch(0.922 0 0); 65 | --ring: oklch(0.708 0 0); 66 | --chart-1: oklch(0.646 0.222 41.116); 67 | --chart-2: oklch(0.6 0.118 184.704); 68 | --chart-3: oklch(0.398 0.07 227.392); 69 | --chart-4: oklch(0.828 0.189 84.429); 70 | --chart-5: oklch(0.769 0.188 70.08); 71 | --sidebar: oklch(0.985 0 0); 72 | --sidebar-foreground: oklch(0.145 0 0); 73 | --sidebar-primary: oklch(0.205 0 0); 74 | --sidebar-primary-foreground: oklch(0.985 0 0); 75 | --sidebar-accent: oklch(0.97 0 0); 76 | --sidebar-accent-foreground: oklch(0.205 0 0); 77 | --sidebar-border: oklch(0.922 0 0); 78 | --sidebar-ring: oklch(0.708 0 0); 79 | } 80 | 81 | .dark { 82 | --background: oklch(0.145 0 0); 83 | --foreground: oklch(0.985 0 0); 84 | --card: oklch(0.205 0 0); 85 | --card-foreground: oklch(0.985 0 0); 86 | --popover: oklch(0.205 0 0); 87 | --popover-foreground: oklch(0.985 0 0); 88 | --primary: oklch(0.922 0 0); 89 | --primary-foreground: oklch(0.205 0 0); 90 | --secondary: oklch(0.269 0 0); 91 | --secondary-foreground: oklch(0.985 0 0); 92 | --muted: oklch(0.269 0 0); 93 | --muted-foreground: oklch(0.708 0 0); 94 | --accent: oklch(0.269 0 0); 95 | --accent-foreground: oklch(0.985 0 0); 96 | --destructive: oklch(0.704 0.191 22.216); 97 | --border: oklch(1 0 0 / 10%); 98 | --input: oklch(1 0 0 / 15%); 99 | --ring: oklch(0.556 0 0); 100 | --chart-1: oklch(0.488 0.243 264.376); 101 | --chart-2: oklch(0.696 0.17 162.48); 102 | --chart-3: oklch(0.769 0.188 70.08); 103 | --chart-4: oklch(0.627 0.265 303.9); 104 | --chart-5: oklch(0.645 0.246 16.439); 105 | --sidebar: oklch(0.205 0 0); 106 | --sidebar-foreground: oklch(0.985 0 0); 107 | --sidebar-primary: oklch(0.488 0.243 264.376); 108 | --sidebar-primary-foreground: oklch(0.985 0 0); 109 | --sidebar-accent: oklch(0.269 0 0); 110 | --sidebar-accent-foreground: oklch(0.985 0 0); 111 | --sidebar-border: oklch(1 0 0 / 10%); 112 | --sidebar-ring: oklch(0.556 0 0); 113 | } 114 | 115 | @layer base { 116 | * { 117 | @apply border-border outline-ring/50; 118 | } 119 | 120 | body { 121 | @apply bg-background text-foreground; 122 | } 123 | } 124 | 125 | @keyframes fade-in { 126 | from { 127 | opacity: 0; 128 | transform: translateY(10px); 129 | } 130 | 131 | to { 132 | opacity: 1; 133 | transform: translateY(0); 134 | } 135 | } 136 | 137 | .animate-fade-in { 138 | animation: fade-in 0.6s ease-out forwards; 139 | } -------------------------------------------------------------------------------- /components/nav.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useState } from "react"; 4 | import Image from "next/image"; 5 | // import { PostJobModal } from "./post-job-modal"; 6 | 7 | export function Nav() { 8 | const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); 9 | 10 | return ( 11 | 131 | ); 132 | } 133 | -------------------------------------------------------------------------------- /components/ui/select.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as SelectPrimitive from "@radix-ui/react-select" 5 | import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react" 6 | 7 | import { cn } from "@/lib/utils" 8 | 9 | function Select({ 10 | ...props 11 | }: React.ComponentProps) { 12 | return 13 | } 14 | 15 | function SelectGroup({ 16 | ...props 17 | }: React.ComponentProps) { 18 | return 19 | } 20 | 21 | function SelectValue({ 22 | ...props 23 | }: React.ComponentProps) { 24 | return 25 | } 26 | 27 | function SelectTrigger({ 28 | className, 29 | size = "default", 30 | children, 31 | ...props 32 | }: React.ComponentProps & { 33 | size?: "sm" | "default" 34 | }) { 35 | return ( 36 | 45 | {children} 46 | 47 | 48 | 49 | 50 | ) 51 | } 52 | 53 | function SelectContent({ 54 | className, 55 | children, 56 | position = "popper", 57 | align = "center", 58 | ...props 59 | }: React.ComponentProps) { 60 | return ( 61 | 62 | 74 | 75 | 82 | {children} 83 | 84 | 85 | 86 | 87 | ) 88 | } 89 | 90 | function SelectLabel({ 91 | className, 92 | ...props 93 | }: React.ComponentProps) { 94 | return ( 95 | 100 | ) 101 | } 102 | 103 | function SelectItem({ 104 | className, 105 | children, 106 | ...props 107 | }: React.ComponentProps) { 108 | return ( 109 | 117 | 118 | 119 | 120 | 121 | 122 | {children} 123 | 124 | ) 125 | } 126 | 127 | function SelectSeparator({ 128 | className, 129 | ...props 130 | }: React.ComponentProps) { 131 | return ( 132 | 137 | ) 138 | } 139 | 140 | function SelectScrollUpButton({ 141 | className, 142 | ...props 143 | }: React.ComponentProps) { 144 | return ( 145 | 153 | 154 | 155 | ) 156 | } 157 | 158 | function SelectScrollDownButton({ 159 | className, 160 | ...props 161 | }: React.ComponentProps) { 162 | return ( 163 | 171 | 172 | 173 | ) 174 | } 175 | 176 | export { 177 | Select, 178 | SelectContent, 179 | SelectGroup, 180 | SelectItem, 181 | SelectLabel, 182 | SelectScrollDownButton, 183 | SelectScrollUpButton, 184 | SelectSeparator, 185 | SelectTrigger, 186 | SelectValue, 187 | } 188 | -------------------------------------------------------------------------------- /components/post-job-modal.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useState, useEffect } from "react"; 4 | import { createPortal } from "react-dom"; 5 | 6 | export function PostJobModal() { 7 | const [isOpen, setIsOpen] = useState(false); 8 | const [mounted, setMounted] = useState(false); 9 | 10 | useEffect(() => { 11 | setMounted(true); 12 | }, []); 13 | 14 | const modalContent = isOpen ? ( 15 |
setIsOpen(false)} 18 | > 19 |
e.stopPropagation()} 22 | > 23 |
24 |

25 | {/* Post a Job */} 26 |

27 | 35 |
36 | 37 | 105 | 106 |
107 |

108 | Questions? Email us at{" "} 109 | 110 | timqian@t9t.io 111 | 112 |

113 |
114 |
115 |
116 | ) : null; 117 | 118 | return ( 119 | <> 120 | 126 | 127 | {mounted && modalContent && createPortal(modalContent, document.body)} 128 | 129 | ); 130 | } 131 | -------------------------------------------------------------------------------- /scripts/fetch-releases.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const { execSync } = require('child_process'); 4 | 5 | function parseCSVLine(line) { 6 | const result = []; 7 | let current = ''; 8 | let inQuotes = false; 9 | 10 | for (let i = 0; i < line.length; i++) { 11 | const char = line[i]; 12 | 13 | if (char === '"') { 14 | inQuotes = !inQuotes; 15 | } else if (char === ',' && !inQuotes) { 16 | result.push(current.trim()); 17 | current = ''; 18 | } else { 19 | current += char; 20 | } 21 | } 22 | 23 | result.push(current.trim()); 24 | return result; 25 | } 26 | 27 | async function fetchRepoUpdates() { 28 | console.log('Fetching repos.csv change history...'); 29 | 30 | try { 31 | // Only show updates from this commit onwards (inclusive) 32 | const START_COMMIT = 'a23a2f9288f11d627061a7c13d29d21f1ed6b776'; 33 | 34 | // Get git log for repos.csv file only, starting from START_COMMIT 35 | const gitLog = execSync( 36 | `git log --follow --pretty=format:"%H|%an|%ae|%at|%s" ${START_COMMIT}^..HEAD -- repos.csv`, 37 | { encoding: 'utf8', cwd: path.join(__dirname, '..') } 38 | ); 39 | 40 | if (!gitLog.trim()) { 41 | console.log('No git history found for repos.csv'); 42 | return []; 43 | } 44 | 45 | const commits = gitLog.trim().split('\n'); 46 | console.log(`Found ${commits.length} commits that modified repos.csv`); 47 | 48 | const updateData = []; 49 | 50 | for (const commitLine of commits) { 51 | const [hash, author, email, timestamp, ...messageParts] = commitLine.split('|'); 52 | const message = messageParts.join('|'); 53 | 54 | try { 55 | // Get the diff for this commit 56 | const diff = execSync( 57 | `git show ${hash} -- repos.csv`, 58 | { encoding: 'utf8', cwd: path.join(__dirname, '..') } 59 | ); 60 | 61 | // Parse added lines (lines starting with +, but not +++) 62 | const addedLines = diff 63 | .split('\n') 64 | .filter(line => line.startsWith('+') && !line.startsWith('+++')) 65 | .map(line => line.substring(1).trim()) 66 | .filter(line => line && !line.startsWith('Repository,')); 67 | 68 | // Parse removed lines (lines starting with -, but not ---) 69 | const removedLines = diff 70 | .split('\n') 71 | .filter(line => line.startsWith('-') && !line.startsWith('---')) 72 | .map(line => line.substring(1).trim()) 73 | .filter(line => line && !line.startsWith('Repository,')); 74 | 75 | // Extract repository info from added lines 76 | const addedRepos = addedLines.map(line => { 77 | try { 78 | const columns = parseCSVLine(line); 79 | return { 80 | repository: columns[0] || '', 81 | companyName: columns[1] || '', 82 | companyUrl: columns[2] || '', 83 | careerUrl: columns[3] || '', 84 | tags: columns[4] || '', 85 | language: columns[5] || '', 86 | description: columns[6] || '' 87 | }; 88 | } catch (e) { 89 | return null; 90 | } 91 | }).filter(repo => repo && repo.repository); 92 | 93 | // Extract repository info from removed lines 94 | const removedRepos = removedLines.map(line => { 95 | try { 96 | const columns = parseCSVLine(line); 97 | return { 98 | repository: columns[0] || '', 99 | companyName: columns[1] || '', 100 | companyUrl: columns[2] || '', 101 | careerUrl: columns[3] || '', 102 | tags: columns[4] || '', 103 | language: columns[5] || '', 104 | description: columns[6] || '' 105 | }; 106 | } catch (e) { 107 | return null; 108 | } 109 | }).filter(repo => repo && repo.repository); 110 | 111 | if (addedRepos.length > 0 || removedRepos.length > 0) { 112 | updateData.push({ 113 | id: hash, 114 | type: 'repo-update', 115 | title: message, 116 | message: message, 117 | date: new Date(parseInt(timestamp) * 1000).toISOString(), 118 | html_url: `https://github.com/timqian/open-source-jobs/commit/${hash}`, 119 | author: { 120 | login: author, 121 | email: email, 122 | avatar_url: null, 123 | html_url: null 124 | }, 125 | changes: { 126 | added: addedRepos, 127 | removed: removedRepos 128 | } 129 | }); 130 | } 131 | } catch (error) { 132 | console.warn(`Warning: Could not process commit ${hash.substring(0, 7)}`); 133 | } 134 | } 135 | 136 | // Save to file 137 | const outputPath = path.join(__dirname, '..', 'data', 'updates.json'); 138 | 139 | // Create data directory if it doesn't exist 140 | const dataDir = path.join(__dirname, '..', 'data'); 141 | if (!fs.existsSync(dataDir)) { 142 | fs.mkdirSync(dataDir, { recursive: true }); 143 | } 144 | 145 | fs.writeFileSync(outputPath, JSON.stringify(updateData, null, 2), 'utf8'); 146 | 147 | console.log(`✅ Update data saved to ${outputPath}`); 148 | console.log(`📊 Total repo updates: ${updateData.length}`); 149 | 150 | // Show first 5 updates as preview 151 | if (updateData.length > 0) { 152 | console.log('\n📦 Most recent updates:'); 153 | updateData.slice(0, 5).forEach(update => { 154 | const addedCount = update.changes.added.length; 155 | const removedCount = update.changes.removed.length; 156 | const changesSummary = []; 157 | if (addedCount > 0) changesSummary.push(`+${addedCount} repos`); 158 | if (removedCount > 0) changesSummary.push(`-${removedCount} repos`); 159 | console.log(` - ${update.title.substring(0, 50)}${update.title.length > 50 ? '...' : ''}`); 160 | console.log(` ${changesSummary.join(', ')} (${new Date(update.date).toLocaleDateString()})`); 161 | }); 162 | } 163 | 164 | // Generate RSS feed 165 | console.log('\n📡 Generating RSS feed...'); 166 | generateRSS(updateData); 167 | 168 | } catch (error) { 169 | console.error('❌ Error fetching updates:', error.message); 170 | process.exit(1); 171 | } 172 | } 173 | 174 | function escapeXml(unsafe) { 175 | if (!unsafe) return ''; 176 | return unsafe 177 | .replace(/&/g, '&') 178 | .replace(//g, '>') 180 | .replace(/"/g, '"') 181 | .replace(/'/g, '''); 182 | } 183 | 184 | function generateRSS(updates) { 185 | try { 186 | const siteUrl = 'https://open-source-jobs.com'; 187 | const rssUrl = `${siteUrl}/rss.xml`; 188 | 189 | // Start RSS feed 190 | let rss = ` 191 | 192 | 193 | Open Source Jobs - Updates 194 | ${siteUrl} 195 | Latest job opportunities from open source projects 196 | en-us 197 | ${new Date().toUTCString()} 198 | 199 | `; 200 | 201 | // Add items 202 | updates.forEach(update => { 203 | const title = escapeXml(update.title); 204 | const link = escapeXml(update.html_url); 205 | const pubDate = new Date(update.date).toUTCString(); 206 | const guid = update.id; 207 | 208 | // Build description from repo changes 209 | let description = ''; 210 | 211 | if (update.changes) { 212 | if (update.changes.added.length > 0) { 213 | description += `

Added ${update.changes.added.length} ${update.changes.added.length === 1 ? 'repository' : 'repositories'}:

    `; 214 | 215 | update.changes.added.forEach(repo => { 216 | const repoUrl = `https://github.com/${repo.repository}`; 217 | description += `
  • `; 218 | description += `${escapeXml(repo.repository)}`; 219 | if (repo.companyName) { 220 | description += ` by ${escapeXml(repo.companyName)}`; 221 | } 222 | if (repo.description) { 223 | description += `
    ${escapeXml(repo.description)}`; 224 | } 225 | if (repo.careerUrl) { 226 | description += `
    Apply for job`; 227 | } 228 | description += `
  • `; 229 | }); 230 | 231 | description += '
'; 232 | } 233 | 234 | if (update.changes.removed.length > 0) { 235 | description += `

Removed ${update.changes.removed.length} ${update.changes.removed.length === 1 ? 'repository' : 'repositories'}

`; 236 | } 237 | } 238 | 239 | rss += ` 240 | 241 | ${title} 242 | ${link} 243 | ${guid} 244 | ${pubDate} 245 | 246 | `; 247 | }); 248 | 249 | // Close RSS feed 250 | rss += ` 251 |
252 |
`; 253 | 254 | // Write to public directory 255 | const outputPath = path.join(__dirname, '..', 'public', 'rss.xml'); 256 | fs.writeFileSync(outputPath, rss, 'utf8'); 257 | 258 | console.log(`✅ RSS feed generated at ${outputPath}`); 259 | console.log(`📊 Total RSS items: ${updates.length}`); 260 | 261 | } catch (error) { 262 | console.error('❌ Error generating RSS:', error.message); 263 | throw error; 264 | } 265 | } 266 | 267 | fetchRepoUpdates(); 268 | -------------------------------------------------------------------------------- /components/job-list.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { Job } from "@/lib/csv"; 4 | import { 5 | Table, 6 | TableBody, 7 | TableCell, 8 | TableHead, 9 | TableHeader, 10 | TableRow, 11 | } from "@/components/ui/table"; 12 | import { 13 | Select, 14 | SelectContent, 15 | SelectItem, 16 | SelectTrigger, 17 | SelectValue, 18 | } from "@/components/ui/select"; 19 | import { useState, useMemo } from "react"; 20 | 21 | interface JobListProps { 22 | jobs: Job[]; 23 | } 24 | 25 | export function JobList({ jobs }: JobListProps) { 26 | const [selectedLanguage, setSelectedLanguage] = useState("all"); 27 | const [selectedTag, setSelectedTag] = useState("all"); 28 | 29 | const languages = useMemo(() => { 30 | const langs = new Set(jobs.map((job) => job.language).filter(Boolean)); 31 | return Array.from(langs).sort(); 32 | }, [jobs]); 33 | 34 | const tags = useMemo(() => { 35 | const t = new Set(jobs.flatMap((job) => job.tags)); 36 | return Array.from(t).sort(); 37 | }, [jobs]); 38 | 39 | const filteredAndSortedJobs = useMemo(() => { 40 | let result = [...jobs]; 41 | 42 | if (selectedLanguage && selectedLanguage !== "all") { 43 | result = result.filter((job) => job.language === selectedLanguage); 44 | } 45 | 46 | if (selectedTag && selectedTag !== "all") { 47 | result = result.filter((job) => job.tags.includes(selectedTag)); 48 | } 49 | 50 | result.sort((a, b) => { 51 | return a.companyName.localeCompare(b.companyName); 52 | }); 53 | 54 | return result; 55 | }, [jobs, selectedLanguage, selectedTag]); 56 | 57 | 58 | return ( 59 |
60 | {/* Filters Section */} 61 |
62 |
63 |
64 | {/*
*/} 65 |

66 | All Repositories 67 |

68 | 69 | {filteredAndSortedJobs.length} 70 | 71 |
72 |
73 | 86 | 87 | 100 |
101 |
102 |
103 | 104 | {/* Table Section */} 105 | 106 | 107 | 108 | Company 109 | Repository 110 | Language 111 | Tags 112 | Job Page 113 | 114 | 115 | 116 | {filteredAndSortedJobs.map((job) => { 117 | const [org, repo] = job.repository.split("/"); 118 | return ( 119 | 120 | 121 | 127 | {`${job.companyName} { 132 | e.currentTarget.style.display = 'none'; 133 | }} 134 | /> 135 | {job.companyName} 136 | 137 | 138 | 139 |
140 | 158 |
159 | {job.description} 160 |
161 |
162 |
163 | 164 | {job.language && ( 165 | 166 | {job.language} 167 | 168 | )} 169 | 170 | 171 |
172 | {job.tags.slice(0, 3).map((tag) => ( 173 | 177 | {tag} 178 | 179 | ))} 180 |
181 |
182 | 183 | 189 | Apply 190 | 191 | 192 |
193 | ); 194 | })} 195 |
196 |
197 | 198 | 211 |
212 | ); 213 | } 214 | -------------------------------------------------------------------------------- /scripts/generate-update-from-diff.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const { execSync } = require('child_process'); 4 | 5 | function parseCSVLine(line) { 6 | const result = []; 7 | let current = ''; 8 | let inQuotes = false; 9 | 10 | for (let i = 0; i < line.length; i++) { 11 | const char = line[i]; 12 | 13 | if (char === '"') { 14 | inQuotes = !inQuotes; 15 | } else if (char === ',' && !inQuotes) { 16 | result.push(current.trim()); 17 | current = ''; 18 | } else { 19 | current += char; 20 | } 21 | } 22 | 23 | result.push(current.trim()); 24 | return result; 25 | } 26 | 27 | function escapeXml(unsafe) { 28 | if (!unsafe) return ''; 29 | return unsafe 30 | .replace(/&/g, '&') 31 | .replace(//g, '>') 33 | .replace(/"/g, '"') 34 | .replace(/'/g, '''); 35 | } 36 | 37 | function generateRSS(updates) { 38 | try { 39 | const siteUrl = 'https://open-source-jobs.com'; 40 | const rssUrl = `${siteUrl}/rss.xml`; 41 | 42 | let rss = ` 43 | 44 | 45 | Open Source Jobs - Updates 46 | ${siteUrl} 47 | Latest job opportunities from open source projects 48 | en-us 49 | ${new Date().toUTCString()} 50 | 51 | `; 52 | 53 | updates.forEach(update => { 54 | const title = escapeXml(update.title); 55 | const link = escapeXml(update.html_url); 56 | const pubDate = new Date(update.date).toUTCString(); 57 | const guid = update.id; 58 | 59 | let description = ''; 60 | 61 | if (update.changes) { 62 | if (update.changes.added.length > 0) { 63 | description += `

Added ${update.changes.added.length} ${update.changes.added.length === 1 ? 'repository' : 'repositories'}:

    `; 64 | 65 | update.changes.added.forEach(repo => { 66 | const repoUrl = `https://github.com/${repo.repository}`; 67 | description += `
  • `; 68 | description += `${escapeXml(repo.repository)}`; 69 | if (repo.companyName) { 70 | description += ` by ${escapeXml(repo.companyName)}`; 71 | } 72 | if (repo.description) { 73 | description += `
    ${escapeXml(repo.description)}`; 74 | } 75 | if (repo.careerUrl) { 76 | description += `
    Apply for job`; 77 | } 78 | description += `
  • `; 79 | }); 80 | 81 | description += '
'; 82 | } 83 | 84 | if (update.changes.removed.length > 0) { 85 | description += `

Removed ${update.changes.removed.length} ${update.changes.removed.length === 1 ? 'repository' : 'repositories'}

`; 86 | } 87 | } 88 | 89 | rss += ` 90 | 91 | ${title} 92 | ${link} 93 | ${guid} 94 | ${pubDate} 95 | 96 | `; 97 | }); 98 | 99 | rss += ` 100 |
101 |
`; 102 | 103 | const outputPath = path.join(__dirname, '..', 'public', 'rss.xml'); 104 | fs.writeFileSync(outputPath, rss, 'utf8'); 105 | 106 | console.log(`✅ RSS feed generated`); 107 | } catch (error) { 108 | console.error('❌ Error generating RSS:', error.message); 109 | throw error; 110 | } 111 | } 112 | 113 | async function generateUpdateFromDiff() { 114 | console.log('Generating update from repos.csv diff...'); 115 | 116 | try { 117 | const rootDir = path.join(__dirname, '..'); 118 | 119 | // Determine what to compare 120 | // In GitHub Actions PR: compare base branch with HEAD 121 | // In GitHub Actions push: compare HEAD~1 with HEAD 122 | // Locally: compare HEAD~1 with HEAD 123 | const baseBranch = process.env.GITHUB_BASE_REF; 124 | let diffCommand; 125 | 126 | if (baseBranch) { 127 | // In a PR 128 | console.log(`Comparing against base branch: origin/${baseBranch}`); 129 | diffCommand = `git diff origin/${baseBranch}...HEAD -- repos.csv`; 130 | } else { 131 | // Direct push or local 132 | console.log('Comparing HEAD~1...HEAD'); 133 | diffCommand = `git diff HEAD~1 HEAD -- repos.csv`; 134 | } 135 | 136 | const diff = execSync(diffCommand, { 137 | encoding: 'utf8', 138 | cwd: rootDir 139 | }); 140 | 141 | if (!diff.trim()) { 142 | console.log('No changes detected in repos.csv'); 143 | return; 144 | } 145 | 146 | // Parse added and removed lines 147 | const addedLines = diff 148 | .split('\n') 149 | .filter(line => line.startsWith('+') && !line.startsWith('+++')) 150 | .map(line => line.substring(1).trim()) 151 | .filter(line => line && !line.startsWith('Repository,')); 152 | 153 | const removedLines = diff 154 | .split('\n') 155 | .filter(line => line.startsWith('-') && !line.startsWith('---')) 156 | .map(line => line.substring(1).trim()) 157 | .filter(line => line && !line.startsWith('Repository,')); 158 | 159 | // Extract repository info 160 | const addedRepos = addedLines.map(line => { 161 | try { 162 | const columns = parseCSVLine(line); 163 | return { 164 | repository: columns[0] || '', 165 | companyName: columns[1] || '', 166 | companyUrl: columns[2] || '', 167 | careerUrl: columns[3] || '', 168 | tags: columns[4] || '', 169 | language: columns[5] || '', 170 | description: columns[6] || '' 171 | }; 172 | } catch (e) { 173 | return null; 174 | } 175 | }).filter(repo => repo && repo.repository); 176 | 177 | const removedRepos = removedLines.map(line => { 178 | try { 179 | const columns = parseCSVLine(line); 180 | return { 181 | repository: columns[0] || '', 182 | companyName: columns[1] || '', 183 | companyUrl: columns[2] || '', 184 | careerUrl: columns[3] || '', 185 | tags: columns[4] || '', 186 | language: columns[5] || '', 187 | description: columns[6] || '' 188 | }; 189 | } catch (e) { 190 | return null; 191 | } 192 | }).filter(repo => repo && repo.repository); 193 | 194 | // Filter out repos that appear in both added and removed 195 | const addedRepoNames = new Set(addedRepos.map(r => r.repository)); 196 | const removedRepoNames = new Set(removedRepos.map(r => r.repository)); 197 | 198 | const duplicateRepos = new Set( 199 | [...addedRepoNames].filter(name => removedRepoNames.has(name)) 200 | ); 201 | 202 | const finalAddedRepos = addedRepos.filter(r => !duplicateRepos.has(r.repository)); 203 | const finalRemovedRepos = removedRepos.filter(r => !duplicateRepos.has(r.repository)); 204 | 205 | if (finalAddedRepos.length === 0 && finalRemovedRepos.length === 0) { 206 | console.log('No new repos added or removed (only modifications detected)'); 207 | return; 208 | } 209 | 210 | // Get current commit info 211 | const commitHash = execSync('git rev-parse HEAD', { 212 | encoding: 'utf8', 213 | cwd: rootDir 214 | }).trim(); 215 | 216 | const commitMessage = execSync('git log -1 --pretty=%s', { 217 | encoding: 'utf8', 218 | cwd: rootDir 219 | }).trim(); 220 | 221 | const commitAuthor = execSync('git log -1 --pretty=%an', { 222 | encoding: 'utf8', 223 | cwd: rootDir 224 | }).trim(); 225 | 226 | const commitEmail = execSync('git log -1 --pretty=%ae', { 227 | encoding: 'utf8', 228 | cwd: rootDir 229 | }).trim(); 230 | 231 | const commitTimestamp = execSync('git log -1 --pretty=%at', { 232 | encoding: 'utf8', 233 | cwd: rootDir 234 | }).trim(); 235 | 236 | // Create new update entry 237 | const newUpdate = { 238 | id: commitHash, 239 | type: 'repo-update', 240 | title: commitMessage, 241 | message: commitMessage, 242 | date: new Date(parseInt(commitTimestamp) * 1000).toISOString(), 243 | html_url: `https://github.com/timqian/open-source-jobs/commit/${commitHash}`, 244 | author: { 245 | login: commitAuthor, 246 | email: commitEmail, 247 | avatar_url: null, 248 | html_url: null 249 | }, 250 | changes: { 251 | added: finalAddedRepos, 252 | removed: finalRemovedRepos 253 | } 254 | }; 255 | 256 | // Read existing updates 257 | const updatesPath = path.join(__dirname, '..', 'data', 'updates.json'); 258 | let existingUpdates = []; 259 | 260 | if (fs.existsSync(updatesPath)) { 261 | try { 262 | existingUpdates = JSON.parse(fs.readFileSync(updatesPath, 'utf8')); 263 | } catch (e) { 264 | console.log('Could not parse existing updates.json, starting fresh'); 265 | } 266 | } 267 | 268 | // Check if this commit already exists 269 | const existingIndex = existingUpdates.findIndex(u => u.id === commitHash); 270 | if (existingIndex !== -1) { 271 | // Update existing entry 272 | existingUpdates[existingIndex] = newUpdate; 273 | console.log(`Updated existing entry for commit ${commitHash.substring(0, 7)}`); 274 | } else { 275 | // Add new entry at the beginning 276 | existingUpdates.unshift(newUpdate); 277 | console.log(`Added new entry for commit ${commitHash.substring(0, 7)}`); 278 | } 279 | 280 | // Keep only last 100 updates 281 | existingUpdates = existingUpdates.slice(0, 100); 282 | 283 | // Save updates 284 | const dataDir = path.join(__dirname, '..', 'data'); 285 | if (!fs.existsSync(dataDir)) { 286 | fs.mkdirSync(dataDir, { recursive: true }); 287 | } 288 | 289 | fs.writeFileSync(updatesPath, JSON.stringify(existingUpdates, null, 2), 'utf8'); 290 | 291 | console.log(`✅ Updates saved to ${updatesPath}`); 292 | console.log(`📊 Added: ${finalAddedRepos.length}, Removed: ${finalRemovedRepos.length}`); 293 | 294 | // Generate RSS feed 295 | console.log('\n📡 Generating RSS feed...'); 296 | generateRSS(existingUpdates); 297 | 298 | } catch (error) { 299 | console.error('❌ Error generating update:', error.message); 300 | process.exit(1); 301 | } 302 | } 303 | 304 | generateUpdateFromDiff(); 305 | -------------------------------------------------------------------------------- /app/updates/page.tsx: -------------------------------------------------------------------------------- 1 | import { Nav } from "@/components/nav"; 2 | import fs from "fs"; 3 | import path from "path"; 4 | import type { Metadata } from "next"; 5 | 6 | export const metadata: Metadata = { 7 | title: "Updates - Open Source Jobs", 8 | description: "Recent job updates and new repositories added to Open Source Jobs", 9 | openGraph: { 10 | title: "Updates - Open Source Jobs", 11 | description: "Recent job updates and new repositories added to Open Source Jobs", 12 | url: "https://open-source-jobs.com/updates", 13 | type: "website", 14 | }, 15 | twitter: { 16 | card: "summary_large_image", 17 | title: "Updates - Open Source Jobs", 18 | description: "Recent job updates and new repositories added to Open Source Jobs", 19 | }, 20 | }; 21 | 22 | interface RepoChange { 23 | repository: string; 24 | companyName: string; 25 | companyUrl: string; 26 | careerUrl: string; 27 | tags: string; 28 | language: string; 29 | description: string; 30 | } 31 | 32 | interface Update { 33 | id: string; 34 | type: "commit" | "release" | "repo-update"; 35 | title: string; 36 | message: string; 37 | date: string; 38 | html_url: string; 39 | author: { 40 | login: string; 41 | email?: string; 42 | avatar_url: string | null; 43 | html_url: string | null; 44 | }; 45 | tag_name?: string; 46 | changes?: { 47 | added: RepoChange[]; 48 | removed: RepoChange[]; 49 | }; 50 | } 51 | 52 | async function getUpdates(): Promise { 53 | try { 54 | const filePath = path.join(process.cwd(), "data", "updates.json"); 55 | const fileContent = fs.readFileSync(filePath, "utf8"); 56 | return JSON.parse(fileContent); 57 | } catch (error) { 58 | console.error("Error reading updates:", error); 59 | return []; 60 | } 61 | } 62 | 63 | export default async function UpdatesPage() { 64 | const updates = await getUpdates(); 65 | 66 | return ( 67 |
68 | {/* Background decoration */} 69 |
70 |
71 |
72 |
73 | 74 | {/* Navigation */} 75 |
272 | ); 273 | } 274 | -------------------------------------------------------------------------------- /repos.csv: -------------------------------------------------------------------------------- 1 | Repository,Company Name,Company URL,Career URL,Tags,Language,Description 2 | maximhq/bifrost, Maxim AI, https://www.getmaxim.ai,https://www.getmaxim.ai/careers,"gateway, llm, mcp-server",Go,"Bifrost is a high-performance open source LLM gateway that connects 1000+ models through a single API interface with extremely high throughput." 3 | vitejs/vite,VoidZero Inc.,https://voidzero.dev,https://voidzero.dev/team,"frontend, javascript, typescript, vite",TypeScript,Next Generation Frontend Tooling 4 | elastic/elasticsearch,Elastic,https://www.elastic.co,https://www.elastic.co/about/careers/,"elasticsearch, java, search-engine",Java,"Free and Open Source, Distributed, RESTful Search Engine" 5 | grafana/grafana,Grafana Labs,https://grafana.com,https://grafana.com/about/hiring,"alerting, analytics, business-intelligence, dashboard, data-visualization, elasticsearch, go, grafana, hacktoberfest, influxdb, metrics, monitoring, mysql, postgres, prometheus",TypeScript,"The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more. " 6 | pingcap/tidb,PingCAP,https://pingcap.com,https://pingcap.com/recruit-cn/join/,"cloud-native, database, distributed-database, distributed-transactions, go, hacktoberfest, htap, mysql, mysql-compatibility, scale, serverless, sql, tidb",Go,"TiDB - the open-source, cloud-native, distributed SQL database designed for modern applications." 7 | mongodb/mongo,MongoDB,https://www.mongodb.com,https://www.mongodb.com/careers,"c-plus-plus, database, mongodb, nosql",C++,The MongoDB Database 8 | cockroachdb/cockroach,Cockroach Labs,https://www.cockroachlabs.com,https://www.cockroachlabs.com/careers/,"cockroachdb, database, distributed-database, go, hacktoberfest, sql",Go,"CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement." 9 | odoo/odoo,Odoo,https://www.odoo.com,https://www.odoo.com/jobs,"apps, business, erp, management, odoo, odoo-apps, python",Python,Odoo. Open Source Apps To Grow Your Business. 10 | commaai/openpilot,Comma.ai,https://comma.ai,https://comma.ai/jobs,"advanced-driver-assistance-systems, driver-assistance-systems, robotics",Python,"openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300+ supported cars." 11 | gradle/gradle,Gradle Inc.,https://gradle.com,https://gradle.com/careers/,"build-tool, good-first-issue, gradle, gradle-bt, groovy, java, kotlin",Groovy,"Adaptable, fast automation for all" 12 | arangodb/arangodb,ArangoDB,https://arango.ai,https://arango.ai/careers/,"arangodb, database, distributed-database, document-database, graph-database, graphdb, key-value, multi-model, nosql",C++,"🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions." 13 | hasura/graphql-engine,Hasura,https://hasura.io,https://hasura.io/careers,"access-control, api, automatic-api, bigquery, graphql, graphql-api, graphql-server, haskell, hasura, mongodb, postgres, rest-api, sql-server, subgraph, supergraph",TypeScript,"Blazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events." 14 | draios/sysdig,Sysdig,https://www.sysdig.com,https://www.sysdig.com/careers,,C++,Linux system exploration and troubleshooting tool with first class support for containers 15 | paritytech/parity-ethereum,Parity Technologies,https://www.parity.io,https://www.parity.io/jobs,"blockchain, client, ethereum, node, rust",Rust,"The fast, light, and robust client for Ethereum-like networks." 16 | mapbox/mapbox-gl-js,Mapbox,https://www.mapbox.com,https://www.mapbox.com/careers/,"3d, javascript, maps, priority, webgl",TypeScript,"Interactive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL" 17 | PrestaShop/PrestaShop,PrestaShop,https://prestashop.com,https://prestashop.com/careers/,"cms, ecommerce, ecommerce-framework, ecommerce-platform, hacktoberfest, php, php-framework, prestashop",PHP,PrestaShop is the universal open-source software platform to build your e-commerce solution. 18 | SonarSource/SonarQube,SonarSource,https://sonarsource.com,http://sonarsource.com/company/jobs/,"code-quality, sonarqube, static-analysis",Java,Continuous Inspection 19 | zeek/zeek,Corelight,https://corelight.com,https://corelight.com/company/careers,"bro, dfir, ndr, network-monitoring, nsm, pcap, security, zeek",C++,Zeek is a powerful network analysis framework that is much different from the typical IDS you may know. 20 | hazelcast/hazelcast,Hazelcast,https://hazelcast.com,https://hazelcast.com/company/careers/,"big-data, caching, data-in-motion, data-insights, distributed, distributed-computing, distributed-systems, hacktoberfest, hazelcast, in-memory, java, low-latency, real-time, scalability, stream-processing",Java,"Hazelcast is a unified real-time data platform combining stream processing with a fast data store, allowing customers to act instantly on data-in-motion for real-time insights." 21 | confluentinc/ksql,Confluent,https://www.confluent.io,https://www.confluent.io/careers/,"kafka, streaming, sql, event-streaming, real-time",Java,Event streaming database purpose-built for stream processing applications. 22 | CartoDB/cartodb,CARTO,https://carto.com,https://carto.com/careers/,"carto, geolocation, geospatial, location-services, postgis",JavaScript,Location Intelligence & Data Visualization tool 23 | crate/crate,Crate.io,https://crate.io,https://crate.io/jobs/,"analytics, big-data, cratedb, database, dbms, distributed, distributed-database, distributed-sql-database, elasticsearch, industrial-iot, iot, iot-analytics, iot-database, lucene, olap, postgresql, sql, time-series, tsdb, vector-database",Java,"CrateDB is a distributed and scalable SQL database for storing and analyzing massive amounts of data in near real-time, even with complex queries. It is PostgreSQL-compatible, and based on Lucene." 24 | npm/cli,npm (GitHub),https://www.npmjs.com,https://www.npmjs.com/jobs,"javascript, nodejs, npm, npm-cli, package-manager, tools",JavaScript,the package manager for JavaScript 25 | sylabs/singularity,Sylabs,https://sylabs.io,https://sylabs.io/resources/jobs,"containers, hpc, linux",Go,"SingularityCE is the Community Edition of Singularity, an open source container platform designed to be simple, fast, and secure." 26 | pimcore/pimcore,Pimcore,https://pimcore.com,https://pimcore.com/en/about/careers,"cdp, cms, cms-framework, customer-data-platform, dam, data-management, digital-platform, ecommerce, ecommerce-platform, experience-manager, hacktoberfest, master-data-management, mdm, online-shop, pim, pimcore, product-information-management, product-management, shop, wcms",PHP,"Core Framework for the Open Core Data & Experience Management Platform (PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce)" 27 | YugaByte/yugabyte-db,Yugabyte,https://www.yugabyte.com,https://www.yugabyte.com/careers/,"cloud-native, cpp, database, distributed-database, distributed-sql, distributed-sql-database, high-performance, kubernetes, multi-cloud, multi-region, scale-out, sql",C,YugabyteDB - the cloud native distributed SQL database for mission-critical applications. 28 | kaltura/nginx-vod-module,Kaltura,https://corp.kaltura.com,https://corp.kaltura.com/company/careers/,"dash, drm, hds, hls, livestream, mp4, mss, nginx, stream, streaming, video, video-streaming, vod",C,NGINX-based MP4 Repackager 29 | unsplash/unsplash-js,Unsplash,https://unsplash.com,https://unsplash.com/hiring,"free, images, photography, photos, pictures, unsplash",TypeScript,🤖 Official JavaScript wrapper for the Unsplash API 30 | SeldonIO/seldon-core,Seldon,https://www.seldon.io,https://www.seldon.io/careers/,"aiops, deployment, kubernetes, machine-learning, machine-learning-operations, mlops, production-machine-learning, serving",Go,"An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models" 31 | fossas/fossa-cli,FOSSA,https://fossa.com,https://fossa.com/careers,"open-source-licensing, open-source-vulnerabilities",Haskell,"Fast, portable and reliable dependency analysis for any codebase. Supports license & vulnerability scanning for large monoliths. Language-agnostic; integrates with 20+ build systems." 32 | oroinc/crm,Oro Inc.,https://oroinc.com,https://oroinc.com/careers,"crm, crm-platform, crm-system, orocrm, oroplatform, php, symfony",PHP,Main OroCRM package with core functionality. 33 | amazeeio/lagoon,Amazee.io,https://www.amazee.io,https://www.amazee.io/careers,hacktoberfest,TypeScript,"Lagoon, the developer-focused application delivery platform" 34 | irccloud/ios,IRCCloud,https://www.irccloud.com,https://www.irccloud.com/jobs,"chat, ios, ipad, iphone, irc, irccloud, mobile-app",Objective-C,IRCCloud iOS App 35 | ezsystems/ezplatform,Ibexa,https://www.ibexa.co,https://www.ibexa.co/about/careers,"cms, composer-project, dxp, ez-platform, ez-platform-project-variant, php, symfony, symfony-application",Shell,Meta repository that pulls in all dependencies for clean distribution of Ibexa Platform. 36 | jetbrains/kotlin,JetBrains,https://www.jetbrains.com,https://www.jetbrains.com/careers/jobs/,"compiler, gradle-plugin, intellij-plugin, kotlin, kotlin-library, maven-plugin, programming-language, wasm, webassembly",Kotlin,"The Kotlin Programming Language. " 37 | jetbrains/intellij-community,JetBrains,https://www.jetbrains.com,https://www.jetbrains.com/careers/jobs/,"code-editor, ide, intellij, intellij-community, intellij-platform",Java,IntelliJ IDEA & IntelliJ Platform 38 | arduino/Arduino,Arduino,https://www.arduino.cc,https://www.arduino.cc/en/Careers/Home,"arduino, ide",Java,Arduino IDE 1.x 39 | codecombat/codecombat,CodeCombat,https://codecombat.com,https://codecombat.com/about#careers,,JavaScript,Game for learning how to code. 40 | getsentry/sentry,Sentry,https://sentry.io,https://sentry.io/careers/,"apm, crash-reporting, crash-reports, csp-report, devops, django, error-logging, error-monitoring, fair-source, hacktoberfest, monitor, monitoring, python, sentry, tag-production",Python,Developer-first error tracking and performance monitoring 41 | slic3r/Slic3r,Slic3r,https://slic3r.org,https://slic3r.org/blog/job-opportunities/,"3d-printer, 3d-printing, cam, digital-fabrication, stl",C++,Open Source toolpath generator for 3D printers 42 | chaos-genius/chaos_genius,Chaos Genius,https://www.chaosgenius.io,https://www.chaosgenius.io/about.html,"ai, alert, alert-messages, analytics, anomaly-detection, business-intelligence, data-visualization, dataquality, deep-learning, hacktoberfest, machine-learning, ml, monitoring, monitoring-tool, observability, outlier-detection, python, rootcauseanalysis, seasonality, time-series",Python,ML powered analytics engine for outlier detection and root cause analysis. 43 | metabase/metabase,Metabase,https://www.metabase.com,https://www.metabase.com/jobs,"analytics, bi, business-intelligence, businessintelligence, clojure, dashboard, data, data-analysis, data-visualization, database, metabase, mysql, postgres, postgresql, reporting, slack, sql-editor, visualization",Clojure,The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart: 44 | mattermost/mattermost-server,Mattermost,https://mattermost.com,https://mattermost.com/careers/,"collaboration, golang, hacktoberfest, mattermost, monorepo, react, react-native",TypeScript,Mattermost is an open source platform for secure collaboration across the entire software development lifecycle.. 45 | mattermost/focalboard,Mattermost,https://mattermost.com,https://mattermost.com/careers/,"asana, collaboration, goal-tracking, golang, hacktoberfest, kanban-board, notion, project, project-management, trello",TypeScript,"Focalboard is an open source, self-hosted alternative to Trello, Notion, and Asana." 46 | posthog/posthog,PostHog,https://posthog.com,https://posthog.com/careers,"analytics, product-analytics, data-analytics, self-hosted, open-source, mixpanel-alternative",Python,Open-source product analytics platform. Alternative to Mixpanel and Amplitude. 47 | supabase/supabase,Supabase,https://supabase.com,https://supabase.com/careers,"backend, database, firebase-alternative, postgres, realtime, self-hosted",TypeScript,The open source Firebase alternative. Build a complete backend in minutes. 48 | gitlab,GitLab,https://about.gitlab.com,https://about.gitlab.com/jobs/,"ci-cd, devops, git, gitlab, version-control, collaboration, ruby",Ruby,GitLab is an open source end-to-end software development platform with built-in version control and CI/CD. 49 | airbytehq/airbyte,Airbyte,https://airbyte.com,https://airbyte.com/company/careers,"data-integration, etl, elt, data-pipeline, data-engineering",Python,Open-source data integration platform that syncs data from applications and databases to warehouses. 50 | temporalio/temporal,Temporal,https://temporal.io,https://temporal.io/careers,"workflow, orchestration, microservices, durable-execution, fault-tolerance",Go,Temporal is a microservice orchestration platform which enables developers to build scalable applications without sacrificing productivity or reliability. 51 | strapi/strapi,Strapi,https://strapi.io,https://strapi.io/careers,"cms, headless-cms, nodejs, api, content-management",TypeScript,Open source Node.js Headless CMS to easily build customisable APIs. 52 | n8n-io/n8n,n8n,https://n8n.io,https://n8n.io/careers/,"workflow-automation, low-code, integration, automation, zapier-alternative",TypeScript,Free and source-available fair-code licensed workflow automation tool. 53 | dagster-io/dagster,Dagster Labs,https://dagster.io,https://dagster.io/company/careers,"data-orchestration, data-pipeline, workflow, etl, python",Python,An orchestration platform for the development and observation of data assets. 54 | mindsdb/mindsdb,MindsDB,https://mindsdb.com,https://mindsdb.com/careers,"machine-learning, ai, data-science, ml-ops, predictive-analytics",Python,Platform for building AI from enterprise data. Integrates with 200+ data sources. 55 | appwrite/appwrite,Appwrite,https://appwrite.io,https://appwrite.io/careers,"backend, baas, firebase-alternative, authentication, database",TypeScript,Secure Backend Server for Web and Mobile developers. Open source Firebase alternative. 56 | dbt-labs/dbt-core,dbt Labs,https://www.getdbt.com,https://www.getdbt.com/careers,"data-transformation, analytics, sql, data-engineering, dbt",Python,"dbt enables data analysts and engineers to transform data using SQL, following software engineering practices." 57 | directus/directus,Directus,https://directus.io,https://directus.io/careers,"headless-cms, api, database, data-platform",TypeScript,"Open-source headless CMS and data platform. Turn any SQL database into an API, admin panel, and app backend." 58 | calcom/cal.com,Cal.com,https://cal.com,https://cal.com/jobs,"scheduling, calendar, booking, calendly-alternative, open-source",TypeScript,"Open source scheduling infrastructure. Connect a billion people by 2031, calendly alternative." 59 | plausible/analytics,Plausible Analytics,https://plausible.io,https://plausible.io/jobs/product-engineer,"analytics, privacy, google-analytics-alternative, web-analytics, gdpr",Elixir,"Simple, privacy-friendly alternative to Google Analytics." 60 | prisma/prisma,Prisma,https://www.prisma.io,https://www.prisma.io/careers,"orm, database, typescript, nodejs, developer-tools",TypeScript,Next-generation ORM for Node.js & TypeScript. Works with PostgreSQL and other databases. 61 | RocketChat/Rocket.Chat,Rocket.Chat,https://www.rocket.chat,https://www.rocket.chat/jobs,"chat, communication, team-collaboration, slack-alternative, messaging",TypeScript,Open-source team communication platform. Slack and Microsoft Teams alternative. 62 | weaviate/weaviate,Weaviate,https://weaviate.io,https://wellfound.com/company/weaviate/jobs,"vector-database, machine-learning, ai, semantic-search",Go,Open-source vector database that stores both objects and vectors for AI-native applications. 63 | qdrant/qdrant,Qdrant,https://qdrant.tech,https://join.com/companies/qdrant,"vector-search, vector-database, similarity-search, rust, machine-learning",Rust,High-performance vector search engine and database for the next generation of AI applications. 64 | infisical/infisical,Infisical,https://infisical.com,https://infisical.com/careers,"secrets-management, security, devops, developer-tools",TypeScript,"Open-source platform for secrets, certificates, and privileged access management." 65 | novuhq/novu,Novu,https://novu.co,https://handbook.novu.co/careers-page,"notifications, infrastructure, email, sms, developer-tools",TypeScript,Open-source notification infrastructure for developers. Email and multi-channel notifications. 66 | vercel/next.js,Vercel,https://vercel.com,https://vercel.com/careers,"react, nextjs, web-framework, frontend, serverless",TypeScript,The React Framework for production. Used by Vercel's platform. 67 | hashicorp/terraform,HashiCorp,https://www.hashicorp.com,https://www.hashicorp.com/en/careers/open-positions,"infrastructure-as-code, devops, cloud, automation, terraform",Go,Infrastructure as Code tool for building and versioning infrastructure safely and efficiently. 68 | hashicorp/vault,HashiCorp,https://www.hashicorp.com,https://www.hashicorp.com/en/careers/open-positions,"secrets-management, security, encryption, vault",Go,Tool for secrets management and data protection. 69 | vectordotdev/vector,Datadog,https://www.datadoghq.com,https://www.datadoghq.com/careers/,"observability, logging, metrics, data-pipeline, rust",Rust,High-performance observability data pipeline for logs and metrics. 70 | activepieces/activepieces,Activepieces,https://www.activepieces.com,https://www.ycombinator.com/companies/activepieces/jobs,"automation, workflow, no-code, zapier-alternative",TypeScript,"Open-source business automation tool, no-code workflow automation. Zapier alternative." 71 | chatwoot/chatwoot,Chatwoot,https://www.chatwoot.com,https://www.chatwoot.com/careers,"customer-support, live-chat, helpdesk, intercom-alternative",Ruby,"Open-source customer engagement platform. Alternative to Intercom, Zendesk." 72 | twentyhq/twenty,Twenty,https://twenty.com,https://twenty.com/jobs,"crm, salesforce-alternative, customer-relationship-management",TypeScript,Open-source CRM. Modern alternative to Salesforce. 73 | langfuse/langfuse,Langfuse,https://langfuse.com,https://langfuse.com/careers,"llm, observability, ai, machine-learning, developer-tools",TypeScript,Open-source LLM engineering platform for observability and analytics. 74 | huggingface/transformers,Hugging Face,https://huggingface.co,https://apply.workable.com/huggingface/,"machine-learning, nlp, deep-learning, pytorch, transformers",Python,State-of-the-art Machine Learning for PyTorch and TensorFlow. 75 | backstage/backstage,Spotify,https://www.spotify.com,https://www.lifeatspotify.com/jobs,"developer-portal, platform-engineering, internal-tools, kubernetes",TypeScript,Open platform for building developer portals. Created by Spotify. 76 | BerriAI/litellm,BerriAI,https://www.berri.ai,https://www.ycombinator.com/companies/litellm/jobs,"llm, ai, openai, api-gateway, python",Python,Python SDK and Proxy Server to call 100+ LLM APIs in OpenAI format. 77 | windmill-labs/windmill,Windmill,https://www.windmill.dev,https://www.ycombinator.com/companies/windmill/jobs,"workflow-engine, developer-platform, automation, rust",Rust,"Open-source developer platform to turn scripts into webhooks, workflows and UIs." 78 | makeplane/plane,Plane,https://plane.so,https://plane.so/careers,"project-management, jira-alternative, issue-tracking, collaboration",TypeScript,"Open-source project management tool. Alternative to Jira, Linear, and Asana." 79 | milvus-io/milvus,Zilliz,https://zilliz.com,https://zilliz.com/careers,"vector-database, ai, machine-learning, similarity-search",Go,"High-performance, cloud-native vector database built for scalable vector ANN search." 80 | PrefectHQ/prefect,Prefect,https://www.prefect.io,https://job-boards.greenhouse.io/prefect,"workflow-orchestration, data-engineering, python, automation",Python,"Modern workflow orchestration for data pipelines, ML workflows, and more." 81 | Kong/kong,Kong Inc.,https://konghq.com,https://konghq.com/company/careers,"api-gateway, microservices, service-mesh, cloud-native",Lua,Cloud-native API gateway and service mesh for microservices and distributed architectures. 82 | traefik/traefik,Traefik Labs,https://traefik.io,https://traefik.io/careers,"proxy, reverse-proxy, load-balancer, cloud-native, kubernetes",Go,Cloud Native Application Proxy. Edge router for microservices with automatic service discovery. 83 | camunda/camunda-bpm-platform,Camunda,https://camunda.com,https://camunda.com/careers/,"workflow-automation, bpmn, process-orchestration, business-process-management",Java,Workflow and decision automation platform. Open-source BPMN workflow engine. 84 | payloadcms/payload,Payload,https://payloadcms.com,https://payloadcms.com/careers,"cms, headless-cms, nextjs, typescript, content-management",TypeScript,Open-source fullstack Next.js framework. TypeScript headless CMS and application framework. 85 | cube-js/cube,Cube Dev,https://cube.dev,https://cube.dev/careers,"analytics, business-intelligence, semantic-layer, data-platform",TypeScript,Headless BI platform for building data applications. Universal semantic layer for metrics. 86 | NocoDB/nocodb,NocoDB,https://nocodb.com,https://nocodb.com/careers,"no-code, airtable-alternative, database, spreadsheet",TypeScript,Open-source Airtable alternative. Turns any database into a smart spreadsheet. 87 | formbricks/formbricks,Formbricks,https://formbricks.com,https://formbricks.com/careers,"survey, feedback, experience-management, privacy",TypeScript,Open-source experience management. Privacy-first surveys and feedback. 88 | ToolJet/ToolJet,ToolJet,https://tooljet.com,https://tooljet.com/careers,"low-code, internal-tools, retool-alternative, no-code",TypeScript,Open-source low-code platform to build and deploy internal tools. Retool alternative. 89 | Budibase/budibase,Budibase,https://budibase.com,https://budibase.com/careers,"low-code, internal-tools, app-builder, automation",TypeScript,Open-source low-code platform for building internal apps in minutes. 90 | apache/superset,Preset,https://preset.io,https://preset.io/careers,"business-intelligence, data-visualization, analytics, bi",Python,Modern data exploration and visualization platform. Open-source BI tool. 91 | Flagsmith/flagsmith,Flagsmith,https://flagsmith.com,https://flagsmith.com/careers,"feature-flags, remote-config, deployment, continuous-delivery",Python,Open-source feature flag and remote config service. Alternative to LaunchDarkly. 92 | ClickHouse/ClickHouse,ClickHouse Inc.,https://clickhouse.com,https://clickhouse.com/company/careers,"database, analytics, olap, column-oriented, real-time",C++,Fast open-source column-oriented database management system for real-time analytics. 93 | timescale/timescaledb,Timescale,https://www.timescale.com,https://www.timescale.com/careers,"time-series, database, postgresql, sql, analytics",C,Open-source time-series SQL database optimized for fast ingest and complex queries. 94 | questdb/questdb,QuestDB,https://questdb.io,https://questdb.io/careers,"time-series, database, sql, analytics, high-performance",Java,High-performance time-series database for real-time analytics and monitoring. 95 | influxdata/influxdb,InfluxData,https://www.influxdata.com,https://www.influxdata.com/careers/,"time-series, database, monitoring, metrics, analytics",Rust,"Scalable time-series database for metrics, events, and real-time analytics." 96 | databricks/koalas,Databricks,https://www.databricks.com,https://www.databricks.com/company/careers,"pandas, spark, data-science, python, distributed-computing",Python,Pandas API on Apache Spark for distributed data processing. 97 | fivetran/fivetran_connector_sdk,Fivetran,https://www.fivetran.com,https://www.fivetran.com/careers,"etl, data-integration, data-pipeline, analytics, automation",Java,Automated data movement platform for analytics and data warehouses. 98 | meltano/meltano,Meltano,https://meltano.com,https://meltano.com/jobs,"data-integration, etl, elt, data-ops, singer",Python,Open-source platform for the whole data lifecycle from extraction to orchestration. 99 | singer-io/getting-started,Stitch Data,https://www.stitchdata.com,https://www.stitchdata.com/careers/,"etl, data-integration, data-pipeline, open-standard",Python,Open-source standard for writing scripts that move data. 100 | redpanda-data/redpanda,Redpanda,https://www.redpanda.com,https://www.redpanda.com/careers,"streaming, kafka-compatible, real-time, messaging, c-plus-plus",C++,Streaming data platform for mission critical workloads. Kafka API compatible. 101 | streamnative/pulsar,StreamNative,https://streamnative.io,https://streamnative.io/careers,"pulsar, messaging, streaming, cloud-native, distributed-systems",Java,Cloud-native distributed pub-sub messaging system. 102 | canonical/lxd,Canonical,https://canonical.com,https://canonical.com/careers,"containers, virtualization, lxc, cloud, ubuntu",Go,Next generation system container and virtual machine manager. 103 | canonical/multipass,Canonical,https://canonical.com,https://canonical.com/careers,"virtualization, vm, cloud, ubuntu, cross-platform",Go,"Lightweight VM manager for Linux, Windows and macOS." 104 | linkerd/linkerd2,Buoyant,https://buoyant.io,https://buoyant.io/careers,"service-mesh, kubernetes, linkerd, microservices, cloud-native",Go,Ultralight service mesh for Kubernetes and beyond. 105 | kubernetes/kubernetes,Google,https://www.google.com,https://kubernetes.io/careers/,"kubernetes, containers, orchestration, cloud-native, distributed-systems",Go,Production-Grade Container Orchestration. 106 | helm/helm,Helm Project,https://helm.sh,https://helm.sh,"kubernetes, package-manager, helm, charts, deployment",Go,The Kubernetes Package Manager. 107 | jaegertracing/jaeger,Uber,https://www.uber.com,https://www.uber.com/us/en/careers/,"tracing, distributed-tracing, monitoring, microservices, observability",Go,Distributed tracing platform for monitoring microservices. 108 | open-telemetry/opentelemetry-collector,OpenTelemetry,https://opentelemetry.io,https://opentelemetry.io/community/,"observability, telemetry, tracing, metrics, logging",Go,"Vendor-agnostic implementation on how to receive, process and export telemetry data." 109 | open-telemetry/opentelemetry-go,OpenTelemetry,https://opentelemetry.io,https://opentelemetry.io/community/,"opentelemetry, observability, go, tracing, metrics",Go,OpenTelemetry Go API and SDK. 110 | open-telemetry/opentelemetry-python,OpenTelemetry,https://opentelemetry.io,https://opentelemetry.io/community/,"opentelemetry, observability, python, tracing, metrics",Python,OpenTelemetry Python API and SDK. 111 | signoz/signoz,SigNoz,https://signoz.io,https://signoz.io/careers/,"apm, observability, monitoring, tracing, open-source",TypeScript,Open-source APM and observability platform. Alternative to DataDog and New Relic. 112 | uptrace/uptrace,Uptrace,https://uptrace.dev,https://uptrace.dev/careers/,"apm, tracing, metrics, observability, golang",Go,Open-source APM with distributed tracing and metrics. 113 | victoriametrics/VictoriaMetrics,VictoriaMetrics,https://victoriametrics.com,https://victoriametrics.com/careers/,"metrics, monitoring, time-series, prometheus, high-performance",Go,"Fast, cost-effective monitoring solution and time series database." 114 | clickhouse/clickhouse-go,ClickHouse Inc.,https://clickhouse.com,https://clickhouse.com/company/careers,"clickhouse, golang, driver, database, client",Go,Golang driver for ClickHouse database. 115 | trinodb/trino,Starburst,https://www.starburst.io,https://www.starburst.io/careers/,"sql, query-engine, big-data, distributed-systems, analytics",Java,Fast distributed SQL query engine for big data analytics. 116 | prestodb/presto,Presto Foundation,https://prestodb.io,https://prestodb.io/community.html,"sql, query-engine, big-data, distributed-systems, analytics",Java,Distributed SQL query engine for big data. 117 | StarRocks/starrocks,CelerData,https://www.mirrorship.cn,https://www.mirrorship.cn/jobs,"olap, database, analytics, mpp, real-time",C++,Linux Foundation project. Next-gen sub-second MPP OLAP database. 118 | scylladb/scylladb,ScyllaDB,https://www.scylladb.com,https://www.scylladb.com/company/careers/,"database, nosql, cassandra-compatible, high-performance, distributed-database",C++,NoSQL data store using the seastar framework. Cassandra compatible. 119 | datastax/cassandra,DataStax,https://www.datastax.com,https://www.datastax.com/company/careers,"cassandra, database, nosql, distributed-database, datastax",Java,DataStax distribution of Apache Cassandra. 120 | redis/redis,Redis,https://redis.com,https://redis.com/company/careers/,"database, cache, in-memory, key-value, redis",C,"In-memory data structure store used as database, cache and message broker." 121 | valkey-io/valkey,Linux Foundation,https://www.linuxfoundation.org,https://www.linuxfoundation.org/about/careers,"database, cache, in-memory, key-value, redis-fork",C,High-performance data structure server forked from Redis. 122 | dragonflydb/dragonfly,DragonflyDB,https://www.dragonflydb.io,https://www.dragonflydb.io/careers,"database, cache, in-memory, redis-compatible, high-performance",C++,Modern in-memory datastore. Fully compatible with Redis and Memcached APIs. 123 | vitessio/vitess,PlanetScale,https://planetscale.com,https://planetscale.com/careers,"database, mysql, sharding, horizontal-scaling, kubernetes",Go,Database clustering system for horizontal scaling of MySQL. 124 | cncf/landscape,CNCF,https://www.cncf.io,https://www.cncf.io/about/join/careers/,"cloud-native, cncf, landscape, projects, ecosystem",JavaScript,Cloud Native landscape including all CNCF projects. 125 | alluxio/alluxio,Alluxio,https://www.alluxio.io,https://www.alluxio.io/careers/,"data-orchestration, storage, big-data, cloud, distributed-systems",Java,Data orchestration for analytics and machine learning in the cloud. 126 | ClickHouse/clickhouse-java,ClickHouse Inc.,https://clickhouse.com,https://clickhouse.com/company/careers,"clickhouse, java, jdbc, driver, database",Java,ClickHouse JDBC driver and Java client. 127 | duckdb/duckdb,DuckDB Labs,https://duckdb.org,https://duckdb.org/foundation/,"database, olap, sql, in-process, analytics",C++,In-process SQL OLAP database management system. 128 | minio/minio,MinIO,https://min.io,https://min.io/careers,"object-storage, s3-compatible, cloud-native, storage, ai",Go,High-performance object storage for AI and cloud-native applications. 129 | seaweedfs/seaweedfs,SeaweedFS,https://seaweedfs.com,https://www.seaweedfs.com/,"storage, distributed-storage, object-storage, file-system, scalable",Go,Fast distributed storage system for billions of files. 130 | juicedata/juicefs,JuiceData,https://juicedata.io,https://juicedata.io/en/careers/,"file-system, distributed-storage, s3, redis, cloud-native",Go,Distributed POSIX file system built on top of Redis and S3. 131 | snyk/snyk,Snyk,https://snyk.io,https://snyk.io/careers/,"security, vulnerabilities, developer-security, sast, sca",TypeScript,Developer security platform for finding and fixing vulnerabilities. 132 | snyk/cli,Snyk,https://snyk.io,https://snyk.io/careers/,"security, cli, vulnerabilities, sca, developer-tools",TypeScript,Snyk CLI for finding and fixing known vulnerabilities in dependencies. 133 | aquasecurity/trivy,Aqua Security,https://www.aquasec.com,https://www.aquasec.com/about-us/careers/,"security, container-security, vulnerability-scanner, kubernetes, devops",Go,Security scanner for containers and other artifacts. 134 | anchore/grype,Anchore,https://anchore.com,https://anchore.com/careers/,"security, vulnerability-scanner, container-security, sbom, devops",Go,Vulnerability scanner for container images and filesystems. 135 | anchore/syft,Anchore,https://anchore.com,https://anchore.com/careers/,"sbom, security, supply-chain, vulnerability, containers",Go,CLI tool and library for generating Software Bill of Materials (SBOM). 136 | sigstore/cosign,Chainguard,https://www.chainguard.dev,https://www.chainguard.dev/careers,"security, signing, containers, supply-chain, sbom",Go,Container signing and verification tool. 137 | open-policy-agent/opa,Styra,https://www.styra.com,https://www.styra.com/careers/,"policy, security, authorization, kubernetes, cloud-native",Go,Open Policy Agent for unified policy enforcement. 138 | spiffe/spire,SPIFFE/SPIRE,https://spiffe.io,https://spiffe.io,"security, identity, spiffe, zero-trust, authentication",Go,SPIFFE Runtime Environment for workload identity. 139 | cert-manager/cert-manager,Jetstack,https://www.jetstack.io,https://www.jetstack.io/careers/,"kubernetes, certificates, tls, security, automation",Go,Automatically provision and manage TLS certificates in Kubernetes. 140 | hashicorp/consul,HashiCorp,https://www.hashicorp.com,https://www.hashicorp.com/en/careers/open-positions,"service-mesh, networking, service-discovery, consul, distributed-systems",Go,Service networking solution to connect and secure services. 141 | cilium/cilium,Isovalent,https://www.isovalent.com,https://www.isovalent.com/careers/,"networking, ebpf, kubernetes, security, service-mesh",Go,"eBPF-based networking, observability, and security for cloud native." 142 | tetratelabs/getenvoy,Tetrate,https://www.tetrate.io,https://www.tetrate.io/careers/,"envoy, proxy, service-mesh, istio, cloud-native",Go,Envoy binary distribution and extensions. 143 | tetratelabs/istio-distro,Tetrate,https://www.tetrate.io,https://www.tetrate.io/careers/,"istio, service-mesh, kubernetes, enterprise, cloud-native",Go,Tetrate Istio Distribution for production-grade service mesh. 144 | dapr/dapr,Diagrid,https://www.diagrid.io,https://www.diagrid.io/careers,"distributed-systems, microservices, event-driven, cloud-native, runtime",Go,"Portable, event-driven runtime for building distributed applications." 145 | argoproj/argo-cd,Akuity,https://www.akuity.io,https://www.akuity.io/careers/,"gitops, kubernetes, continuous-deployment, argocd, devops",Go,Declarative continuous deployment for Kubernetes. 146 | openedx/edx-platform,OpenCraft,https://opencraft.com/,https://opencraft.com/jobs/,"edx, education",Python,The Open edX LMS & Studio, powering education sites around the world! 147 | penpot/penpot,Penpot,https://penpot.app,https://penpot.app/careers,"design, clojure, ui, clojurescript, prototyping, ux-experience, ux-design",Clojure,Penpot: The open-source design tool for design and code collaboration 148 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open Source Jobs 2 | A list of Open Source projects offering jobs. For those who want to work on open source and get paid. 3 | ## Job List 4 | 5 | > **Note:** This list is auto-generated. [Better view](https://open-source-jobs.com) | [Edit list](repos.csv) | [Add new repo](https://github.com/timqian/open-source-jobs/issues/new?template=new-repository.yml) 6 | 7 | | Company | Repository | Job Page | 8 | |---------|------------|----------| 9 | | [Activepieces](https://www.activepieces.com) | [activepieces/activepieces](https://github.com/activepieces/activepieces) ![Stars](https://img.shields.io/github/stars/activepieces/activepieces?style=social&label=%20)
Open-source business automation tool, no-code workflow automation. Zapier alternative. | [Apply](https://www.ycombinator.com/companies/activepieces/jobs) | 10 | | [Airbyte](https://airbyte.com) | [airbytehq/airbyte](https://github.com/airbytehq/airbyte) ![Stars](https://img.shields.io/github/stars/airbytehq/airbyte?style=social&label=%20)
Open-source data integration platform that syncs data from applications and databases to warehouses. | [Apply](https://airbyte.com/company/careers) | 11 | | [Akuity](https://www.akuity.io) | [argoproj/argo-cd](https://github.com/argoproj/argo-cd) ![Stars](https://img.shields.io/github/stars/argoproj/argo-cd?style=social&label=%20)
Declarative continuous deployment for Kubernetes. | [Apply](https://www.akuity.io/careers/) | 12 | | [Alluxio](https://www.alluxio.io) | [alluxio/alluxio](https://github.com/alluxio/alluxio) ![Stars](https://img.shields.io/github/stars/alluxio/alluxio?style=social&label=%20)
Data orchestration for analytics and machine learning in the cloud. | [Apply](https://www.alluxio.io/careers/) | 13 | | [Amazee.io](https://www.amazee.io) | [amazeeio/lagoon](https://github.com/amazeeio/lagoon) ![Stars](https://img.shields.io/github/stars/amazeeio/lagoon?style=social&label=%20)
Lagoon, the developer-focused application delivery platform | [Apply](https://www.amazee.io/careers) | 14 | | [Anchore](https://anchore.com) | [anchore/grype](https://github.com/anchore/grype) ![Stars](https://img.shields.io/github/stars/anchore/grype?style=social&label=%20)
Vulnerability scanner for container images and filesystems. | [Apply](https://anchore.com/careers/) | 15 | | [Anchore](https://anchore.com) | [anchore/syft](https://github.com/anchore/syft) ![Stars](https://img.shields.io/github/stars/anchore/syft?style=social&label=%20)
CLI tool and library for generating Software Bill of Materials (SBOM). | [Apply](https://anchore.com/careers/) | 16 | | [Appwrite](https://appwrite.io) | [appwrite/appwrite](https://github.com/appwrite/appwrite) ![Stars](https://img.shields.io/github/stars/appwrite/appwrite?style=social&label=%20)
Secure Backend Server for Web and Mobile developers. Open source Firebase alternative. | [Apply](https://appwrite.io/careers) | 17 | | [Aqua Security](https://www.aquasec.com) | [aquasecurity/trivy](https://github.com/aquasecurity/trivy) ![Stars](https://img.shields.io/github/stars/aquasecurity/trivy?style=social&label=%20)
Security scanner for containers and other artifacts. | [Apply](https://www.aquasec.com/about-us/careers/) | 18 | | [ArangoDB](https://arango.ai) | [arangodb/arangodb](https://github.com/arangodb/arangodb) ![Stars](https://img.shields.io/github/stars/arangodb/arangodb?style=social&label=%20)
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions. | [Apply](https://arango.ai/careers/) | 19 | | [Arduino](https://www.arduino.cc) | [arduino/Arduino](https://github.com/arduino/Arduino) ![Stars](https://img.shields.io/github/stars/arduino/Arduino?style=social&label=%20)
Arduino IDE 1.x | [Apply](https://www.arduino.cc/en/Careers/Home) | 20 | | [BerriAI](https://www.berri.ai) | [BerriAI/litellm](https://github.com/BerriAI/litellm) ![Stars](https://img.shields.io/github/stars/BerriAI/litellm?style=social&label=%20)
Python SDK and Proxy Server to call 100+ LLM APIs in OpenAI format. | [Apply](https://www.ycombinator.com/companies/litellm/jobs) | 21 | | [Budibase](https://budibase.com) | [Budibase/budibase](https://github.com/Budibase/budibase) ![Stars](https://img.shields.io/github/stars/Budibase/budibase?style=social&label=%20)
Open-source low-code platform for building internal apps in minutes. | [Apply](https://budibase.com/careers) | 22 | | [Buoyant](https://buoyant.io) | [linkerd/linkerd2](https://github.com/linkerd/linkerd2) ![Stars](https://img.shields.io/github/stars/linkerd/linkerd2?style=social&label=%20)
Ultralight service mesh for Kubernetes and beyond. | [Apply](https://buoyant.io/careers) | 23 | | [Cal.com](https://cal.com) | [calcom/cal.com](https://github.com/calcom/cal.com) ![Stars](https://img.shields.io/github/stars/calcom/cal.com?style=social&label=%20)
Open source scheduling infrastructure. Connect a billion people by 2031, calendly alternative. | [Apply](https://cal.com/jobs) | 24 | | [Camunda](https://camunda.com) | [camunda/camunda-bpm-platform](https://github.com/camunda/camunda-bpm-platform) ![Stars](https://img.shields.io/github/stars/camunda/camunda-bpm-platform?style=social&label=%20)
Workflow and decision automation platform. Open-source BPMN workflow engine. | [Apply](https://camunda.com/careers/) | 25 | | [Canonical](https://canonical.com) | [canonical/lxd](https://github.com/canonical/lxd) ![Stars](https://img.shields.io/github/stars/canonical/lxd?style=social&label=%20)
Next generation system container and virtual machine manager. | [Apply](https://canonical.com/careers) | 26 | | [Canonical](https://canonical.com) | [canonical/multipass](https://github.com/canonical/multipass) ![Stars](https://img.shields.io/github/stars/canonical/multipass?style=social&label=%20)
Lightweight VM manager for Linux, Windows and macOS. | [Apply](https://canonical.com/careers) | 27 | | [CARTO](https://carto.com) | [CartoDB/cartodb](https://github.com/CartoDB/cartodb) ![Stars](https://img.shields.io/github/stars/CartoDB/cartodb?style=social&label=%20)
Location Intelligence & Data Visualization tool | [Apply](https://carto.com/careers/) | 28 | | [CelerData](https://www.mirrorship.cn) | [StarRocks/starrocks](https://github.com/StarRocks/starrocks) ![Stars](https://img.shields.io/github/stars/StarRocks/starrocks?style=social&label=%20)
Linux Foundation project. Next-gen sub-second MPP OLAP database. | [Apply](https://www.mirrorship.cn/jobs) | 29 | | [Chainguard](https://www.chainguard.dev) | [sigstore/cosign](https://github.com/sigstore/cosign) ![Stars](https://img.shields.io/github/stars/sigstore/cosign?style=social&label=%20)
Container signing and verification tool. | [Apply](https://www.chainguard.dev/careers) | 30 | | [Chaos Genius](https://www.chaosgenius.io) | [chaos-genius/chaos_genius](https://github.com/chaos-genius/chaos_genius) ![Stars](https://img.shields.io/github/stars/chaos-genius/chaos_genius?style=social&label=%20)
ML powered analytics engine for outlier detection and root cause analysis. | [Apply](https://www.chaosgenius.io/about.html) | 31 | | [Chatwoot](https://www.chatwoot.com) | [chatwoot/chatwoot](https://github.com/chatwoot/chatwoot) ![Stars](https://img.shields.io/github/stars/chatwoot/chatwoot?style=social&label=%20)
Open-source customer engagement platform. Alternative to Intercom, Zendesk. | [Apply](https://www.chatwoot.com/careers) | 32 | | [ClickHouse Inc.](https://clickhouse.com) | [ClickHouse/ClickHouse](https://github.com/ClickHouse/ClickHouse) ![Stars](https://img.shields.io/github/stars/ClickHouse/ClickHouse?style=social&label=%20)
Fast open-source column-oriented database management system for real-time analytics. | [Apply](https://clickhouse.com/company/careers) | 33 | | [ClickHouse Inc.](https://clickhouse.com) | [clickhouse/clickhouse-go](https://github.com/clickhouse/clickhouse-go) ![Stars](https://img.shields.io/github/stars/clickhouse/clickhouse-go?style=social&label=%20)
Golang driver for ClickHouse database. | [Apply](https://clickhouse.com/company/careers) | 34 | | [ClickHouse Inc.](https://clickhouse.com) | [ClickHouse/clickhouse-java](https://github.com/ClickHouse/clickhouse-java) ![Stars](https://img.shields.io/github/stars/ClickHouse/clickhouse-java?style=social&label=%20)
ClickHouse JDBC driver and Java client. | [Apply](https://clickhouse.com/company/careers) | 35 | | [CNCF](https://www.cncf.io) | [cncf/landscape](https://github.com/cncf/landscape) ![Stars](https://img.shields.io/github/stars/cncf/landscape?style=social&label=%20)
Cloud Native landscape including all CNCF projects. | [Apply](https://www.cncf.io/about/join/careers/) | 36 | | [Cockroach Labs](https://www.cockroachlabs.com) | [cockroachdb/cockroach](https://github.com/cockroachdb/cockroach) ![Stars](https://img.shields.io/github/stars/cockroachdb/cockroach?style=social&label=%20)
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement. | [Apply](https://www.cockroachlabs.com/careers/) | 37 | | [CodeCombat](https://codecombat.com) | [codecombat/codecombat](https://github.com/codecombat/codecombat) ![Stars](https://img.shields.io/github/stars/codecombat/codecombat?style=social&label=%20)
Game for learning how to code. | [Apply](https://codecombat.com/about#careers) | 38 | | [Comma.ai](https://comma.ai) | [commaai/openpilot](https://github.com/commaai/openpilot) ![Stars](https://img.shields.io/github/stars/commaai/openpilot?style=social&label=%20)
openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300+ supported cars. | [Apply](https://comma.ai/jobs) | 39 | | [Confluent](https://www.confluent.io) | [confluentinc/ksql](https://github.com/confluentinc/ksql) ![Stars](https://img.shields.io/github/stars/confluentinc/ksql?style=social&label=%20)
Event streaming database purpose-built for stream processing applications. | [Apply](https://www.confluent.io/careers/) | 40 | | [Corelight](https://corelight.com) | [zeek/zeek](https://github.com/zeek/zeek) ![Stars](https://img.shields.io/github/stars/zeek/zeek?style=social&label=%20)
Zeek is a powerful network analysis framework that is much different from the typical IDS you may know. | [Apply](https://corelight.com/company/careers) | 41 | | [Crate.io](https://crate.io) | [crate/crate](https://github.com/crate/crate) ![Stars](https://img.shields.io/github/stars/crate/crate?style=social&label=%20)
CrateDB is a distributed and scalable SQL database for storing and analyzing massive amounts of data in near real-time, even with complex queries. It is PostgreSQL-compatible, and based on Lucene. | [Apply](https://crate.io/jobs/) | 42 | | [Cube Dev](https://cube.dev) | [cube-js/cube](https://github.com/cube-js/cube) ![Stars](https://img.shields.io/github/stars/cube-js/cube?style=social&label=%20)
Headless BI platform for building data applications. Universal semantic layer for metrics. | [Apply](https://cube.dev/careers) | 43 | | [Dagster Labs](https://dagster.io) | [dagster-io/dagster](https://github.com/dagster-io/dagster) ![Stars](https://img.shields.io/github/stars/dagster-io/dagster?style=social&label=%20)
An orchestration platform for the development and observation of data assets. | [Apply](https://dagster.io/company/careers) | 44 | | [Databricks](https://www.databricks.com) | [databricks/koalas](https://github.com/databricks/koalas) ![Stars](https://img.shields.io/github/stars/databricks/koalas?style=social&label=%20)
Pandas API on Apache Spark for distributed data processing. | [Apply](https://www.databricks.com/company/careers) | 45 | | [Datadog](https://www.datadoghq.com) | [vectordotdev/vector](https://github.com/vectordotdev/vector) ![Stars](https://img.shields.io/github/stars/vectordotdev/vector?style=social&label=%20)
High-performance observability data pipeline for logs and metrics. | [Apply](https://www.datadoghq.com/careers/) | 46 | | [DataStax](https://www.datastax.com) | [datastax/cassandra](https://github.com/datastax/cassandra) ![Stars](https://img.shields.io/github/stars/datastax/cassandra?style=social&label=%20)
DataStax distribution of Apache Cassandra. | [Apply](https://www.datastax.com/company/careers) | 47 | | [dbt Labs](https://www.getdbt.com) | [dbt-labs/dbt-core](https://github.com/dbt-labs/dbt-core) ![Stars](https://img.shields.io/github/stars/dbt-labs/dbt-core?style=social&label=%20)
dbt enables data analysts and engineers to transform data using SQL, following software engineering practices. | [Apply](https://www.getdbt.com/careers) | 48 | | [Diagrid](https://www.diagrid.io) | [dapr/dapr](https://github.com/dapr/dapr) ![Stars](https://img.shields.io/github/stars/dapr/dapr?style=social&label=%20)
Portable, event-driven runtime for building distributed applications. | [Apply](https://www.diagrid.io/careers) | 49 | | [Directus](https://directus.io) | [directus/directus](https://github.com/directus/directus) ![Stars](https://img.shields.io/github/stars/directus/directus?style=social&label=%20)
Open-source headless CMS and data platform. Turn any SQL database into an API, admin panel, and app backend. | [Apply](https://directus.io/careers) | 50 | | [DragonflyDB](https://www.dragonflydb.io) | [dragonflydb/dragonfly](https://github.com/dragonflydb/dragonfly) ![Stars](https://img.shields.io/github/stars/dragonflydb/dragonfly?style=social&label=%20)
Modern in-memory datastore. Fully compatible with Redis and Memcached APIs. | [Apply](https://www.dragonflydb.io/careers) | 51 | | [DuckDB Labs](https://duckdb.org) | [duckdb/duckdb](https://github.com/duckdb/duckdb) ![Stars](https://img.shields.io/github/stars/duckdb/duckdb?style=social&label=%20)
In-process SQL OLAP database management system. | [Apply](https://duckdb.org/foundation/) | 52 | | [Elastic](https://www.elastic.co) | [elastic/elasticsearch](https://github.com/elastic/elasticsearch) ![Stars](https://img.shields.io/github/stars/elastic/elasticsearch?style=social&label=%20)
Free and Open Source, Distributed, RESTful Search Engine | [Apply](https://www.elastic.co/about/careers/) | 53 | | [Fivetran](https://www.fivetran.com) | [fivetran/fivetran_connector_sdk](https://github.com/fivetran/fivetran_connector_sdk) ![Stars](https://img.shields.io/github/stars/fivetran/fivetran_connector_sdk?style=social&label=%20)
Automated data movement platform for analytics and data warehouses. | [Apply](https://www.fivetran.com/careers) | 54 | | [Flagsmith](https://flagsmith.com) | [Flagsmith/flagsmith](https://github.com/Flagsmith/flagsmith) ![Stars](https://img.shields.io/github/stars/Flagsmith/flagsmith?style=social&label=%20)
Open-source feature flag and remote config service. Alternative to LaunchDarkly. | [Apply](https://flagsmith.com/careers) | 55 | | [Formbricks](https://formbricks.com) | [formbricks/formbricks](https://github.com/formbricks/formbricks) ![Stars](https://img.shields.io/github/stars/formbricks/formbricks?style=social&label=%20)
Open-source experience management. Privacy-first surveys and feedback. | [Apply](https://formbricks.com/careers) | 56 | | [FOSSA](https://fossa.com) | [fossas/fossa-cli](https://github.com/fossas/fossa-cli) ![Stars](https://img.shields.io/github/stars/fossas/fossa-cli?style=social&label=%20)
Fast, portable and reliable dependency analysis for any codebase. Supports license & vulnerability scanning for large monoliths. Language-agnostic; integrates with 20+ build systems. | [Apply](https://fossa.com/careers) | 57 | | [GitLab](https://about.gitlab.com) | [gitlab](https://github.com/gitlab) ![Stars](https://img.shields.io/github/stars/gitlab?style=social&label=%20)
GitLab is an open source end-to-end software development platform with built-in version control and CI/CD. | [Apply](https://about.gitlab.com/jobs/) | 58 | | [Google](https://www.google.com) | [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) ![Stars](https://img.shields.io/github/stars/kubernetes/kubernetes?style=social&label=%20)
Production-Grade Container Orchestration. | [Apply](https://kubernetes.io/careers/) | 59 | | [Gradle Inc.](https://gradle.com) | [gradle/gradle](https://github.com/gradle/gradle) ![Stars](https://img.shields.io/github/stars/gradle/gradle?style=social&label=%20)
Adaptable, fast automation for all | [Apply](https://gradle.com/careers/) | 60 | | [Grafana Labs](https://grafana.com) | [grafana/grafana](https://github.com/grafana/grafana) ![Stars](https://img.shields.io/github/stars/grafana/grafana?style=social&label=%20)
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more. | [Apply](https://grafana.com/about/hiring) | 61 | | [HashiCorp](https://www.hashicorp.com) | [hashicorp/terraform](https://github.com/hashicorp/terraform) ![Stars](https://img.shields.io/github/stars/hashicorp/terraform?style=social&label=%20)
Infrastructure as Code tool for building and versioning infrastructure safely and efficiently. | [Apply](https://www.hashicorp.com/en/careers/open-positions) | 62 | | [HashiCorp](https://www.hashicorp.com) | [hashicorp/vault](https://github.com/hashicorp/vault) ![Stars](https://img.shields.io/github/stars/hashicorp/vault?style=social&label=%20)
Tool for secrets management and data protection. | [Apply](https://www.hashicorp.com/en/careers/open-positions) | 63 | | [HashiCorp](https://www.hashicorp.com) | [hashicorp/consul](https://github.com/hashicorp/consul) ![Stars](https://img.shields.io/github/stars/hashicorp/consul?style=social&label=%20)
Service networking solution to connect and secure services. | [Apply](https://www.hashicorp.com/en/careers/open-positions) | 64 | | [Hasura](https://hasura.io) | [hasura/graphql-engine](https://github.com/hasura/graphql-engine) ![Stars](https://img.shields.io/github/stars/hasura/graphql-engine?style=social&label=%20)
Blazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events. | [Apply](https://hasura.io/careers) | 65 | | [Hazelcast](https://hazelcast.com) | [hazelcast/hazelcast](https://github.com/hazelcast/hazelcast) ![Stars](https://img.shields.io/github/stars/hazelcast/hazelcast?style=social&label=%20)
Hazelcast is a unified real-time data platform combining stream processing with a fast data store, allowing customers to act instantly on data-in-motion for real-time insights. | [Apply](https://hazelcast.com/company/careers/) | 66 | | [Helm Project](https://helm.sh) | [helm/helm](https://github.com/helm/helm) ![Stars](https://img.shields.io/github/stars/helm/helm?style=social&label=%20)
The Kubernetes Package Manager. | [Apply](https://helm.sh) | 67 | | [Hugging Face](https://huggingface.co) | [huggingface/transformers](https://github.com/huggingface/transformers) ![Stars](https://img.shields.io/github/stars/huggingface/transformers?style=social&label=%20)
State-of-the-art Machine Learning for PyTorch and TensorFlow. | [Apply](https://apply.workable.com/huggingface/) | 68 | | [Ibexa](https://www.ibexa.co) | [ezsystems/ezplatform](https://github.com/ezsystems/ezplatform) ![Stars](https://img.shields.io/github/stars/ezsystems/ezplatform?style=social&label=%20)
Meta repository that pulls in all dependencies for clean distribution of Ibexa Platform. | [Apply](https://www.ibexa.co/about/careers) | 69 | | [Infisical](https://infisical.com) | [infisical/infisical](https://github.com/infisical/infisical) ![Stars](https://img.shields.io/github/stars/infisical/infisical?style=social&label=%20)
Open-source platform for secrets, certificates, and privileged access management. | [Apply](https://infisical.com/careers) | 70 | | [InfluxData](https://www.influxdata.com) | [influxdata/influxdb](https://github.com/influxdata/influxdb) ![Stars](https://img.shields.io/github/stars/influxdata/influxdb?style=social&label=%20)
Scalable time-series database for metrics, events, and real-time analytics. | [Apply](https://www.influxdata.com/careers/) | 71 | | [IRCCloud](https://www.irccloud.com) | [irccloud/ios](https://github.com/irccloud/ios) ![Stars](https://img.shields.io/github/stars/irccloud/ios?style=social&label=%20)
IRCCloud iOS App | [Apply](https://www.irccloud.com/jobs) | 72 | | [Isovalent](https://www.isovalent.com) | [cilium/cilium](https://github.com/cilium/cilium) ![Stars](https://img.shields.io/github/stars/cilium/cilium?style=social&label=%20)
eBPF-based networking, observability, and security for cloud native. | [Apply](https://www.isovalent.com/careers/) | 73 | | [JetBrains](https://www.jetbrains.com) | [jetbrains/kotlin](https://github.com/jetbrains/kotlin) ![Stars](https://img.shields.io/github/stars/jetbrains/kotlin?style=social&label=%20)
The Kotlin Programming Language. | [Apply](https://www.jetbrains.com/careers/jobs/) | 74 | | [JetBrains](https://www.jetbrains.com) | [jetbrains/intellij-community](https://github.com/jetbrains/intellij-community) ![Stars](https://img.shields.io/github/stars/jetbrains/intellij-community?style=social&label=%20)
IntelliJ IDEA & IntelliJ Platform | [Apply](https://www.jetbrains.com/careers/jobs/) | 75 | | [Jetstack](https://www.jetstack.io) | [cert-manager/cert-manager](https://github.com/cert-manager/cert-manager) ![Stars](https://img.shields.io/github/stars/cert-manager/cert-manager?style=social&label=%20)
Automatically provision and manage TLS certificates in Kubernetes. | [Apply](https://www.jetstack.io/careers/) | 76 | | [JuiceData](https://juicedata.io) | [juicedata/juicefs](https://github.com/juicedata/juicefs) ![Stars](https://img.shields.io/github/stars/juicedata/juicefs?style=social&label=%20)
Distributed POSIX file system built on top of Redis and S3. | [Apply](https://juicedata.io/en/careers/) | 77 | | [Kaltura](https://corp.kaltura.com) | [kaltura/nginx-vod-module](https://github.com/kaltura/nginx-vod-module) ![Stars](https://img.shields.io/github/stars/kaltura/nginx-vod-module?style=social&label=%20)
NGINX-based MP4 Repackager | [Apply](https://corp.kaltura.com/company/careers/) | 78 | | [Kong Inc.](https://konghq.com) | [Kong/kong](https://github.com/Kong/kong) ![Stars](https://img.shields.io/github/stars/Kong/kong?style=social&label=%20)
Cloud-native API gateway and service mesh for microservices and distributed architectures. | [Apply](https://konghq.com/company/careers) | 79 | | [Langfuse](https://langfuse.com) | [langfuse/langfuse](https://github.com/langfuse/langfuse) ![Stars](https://img.shields.io/github/stars/langfuse/langfuse?style=social&label=%20)
Open-source LLM engineering platform for observability and analytics. | [Apply](https://langfuse.com/careers) | 80 | | [Linux Foundation](https://www.linuxfoundation.org) | [valkey-io/valkey](https://github.com/valkey-io/valkey) ![Stars](https://img.shields.io/github/stars/valkey-io/valkey?style=social&label=%20)
High-performance data structure server forked from Redis. | [Apply](https://www.linuxfoundation.org/about/careers) | 81 | | [Mapbox](https://www.mapbox.com) | [mapbox/mapbox-gl-js](https://github.com/mapbox/mapbox-gl-js) ![Stars](https://img.shields.io/github/stars/mapbox/mapbox-gl-js?style=social&label=%20)
Interactive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL | [Apply](https://www.mapbox.com/careers/) | 82 | | [Mattermost](https://mattermost.com) | [mattermost/mattermost-server](https://github.com/mattermost/mattermost-server) ![Stars](https://img.shields.io/github/stars/mattermost/mattermost-server?style=social&label=%20)
Mattermost is an open source platform for secure collaboration across the entire software development lifecycle.. | [Apply](https://mattermost.com/careers/) | 83 | | [Mattermost](https://mattermost.com) | [mattermost/focalboard](https://github.com/mattermost/focalboard) ![Stars](https://img.shields.io/github/stars/mattermost/focalboard?style=social&label=%20)
Focalboard is an open source, self-hosted alternative to Trello, Notion, and Asana. | [Apply](https://mattermost.com/careers/) | 84 | | [Maxim AI](https://www.getmaxim.ai) | [maximhq/bifrost](https://github.com/maximhq/bifrost) ![Stars](https://img.shields.io/github/stars/maximhq/bifrost?style=social&label=%20)
Bifrost is a high-performance open source LLM gateway that connects 1000+ models through a single API interface with extremely high throughput. | [Apply](https://www.getmaxim.ai/careers) | 85 | | [Meltano](https://meltano.com) | [meltano/meltano](https://github.com/meltano/meltano) ![Stars](https://img.shields.io/github/stars/meltano/meltano?style=social&label=%20)
Open-source platform for the whole data lifecycle from extraction to orchestration. | [Apply](https://meltano.com/jobs) | 86 | | [Metabase](https://www.metabase.com) | [metabase/metabase](https://github.com/metabase/metabase) ![Stars](https://img.shields.io/github/stars/metabase/metabase?style=social&label=%20)
The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart: | [Apply](https://www.metabase.com/jobs) | 87 | | [MindsDB](https://mindsdb.com) | [mindsdb/mindsdb](https://github.com/mindsdb/mindsdb) ![Stars](https://img.shields.io/github/stars/mindsdb/mindsdb?style=social&label=%20)
Platform for building AI from enterprise data. Integrates with 200+ data sources. | [Apply](https://mindsdb.com/careers) | 88 | | [MinIO](https://min.io) | [minio/minio](https://github.com/minio/minio) ![Stars](https://img.shields.io/github/stars/minio/minio?style=social&label=%20)
High-performance object storage for AI and cloud-native applications. | [Apply](https://min.io/careers) | 89 | | [MongoDB](https://www.mongodb.com) | [mongodb/mongo](https://github.com/mongodb/mongo) ![Stars](https://img.shields.io/github/stars/mongodb/mongo?style=social&label=%20)
The MongoDB Database | [Apply](https://www.mongodb.com/careers) | 90 | | [n8n](https://n8n.io) | [n8n-io/n8n](https://github.com/n8n-io/n8n) ![Stars](https://img.shields.io/github/stars/n8n-io/n8n?style=social&label=%20)
Free and source-available fair-code licensed workflow automation tool. | [Apply](https://n8n.io/careers/) | 91 | | [NocoDB](https://nocodb.com) | [NocoDB/nocodb](https://github.com/NocoDB/nocodb) ![Stars](https://img.shields.io/github/stars/NocoDB/nocodb?style=social&label=%20)
Open-source Airtable alternative. Turns any database into a smart spreadsheet. | [Apply](https://nocodb.com/careers) | 92 | | [Novu](https://novu.co) | [novuhq/novu](https://github.com/novuhq/novu) ![Stars](https://img.shields.io/github/stars/novuhq/novu?style=social&label=%20)
Open-source notification infrastructure for developers. Email and multi-channel notifications. | [Apply](https://handbook.novu.co/careers-page) | 93 | | [npm (GitHub)](https://www.npmjs.com) | [npm/cli](https://github.com/npm/cli) ![Stars](https://img.shields.io/github/stars/npm/cli?style=social&label=%20)
the package manager for JavaScript | [Apply](https://www.npmjs.com/jobs) | 94 | | [Odoo](https://www.odoo.com) | [odoo/odoo](https://github.com/odoo/odoo) ![Stars](https://img.shields.io/github/stars/odoo/odoo?style=social&label=%20)
Odoo. Open Source Apps To Grow Your Business. | [Apply](https://www.odoo.com/jobs) | 95 | | [OpenCraft](https://opencraft.com/) | [openedx/edx-platform](https://github.com/openedx/edx-platform) ![Stars](https://img.shields.io/github/stars/openedx/edx-platform?style=social&label=%20)
The Open edX LMS & Studio | [Apply](https://opencraft.com/jobs/) | 96 | | [OpenTelemetry](https://opentelemetry.io) | [open-telemetry/opentelemetry-collector](https://github.com/open-telemetry/opentelemetry-collector) ![Stars](https://img.shields.io/github/stars/open-telemetry/opentelemetry-collector?style=social&label=%20)
Vendor-agnostic implementation on how to receive, process and export telemetry data. | [Apply](https://opentelemetry.io/community/) | 97 | | [OpenTelemetry](https://opentelemetry.io) | [open-telemetry/opentelemetry-go](https://github.com/open-telemetry/opentelemetry-go) ![Stars](https://img.shields.io/github/stars/open-telemetry/opentelemetry-go?style=social&label=%20)
OpenTelemetry Go API and SDK. | [Apply](https://opentelemetry.io/community/) | 98 | | [OpenTelemetry](https://opentelemetry.io) | [open-telemetry/opentelemetry-python](https://github.com/open-telemetry/opentelemetry-python) ![Stars](https://img.shields.io/github/stars/open-telemetry/opentelemetry-python?style=social&label=%20)
OpenTelemetry Python API and SDK. | [Apply](https://opentelemetry.io/community/) | 99 | | [Oro Inc.](https://oroinc.com) | [oroinc/crm](https://github.com/oroinc/crm) ![Stars](https://img.shields.io/github/stars/oroinc/crm?style=social&label=%20)
Main OroCRM package with core functionality. | [Apply](https://oroinc.com/careers) | 100 | | [Parity Technologies](https://www.parity.io) | [paritytech/parity-ethereum](https://github.com/paritytech/parity-ethereum) ![Stars](https://img.shields.io/github/stars/paritytech/parity-ethereum?style=social&label=%20)
The fast, light, and robust client for Ethereum-like networks. | [Apply](https://www.parity.io/jobs) | 101 | | [Payload](https://payloadcms.com) | [payloadcms/payload](https://github.com/payloadcms/payload) ![Stars](https://img.shields.io/github/stars/payloadcms/payload?style=social&label=%20)
Open-source fullstack Next.js framework. TypeScript headless CMS and application framework. | [Apply](https://payloadcms.com/careers) | 102 | | [Penpot](https://penpot.app) | [penpot/penpot](https://github.com/penpot/penpot) ![Stars](https://img.shields.io/github/stars/penpot/penpot?style=social&label=%20)
Penpot: The open-source design tool for design and code collaboration | [Apply](https://penpot.app/careers) | 103 | | [Pimcore](https://pimcore.com) | [pimcore/pimcore](https://github.com/pimcore/pimcore) ![Stars](https://img.shields.io/github/stars/pimcore/pimcore?style=social&label=%20)
Core Framework for the Open Core Data & Experience Management Platform (PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce) | [Apply](https://pimcore.com/en/about/careers) | 104 | | [PingCAP](https://pingcap.com) | [pingcap/tidb](https://github.com/pingcap/tidb) ![Stars](https://img.shields.io/github/stars/pingcap/tidb?style=social&label=%20)
TiDB - the open-source, cloud-native, distributed SQL database designed for modern applications. | [Apply](https://pingcap.com/recruit-cn/join/) | 105 | | [Plane](https://plane.so) | [makeplane/plane](https://github.com/makeplane/plane) ![Stars](https://img.shields.io/github/stars/makeplane/plane?style=social&label=%20)
Open-source project management tool. Alternative to Jira, Linear, and Asana. | [Apply](https://plane.so/careers) | 106 | | [PlanetScale](https://planetscale.com) | [vitessio/vitess](https://github.com/vitessio/vitess) ![Stars](https://img.shields.io/github/stars/vitessio/vitess?style=social&label=%20)
Database clustering system for horizontal scaling of MySQL. | [Apply](https://planetscale.com/careers) | 107 | | [Plausible Analytics](https://plausible.io) | [plausible/analytics](https://github.com/plausible/analytics) ![Stars](https://img.shields.io/github/stars/plausible/analytics?style=social&label=%20)
Simple, privacy-friendly alternative to Google Analytics. | [Apply](https://plausible.io/jobs/product-engineer) | 108 | | [PostHog](https://posthog.com) | [posthog/posthog](https://github.com/posthog/posthog) ![Stars](https://img.shields.io/github/stars/posthog/posthog?style=social&label=%20)
Open-source product analytics platform. Alternative to Mixpanel and Amplitude. | [Apply](https://posthog.com/careers) | 109 | | [Prefect](https://www.prefect.io) | [PrefectHQ/prefect](https://github.com/PrefectHQ/prefect) ![Stars](https://img.shields.io/github/stars/PrefectHQ/prefect?style=social&label=%20)
Modern workflow orchestration for data pipelines, ML workflows, and more. | [Apply](https://job-boards.greenhouse.io/prefect) | 110 | | [Preset](https://preset.io) | [apache/superset](https://github.com/apache/superset) ![Stars](https://img.shields.io/github/stars/apache/superset?style=social&label=%20)
Modern data exploration and visualization platform. Open-source BI tool. | [Apply](https://preset.io/careers) | 111 | | [PrestaShop](https://prestashop.com) | [PrestaShop/PrestaShop](https://github.com/PrestaShop/PrestaShop) ![Stars](https://img.shields.io/github/stars/PrestaShop/PrestaShop?style=social&label=%20)
PrestaShop is the universal open-source software platform to build your e-commerce solution. | [Apply](https://prestashop.com/careers/) | 112 | | [Presto Foundation](https://prestodb.io) | [prestodb/presto](https://github.com/prestodb/presto) ![Stars](https://img.shields.io/github/stars/prestodb/presto?style=social&label=%20)
Distributed SQL query engine for big data. | [Apply](https://prestodb.io/community.html) | 113 | | [Prisma](https://www.prisma.io) | [prisma/prisma](https://github.com/prisma/prisma) ![Stars](https://img.shields.io/github/stars/prisma/prisma?style=social&label=%20)
Next-generation ORM for Node.js & TypeScript. Works with PostgreSQL and other databases. | [Apply](https://www.prisma.io/careers) | 114 | | [Qdrant](https://qdrant.tech) | [qdrant/qdrant](https://github.com/qdrant/qdrant) ![Stars](https://img.shields.io/github/stars/qdrant/qdrant?style=social&label=%20)
High-performance vector search engine and database for the next generation of AI applications. | [Apply](https://join.com/companies/qdrant) | 115 | | [QuestDB](https://questdb.io) | [questdb/questdb](https://github.com/questdb/questdb) ![Stars](https://img.shields.io/github/stars/questdb/questdb?style=social&label=%20)
High-performance time-series database for real-time analytics and monitoring. | [Apply](https://questdb.io/careers) | 116 | | [Redis](https://redis.com) | [redis/redis](https://github.com/redis/redis) ![Stars](https://img.shields.io/github/stars/redis/redis?style=social&label=%20)
In-memory data structure store used as database, cache and message broker. | [Apply](https://redis.com/company/careers/) | 117 | | [Redpanda](https://www.redpanda.com) | [redpanda-data/redpanda](https://github.com/redpanda-data/redpanda) ![Stars](https://img.shields.io/github/stars/redpanda-data/redpanda?style=social&label=%20)
Streaming data platform for mission critical workloads. Kafka API compatible. | [Apply](https://www.redpanda.com/careers) | 118 | | [Rocket.Chat](https://www.rocket.chat) | [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat) ![Stars](https://img.shields.io/github/stars/RocketChat/Rocket.Chat?style=social&label=%20)
Open-source team communication platform. Slack and Microsoft Teams alternative. | [Apply](https://www.rocket.chat/jobs) | 119 | | [ScyllaDB](https://www.scylladb.com) | [scylladb/scylladb](https://github.com/scylladb/scylladb) ![Stars](https://img.shields.io/github/stars/scylladb/scylladb?style=social&label=%20)
NoSQL data store using the seastar framework. Cassandra compatible. | [Apply](https://www.scylladb.com/company/careers/) | 120 | | [SeaweedFS](https://seaweedfs.com) | [seaweedfs/seaweedfs](https://github.com/seaweedfs/seaweedfs) ![Stars](https://img.shields.io/github/stars/seaweedfs/seaweedfs?style=social&label=%20)
Fast distributed storage system for billions of files. | [Apply](https://www.seaweedfs.com/) | 121 | | [Seldon](https://www.seldon.io) | [SeldonIO/seldon-core](https://github.com/SeldonIO/seldon-core) ![Stars](https://img.shields.io/github/stars/SeldonIO/seldon-core?style=social&label=%20)
An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models | [Apply](https://www.seldon.io/careers/) | 122 | | [Sentry](https://sentry.io) | [getsentry/sentry](https://github.com/getsentry/sentry) ![Stars](https://img.shields.io/github/stars/getsentry/sentry?style=social&label=%20)
Developer-first error tracking and performance monitoring | [Apply](https://sentry.io/careers/) | 123 | | [SigNoz](https://signoz.io) | [signoz/signoz](https://github.com/signoz/signoz) ![Stars](https://img.shields.io/github/stars/signoz/signoz?style=social&label=%20)
Open-source APM and observability platform. Alternative to DataDog and New Relic. | [Apply](https://signoz.io/careers/) | 124 | | [Slic3r](https://slic3r.org) | [slic3r/Slic3r](https://github.com/slic3r/Slic3r) ![Stars](https://img.shields.io/github/stars/slic3r/Slic3r?style=social&label=%20)
Open Source toolpath generator for 3D printers | [Apply](https://slic3r.org/blog/job-opportunities/) | 125 | | [Snyk](https://snyk.io) | [snyk/snyk](https://github.com/snyk/snyk) ![Stars](https://img.shields.io/github/stars/snyk/snyk?style=social&label=%20)
Developer security platform for finding and fixing vulnerabilities. | [Apply](https://snyk.io/careers/) | 126 | | [Snyk](https://snyk.io) | [snyk/cli](https://github.com/snyk/cli) ![Stars](https://img.shields.io/github/stars/snyk/cli?style=social&label=%20)
Snyk CLI for finding and fixing known vulnerabilities in dependencies. | [Apply](https://snyk.io/careers/) | 127 | | [SonarSource](https://sonarsource.com) | [SonarSource/SonarQube](https://github.com/SonarSource/SonarQube) ![Stars](https://img.shields.io/github/stars/SonarSource/SonarQube?style=social&label=%20)
Continuous Inspection | [Apply](http://sonarsource.com/company/jobs/) | 128 | | [SPIFFE/SPIRE](https://spiffe.io) | [spiffe/spire](https://github.com/spiffe/spire) ![Stars](https://img.shields.io/github/stars/spiffe/spire?style=social&label=%20)
SPIFFE Runtime Environment for workload identity. | [Apply](https://spiffe.io) | 129 | | [Spotify](https://www.spotify.com) | [backstage/backstage](https://github.com/backstage/backstage) ![Stars](https://img.shields.io/github/stars/backstage/backstage?style=social&label=%20)
Open platform for building developer portals. Created by Spotify. | [Apply](https://www.lifeatspotify.com/jobs) | 130 | | [Starburst](https://www.starburst.io) | [trinodb/trino](https://github.com/trinodb/trino) ![Stars](https://img.shields.io/github/stars/trinodb/trino?style=social&label=%20)
Fast distributed SQL query engine for big data analytics. | [Apply](https://www.starburst.io/careers/) | 131 | | [Stitch Data](https://www.stitchdata.com) | [singer-io/getting-started](https://github.com/singer-io/getting-started) ![Stars](https://img.shields.io/github/stars/singer-io/getting-started?style=social&label=%20)
Open-source standard for writing scripts that move data. | [Apply](https://www.stitchdata.com/careers/) | 132 | | [Strapi](https://strapi.io) | [strapi/strapi](https://github.com/strapi/strapi) ![Stars](https://img.shields.io/github/stars/strapi/strapi?style=social&label=%20)
Open source Node.js Headless CMS to easily build customisable APIs. | [Apply](https://strapi.io/careers) | 133 | | [StreamNative](https://streamnative.io) | [streamnative/pulsar](https://github.com/streamnative/pulsar) ![Stars](https://img.shields.io/github/stars/streamnative/pulsar?style=social&label=%20)
Cloud-native distributed pub-sub messaging system. | [Apply](https://streamnative.io/careers) | 134 | | [Styra](https://www.styra.com) | [open-policy-agent/opa](https://github.com/open-policy-agent/opa) ![Stars](https://img.shields.io/github/stars/open-policy-agent/opa?style=social&label=%20)
Open Policy Agent for unified policy enforcement. | [Apply](https://www.styra.com/careers/) | 135 | | [Supabase](https://supabase.com) | [supabase/supabase](https://github.com/supabase/supabase) ![Stars](https://img.shields.io/github/stars/supabase/supabase?style=social&label=%20)
The open source Firebase alternative. Build a complete backend in minutes. | [Apply](https://supabase.com/careers) | 136 | | [Sylabs](https://sylabs.io) | [sylabs/singularity](https://github.com/sylabs/singularity) ![Stars](https://img.shields.io/github/stars/sylabs/singularity?style=social&label=%20)
SingularityCE is the Community Edition of Singularity, an open source container platform designed to be simple, fast, and secure. | [Apply](https://sylabs.io/resources/jobs) | 137 | | [Sysdig](https://www.sysdig.com) | [draios/sysdig](https://github.com/draios/sysdig) ![Stars](https://img.shields.io/github/stars/draios/sysdig?style=social&label=%20)
Linux system exploration and troubleshooting tool with first class support for containers | [Apply](https://www.sysdig.com/careers) | 138 | | [Temporal](https://temporal.io) | [temporalio/temporal](https://github.com/temporalio/temporal) ![Stars](https://img.shields.io/github/stars/temporalio/temporal?style=social&label=%20)
Temporal is a microservice orchestration platform which enables developers to build scalable applications without sacrificing productivity or reliability. | [Apply](https://temporal.io/careers) | 139 | | [Tetrate](https://www.tetrate.io) | [tetratelabs/getenvoy](https://github.com/tetratelabs/getenvoy) ![Stars](https://img.shields.io/github/stars/tetratelabs/getenvoy?style=social&label=%20)
Envoy binary distribution and extensions. | [Apply](https://www.tetrate.io/careers/) | 140 | | [Tetrate](https://www.tetrate.io) | [tetratelabs/istio-distro](https://github.com/tetratelabs/istio-distro) ![Stars](https://img.shields.io/github/stars/tetratelabs/istio-distro?style=social&label=%20)
Tetrate Istio Distribution for production-grade service mesh. | [Apply](https://www.tetrate.io/careers/) | 141 | | [Timescale](https://www.timescale.com) | [timescale/timescaledb](https://github.com/timescale/timescaledb) ![Stars](https://img.shields.io/github/stars/timescale/timescaledb?style=social&label=%20)
Open-source time-series SQL database optimized for fast ingest and complex queries. | [Apply](https://www.timescale.com/careers) | 142 | | [ToolJet](https://tooljet.com) | [ToolJet/ToolJet](https://github.com/ToolJet/ToolJet) ![Stars](https://img.shields.io/github/stars/ToolJet/ToolJet?style=social&label=%20)
Open-source low-code platform to build and deploy internal tools. Retool alternative. | [Apply](https://tooljet.com/careers) | 143 | | [Traefik Labs](https://traefik.io) | [traefik/traefik](https://github.com/traefik/traefik) ![Stars](https://img.shields.io/github/stars/traefik/traefik?style=social&label=%20)
Cloud Native Application Proxy. Edge router for microservices with automatic service discovery. | [Apply](https://traefik.io/careers) | 144 | | [Twenty](https://twenty.com) | [twentyhq/twenty](https://github.com/twentyhq/twenty) ![Stars](https://img.shields.io/github/stars/twentyhq/twenty?style=social&label=%20)
Open-source CRM. Modern alternative to Salesforce. | [Apply](https://twenty.com/jobs) | 145 | | [Uber](https://www.uber.com) | [jaegertracing/jaeger](https://github.com/jaegertracing/jaeger) ![Stars](https://img.shields.io/github/stars/jaegertracing/jaeger?style=social&label=%20)
Distributed tracing platform for monitoring microservices. | [Apply](https://www.uber.com/us/en/careers/) | 146 | | [Unsplash](https://unsplash.com) | [unsplash/unsplash-js](https://github.com/unsplash/unsplash-js) ![Stars](https://img.shields.io/github/stars/unsplash/unsplash-js?style=social&label=%20)
🤖 Official JavaScript wrapper for the Unsplash API | [Apply](https://unsplash.com/hiring) | 147 | | [Uptrace](https://uptrace.dev) | [uptrace/uptrace](https://github.com/uptrace/uptrace) ![Stars](https://img.shields.io/github/stars/uptrace/uptrace?style=social&label=%20)
Open-source APM with distributed tracing and metrics. | [Apply](https://uptrace.dev/careers/) | 148 | | [Vercel](https://vercel.com) | [vercel/next.js](https://github.com/vercel/next.js) ![Stars](https://img.shields.io/github/stars/vercel/next.js?style=social&label=%20)
The React Framework for production. Used by Vercel's platform. | [Apply](https://vercel.com/careers) | 149 | | [VictoriaMetrics](https://victoriametrics.com) | [victoriametrics/VictoriaMetrics](https://github.com/victoriametrics/VictoriaMetrics) ![Stars](https://img.shields.io/github/stars/victoriametrics/VictoriaMetrics?style=social&label=%20)
Fast, cost-effective monitoring solution and time series database. | [Apply](https://victoriametrics.com/careers/) | 150 | | [VoidZero Inc.](https://voidzero.dev) | [vitejs/vite](https://github.com/vitejs/vite) ![Stars](https://img.shields.io/github/stars/vitejs/vite?style=social&label=%20)
Next Generation Frontend Tooling | [Apply](https://voidzero.dev/team) | 151 | | [Weaviate](https://weaviate.io) | [weaviate/weaviate](https://github.com/weaviate/weaviate) ![Stars](https://img.shields.io/github/stars/weaviate/weaviate?style=social&label=%20)
Open-source vector database that stores both objects and vectors for AI-native applications. | [Apply](https://wellfound.com/company/weaviate/jobs) | 152 | | [Windmill](https://www.windmill.dev) | [windmill-labs/windmill](https://github.com/windmill-labs/windmill) ![Stars](https://img.shields.io/github/stars/windmill-labs/windmill?style=social&label=%20)
Open-source developer platform to turn scripts into webhooks, workflows and UIs. | [Apply](https://www.ycombinator.com/companies/windmill/jobs) | 153 | | [Yugabyte](https://www.yugabyte.com) | [YugaByte/yugabyte-db](https://github.com/YugaByte/yugabyte-db) ![Stars](https://img.shields.io/github/stars/YugaByte/yugabyte-db?style=social&label=%20)
YugabyteDB - the cloud native distributed SQL database for mission-critical applications. | [Apply](https://www.yugabyte.com/careers/) | 154 | | [Zilliz](https://zilliz.com) | [milvus-io/milvus](https://github.com/milvus-io/milvus) ![Stars](https://img.shields.io/github/stars/milvus-io/milvus?style=social&label=%20)
High-performance, cloud-native vector database built for scalable vector ANN search. | [Apply](https://zilliz.com/careers) | 155 | --------------------------------------------------------------------------------