Topic: "program-analysis"
x64dbg/x64dbg
An open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.
Language: C++ - Size: 59.8 MB - Last synced at: 10 days ago - Pushed at: 12 days ago - Stars: 47,347 - Forks: 2,641
horsicq/Detect-It-Easy
Program for determining types of files for Windows, Linux and MacOS.
Language: JavaScript - Size: 23.2 MB - Last synced at: 5 days ago - Pushed at: 6 days ago - Stars: 9,866 - Forks: 865
facebook/pyre-check
Performant type-checking for python.
Language: OCaml - Size: 513 MB - Last synced at: 7 days ago - Pushed at: 8 days ago - Stars: 7,130 - Forks: 452
ConsenSysDiligence/mythril
Mythril is a symbolic-execution-based securty analysis tool for EVM bytecode. It detects security vulnerabilities in smart contracts built for Ethereum and other EVM-compatible blockchains.
Language: Python - Size: 47.4 MB - Last synced at: about 5 hours ago - Pushed at: about 2 months ago - Stars: 4,179 - Forks: 802
JonathanSalwan/Triton
Triton is a dynamic binary analysis library. Build your own program analysis tools, automate your reverse engineering, perform software verification or just emulate code.
Language: C++ - Size: 57.2 MB - Last synced at: 16 days ago - Pushed at: 25 days ago - Stars: 3,961 - Forks: 569
trailofbits/manticore
Symbolic execution tool
Language: Python - Size: 45.9 MB - Last synced at: 9 days ago - Pushed at: about 1 month ago - Stars: 3,817 - Forks: 490
rizinorg/rizin
UNIX-like reverse engineering framework and command-line toolset.
Language: C - Size: 152 MB - Last synced at: 4 days ago - Pushed at: 5 days ago - Stars: 3,269 - Forks: 464
NASA-SW-VnV/ikos
Static analyzer for C/C++ based on the theory of Abstract Interpretation.
Language: C++ - Size: 5.05 MB - Last synced at: about 1 month ago - Pushed at: 8 months ago - Stars: 3,064 - Forks: 218
horsicq/DIE-engine
DIE engine
Language: C++ - Size: 61.9 MB - Last synced at: 14 days ago - Pushed at: 14 days ago - Stars: 2,901 - Forks: 368
google/bindiff
Quickly find differences and similarities in disassembled code
Language: Java - Size: 309 MB - Last synced at: 7 days ago - Pushed at: about 2 months ago - Stars: 2,828 - Forks: 210
python-security/pyt
A Static Analysis Tool for Detecting Security Vulnerabilities in Python Web Applications
Language: Python - Size: 3.2 MB - Last synced at: 3 months ago - Pushed at: about 5 years ago - Stars: 2,196 - Forks: 250
BinaryAnalysisPlatform/bap
Binary Analysis Platform
Language: OCaml - Size: 8.21 MB - Last synced at: 7 months ago - Pushed at: 8 months ago - Stars: 2,136 - Forks: 277
Tencent/CodeAnalysis
Static Code Analysis - 静态代码分析
Language: Python - Size: 667 MB - Last synced at: about 2 months ago - Pushed at: about 2 months ago - Stars: 1,808 - Forks: 297
jar-analyzer/jar-analyzer
Jar Analyzer - 一个 JAR 包 GUI 分析工具,方法调用关系搜索,方法调用链 DFS 算法分析,模拟 JVM 的污点分析验证 DFS 结果,字符串搜索,Java Web 组件入口分析,CFG 程序分析,JVM 栈帧分析,自定义表达式搜索,支持 MCP 调用,文档:https://docs.qq.com/doc/DV3pKbG9GS0pJS0tk
Language: Java - Size: 86.2 MB - Last synced at: about 1 month ago - Pushed at: about 1 month ago - Stars: 1,800 - Forks: 168
jplag/JPlag
State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs.
Language: Java - Size: 67.2 MB - Last synced at: 12 days ago - Pushed at: 14 days ago - Stars: 1,717 - Forks: 360
JonathanSalwan/VMProtect-devirtualization
Playing with the VMProtect software protection. Automatic deobfuscation of pure functions using symbolic execution and LLVM.
Language: Roff - Size: 28.1 MB - Last synced at: 7 months ago - Pushed at: over 3 years ago - Stars: 1,252 - Forks: 195
fkie-cad/cwe_checker
cwe_checker finds vulnerable patterns in binary executables
Language: Rust - Size: 9.31 MB - Last synced at: 7 months ago - Pushed at: 9 months ago - Stars: 1,223 - Forks: 129
pascal-lab/Tai-e-assignments
Tai-e assignments for static program analysis
Language: Java - Size: 28.4 MB - Last synced at: 7 months ago - Pushed at: about 3 years ago - Stars: 1,151 - Forks: 258
angr/angr-management
The official angr GUI.
Language: Python - Size: 14.9 MB - Last synced at: 3 days ago - Pushed at: 3 days ago - Stars: 1,098 - Forks: 121
semgrep/semgrep-rules
Semgrep Community Edition rules, maintained by Semgrep and the community. Free to use under the Semgrep Rules License.
Language: HCL - Size: 9.71 MB - Last synced at: 1 day ago - Pushed at: 2 days ago - Stars: 1,044 - Forks: 488
secure-software-engineering/phasar
A LLVM-based static analysis framework.
Language: C++ - Size: 171 MB - Last synced at: 5 days ago - Pushed at: 8 days ago - Stars: 1,022 - Forks: 155
jar-analyzer/jar-analyzer-v1-gui 📦
建议使用新版:https://github.com/jar-analyzer/jar-analyzer
Language: Java - Size: 20.2 MB - Last synced at: 4 months ago - Pushed at: about 2 years ago - Stars: 897 - Forks: 108
wala/WALA
T.J. Watson Libraries for Analysis, with front ends for Java, Android, and JavaScript, and many common static program analyses.
Language: Java - Size: 59.1 MB - Last synced at: 6 days ago - Pushed at: 7 days ago - Stars: 825 - Forks: 238
soot-oss/SootUp
A new version of Soot with a completely overhauled architecture
Language: Java - Size: 445 MB - Last synced at: 1 day ago - Pushed at: 3 days ago - Stars: 756 - Forks: 111
learn-llvm/awesome-llvm
A curated list of awesome LLVM (including Clang, etc) related resources.
Language: Python - Size: 137 KB - Last synced at: 3 days ago - Pushed at: 3 months ago - Stars: 675 - Forks: 46
falconre/falcon
Binary Analysis Framework in Rust
Language: Rust - Size: 2.23 MB - Last synced at: 13 days ago - Pushed at: almost 2 years ago - Stars: 577 - Forks: 47
mohitmishra786/reversingBits
A comprehensive collection of cheatsheets for reverse engineering, binary analysis, and assembly programming tools. This repository serves as a one-stop reference for security researchers, reverse engineers, and low-level programmers.
Language: HTML - Size: 131 KB - Last synced at: 5 months ago - Pushed at: 5 months ago - Stars: 562 - Forks: 65
ltcmelo/psychec
A compiler frontend for the C programming language
Language: C++ - Size: 11.2 MB - Last synced at: about 2 months ago - Pushed at: about 2 months ago - Stars: 552 - Forks: 40
mchalupa/dg
[LLVM Static Slicer] Various program analyses, construction of dependence graphs and program slicing of LLVM bitcode.
Language: C++ - Size: 5.74 MB - Last synced at: 7 months ago - Pushed at: 7 months ago - Stars: 505 - Forks: 137
enzet/symbolic-execution
History of symbolic execution (as well as SAT/SMT solving, fuzzing, and taint data tracking)
Language: Kotlin - Size: 14.9 MB - Last synced at: 7 months ago - Pushed at: over 1 year ago - Stars: 493 - Forks: 56
github/codeql-go 📦
The CodeQL extractor and libraries for Go.
Size: 14.9 MB - Last synced at: 2 months ago - Pushed at: almost 3 years ago - Stars: 465 - Forks: 127
hirrolot/mazeppa
A modern supercompiler for call-by-value functional languages
Language: OCaml - Size: 727 KB - Last synced at: 22 days ago - Pushed at: 23 days ago - Stars: 461 - Forks: 8
seahorn/seahorn
SeaHorn Verification Framework
Language: C - Size: 7.46 MB - Last synced at: 7 months ago - Pushed at: 7 months ago - Stars: 451 - Forks: 131
trailofbits/vast
VAST is an experimental compiler pipeline designed for program analysis of C and C++. It provides a tower of IRs as MLIR dialects to choose the best fit representations for a program analysis or further program abstraction.
Language: C++ - Size: 5.83 MB - Last synced at: about 2 months ago - Pushed at: about 2 months ago - Stars: 422 - Forks: 32
vitsalis/PyCG 📦
Static Python call graph generator
Language: Python - Size: 274 KB - Last synced at: about 2 months ago - Pushed at: about 2 years ago - Stars: 358 - Forks: 72
cs-au-dk/TIP
Static program analysis for TIP
Language: Scala - Size: 3.33 MB - Last synced at: 6 months ago - Pushed at: 8 months ago - Stars: 293 - Forks: 136
seahorn/clam
Static Analyzer for LLVM bitcode based on Abstract Interpretation. **Update**: clam is still actively maintained. Please use branch dev14.
Language: C - Size: 4.02 MB - Last synced at: 7 months ago - Pushed at: over 1 year ago - Stars: 279 - Forks: 39
canliture/nju-software-analysis-homework
南京大学《软件分析》课程课后作业(非Bamboo) NJU's software analysis homework; ... Not official, just a reference
Language: Java - Size: 2.51 MB - Last synced at: about 2 years ago - Pushed at: about 3 years ago - Stars: 275 - Forks: 38
HairyFotr/linter 📦
Static Analysis Compiler Plugin for Scala
Language: Scala - Size: 2.06 MB - Last synced at: 3 months ago - Pushed at: over 7 years ago - Stars: 268 - Forks: 34
Colton1skees/Dna
LLVM based static binary analysis framework
Language: C++ - Size: 1.09 MB - Last synced at: 2 months ago - Pushed at: 9 months ago - Stars: 257 - Forks: 26
seahorn/crab
A library for building abstract interpretation-based analyses. **Update**: crab is still actively maintained. Please use branch dev.
Language: C++ - Size: 6.79 MB - Last synced at: 7 months ago - Pushed at: about 1 year ago - Stars: 241 - Forks: 32
Feysh-Group/corax-community
Corax for Java: A general static analysis framework for java code checking.
Language: Kotlin - Size: 38 MB - Last synced at: 10 months ago - Pushed at: about 1 year ago - Stars: 239 - Forks: 20
ultimate-pa/ultimate
The Ultimate program analysis framework.
Language: Java - Size: 941 MB - Last synced at: 16 days ago - Pushed at: 16 days ago - Stars: 236 - Forks: 47
goblint/analyzer
Static analysis framework for C
Language: OCaml - Size: 40.4 MB - Last synced at: 13 days ago - Pushed at: 14 days ago - Stars: 225 - Forks: 85
trailofbits/siderophile
Find the ideal fuzz targets in a Rust codebase
Language: Rust - Size: 3.5 MB - Last synced at: 3 months ago - Pushed at: 3 months ago - Stars: 220 - Forks: 13
DosX-dev/PE-LiteScan
A simple crossplatform heuristic PE-analyzer
Language: C# - Size: 67.4 KB - Last synced at: 8 months ago - Pushed at: over 1 year ago - Stars: 218 - Forks: 9
antgroup/YASA-Engine
YASA is an open-source static program analysis project. Its core innovation lies in a unified intermediate representation called UAST, designed to support multiple programming languages. Built on top of UAST, YASA provides a highly accurate static analysis framework.
Language: TypeScript - Size: 4.53 MB - Last synced at: 1 day ago - Pushed at: 3 days ago - Stars: 217 - Forks: 18
quarkslab/qbindiff
Quarkslab Bindiffer but not only !
Language: Python - Size: 5.28 MB - Last synced at: 3 months ago - Pushed at: 8 months ago - Stars: 208 - Forks: 12
ExpoSEJS/ExpoSE
A Dynamic Symbolic Execution (DSE) engine for JavaScript. ExpoSE is highly scalable, compatible with recent JavaScript standards, and supports symbolic modelling of strings and regular expressions.
Language: JavaScript - Size: 12.1 MB - Last synced at: 8 months ago - Pushed at: 11 months ago - Stars: 202 - Forks: 40
GaloisInc/MATE
MATE is a suite of tools for interactive program analysis with a focus on hunting for bugs in C and C++ code using Code Property Graphs.
Language: Python - Size: 117 MB - Last synced at: 13 days ago - Pushed at: about 3 years ago - Stars: 197 - Forks: 12
cs-au-dk/TAJS 📦
Type Analyzer for JavaScript
Language: Java - Size: 76.2 MB - Last synced at: 10 months ago - Pushed at: 11 months ago - Stars: 194 - Forks: 40
fugue-re/fugue-core
A binary analysis framework written in Rust.
Language: Rust - Size: 1.82 MB - Last synced at: 5 months ago - Pushed at: 6 months ago - Stars: 170 - Forks: 9
quarkslab/pastis
PASTIS: Collaborative Fuzzing Framework
Language: Python - Size: 63.6 MB - Last synced at: about 1 month ago - Pushed at: 3 months ago - Stars: 162 - Forks: 10
GlacierW/MBA
Malware Behavior Analyzer
Language: C - Size: 24.7 MB - Last synced at: 8 months ago - Pushed at: over 8 years ago - Stars: 159 - Forks: 38
GaloisInc/cclyzerpp
cclyzer++ is a precise and scalable pointer analysis for LLVM code.
Language: C++ - Size: 3.99 MB - Last synced at: 13 days ago - Pushed at: 11 months ago - Stars: 149 - Forks: 17
liuml07/giri
Dynamic Program Slicing in LLVM Compiler
Language: C++ - Size: 2.32 MB - Last synced at: 3 months ago - Pushed at: over 7 years ago - Stars: 142 - Forks: 36
enkomio/Sojobo
A binary analysis framework
Language: F# - Size: 27.9 MB - Last synced at: 8 months ago - Pushed at: about 5 years ago - Stars: 132 - Forks: 18
GaloisInc/grease
CLI tool, Ghidra plug-in, and Haskell library for analyzing binaries using under-constrained symbolic execution
Language: Haskell - Size: 2.3 MB - Last synced at: 5 days ago - Pushed at: 7 days ago - Stars: 125 - Forks: 8
Enna1/LLVM-Study-Notes
Study notes about LLVM. LLVM 学习笔记. Licensed under CC BY-NC-SA 4.0
Language: Python - Size: 4.91 MB - Last synced at: almost 2 years ago - Pushed at: almost 2 years ago - Stars: 125 - Forks: 18
mingyuan-xia/PATDroid
A Program Analysis Toolkit for Android
Language: Java - Size: 3.77 MB - Last synced at: 5 months ago - Pushed at: over 8 years ago - Stars: 118 - Forks: 28
etiamz/supercompilation-resources
📚 A collection of resources about supercompilation
Size: 77.1 KB - Last synced at: 5 months ago - Pushed at: 5 months ago - Stars: 111 - Forks: 0
pfalcon/ScratchABlock
Yet another crippled decompiler project
Language: Python - Size: 905 KB - Last synced at: 24 days ago - Pushed at: about 4 years ago - Stars: 109 - Forks: 23
ConcoLLMic/ConcoLLMic
ConcoLLMic: the first language- and theory-agonistic concolic execution engine via LLM agents
Language: Python - Size: 84.5 MB - Last synced at: 7 days ago - Pushed at: 11 days ago - Stars: 100 - Forks: 3
kupl/VeriSmart-public
a safety verifier for Solidity smart contracts
Language: OCaml - Size: 220 KB - Last synced at: 2 months ago - Pushed at: almost 3 years ago - Stars: 97 - Forks: 25
rizinorg/book
An official book about Rizin
Language: CSS - Size: 39.5 MB - Last synced at: 3 months ago - Pushed at: 3 months ago - Stars: 92 - Forks: 46
jubnzv/iec-checker
Static analysis of IEC 61131-3 programs
Language: OCaml - Size: 476 KB - Last synced at: about 2 months ago - Pushed at: 7 months ago - Stars: 83 - Forks: 16
szabta89/IncA 📦
Incremental Program Analysis Framework
Language: Xtend - Size: 110 MB - Last synced at: about 2 years ago - Pushed at: over 4 years ago - Stars: 83 - Forks: 6
borzacchiello/naaz
Symbolic Execution Engine based on Ghidra's PCode
Language: C++ - Size: 291 KB - Last synced at: almost 3 years ago - Pushed at: over 3 years ago - Stars: 75 - Forks: 4
trailofbits/vendetect
A tool to automatically detect copy+pasted and vendored code between repositories
Language: Python - Size: 328 KB - Last synced at: 11 days ago - Pushed at: 18 days ago - Stars: 74 - Forks: 6
purseclab/DnD
A decompiler to automatically reverse-engineer the DNN semantics from its compiled binary using program analysis
Language: Python - Size: 3.87 MB - Last synced at: about 1 year ago - Pushed at: about 1 year ago - Stars: 73 - Forks: 10
ghaffarian/progex 📦
PROGEX (Program Graph Extractor); a cross platform tool for extracting graphical program representations from software source code
Language: Java - Size: 20.5 MB - Last synced at: about 2 years ago - Pushed at: over 4 years ago - Stars: 73 - Forks: 32
nus-apr/cerberus
Research Acceleration Platform that provides interface to multiple state-of-the-art program analysis tools including but not limited to fuzzing, static analysis and program repair.
Language: Python - Size: 3.89 MB - Last synced at: 7 months ago - Pushed at: about 1 year ago - Stars: 70 - Forks: 32
lifting-bits/patchestry
Patchestry is a binary patching framework built with MLIR and Ghidra.
Language: C++ - Size: 1.37 MB - Last synced at: 8 days ago - Pushed at: 10 days ago - Stars: 67 - Forks: 4
GaloisInc/yapall
A precise and scalable pointer analysis for LLVM, written in Ascent
Language: C - Size: 3.57 MB - Last synced at: about 1 month ago - Pushed at: 10 months ago - Stars: 67 - Forks: 4
sdasgup3/binary-decompilation
Extracting high level semantic information from binary code
Language: Assembly - Size: 244 MB - Last synced at: 3 months ago - Pushed at: over 6 years ago - Stars: 66 - Forks: 8
antgroup/YASA-UAST
YASA-UAST is an intermediate representation structure for multi-language program analysis. The UAST-Parser parses code from different programming languages into a unified abstract syntax format.
Language: TypeScript - Size: 1.5 MB - Last synced at: 6 days ago - Pushed at: 10 days ago - Stars: 62 - Forks: 11
bdqnghi/awesome-ai4code
A collection of recent papers, benchmarks and datasets of AI4Code domain.
Size: 77.1 KB - Last synced at: 1 day ago - Pushed at: over 1 year ago - Stars: 58 - Forks: 4
HexHive/Evocatio
Language: C - Size: 2.87 MB - Last synced at: 4 months ago - Pushed at: over 2 years ago - Stars: 57 - Forks: 7
yugr/sortcheck
Tool for detecting violations of ordering axioms in qsort/bsearch callbacks.
Language: C - Size: 252 KB - Last synced at: 3 months ago - Pushed at: 11 months ago - Stars: 54 - Forks: 4
kudu-dynamics/blaze-platform
A framework for program analysis with a focus on modeling programmer assumptions, context- and path-sensitive analyses, and type checking.
Language: Haskell - Size: 6.25 MB - Last synced at: 7 months ago - Pushed at: 11 months ago - Stars: 51 - Forks: 7
agra-uni-bremen/BinSym
Symbolic execution for RISC-V machine code based on the formal LibRISCV ISA model
Language: Haskell - Size: 120 KB - Last synced at: 4 months ago - Pushed at: 7 months ago - Stars: 50 - Forks: 3
Symbolk/Code2Graph
Towards converting multilingual source code into one language-agnostic graph representation.
Language: Java - Size: 50.6 MB - Last synced at: over 1 year ago - Pushed at: almost 3 years ago - Stars: 38 - Forks: 7
m-zakeri/CodART
Source Code Automated Refactoring Toolkit
Language: Python - Size: 65.1 MB - Last synced at: 4 months ago - Pushed at: 5 months ago - Stars: 37 - Forks: 60
skius/progge.rs
Program analysis playground for a simple, imperative language
Language: Rust - Size: 414 KB - Last synced at: 6 months ago - Pushed at: over 3 years ago - Stars: 36 - Forks: 0
Colton1skees/WinTTD
Reverse engineered API for Microsoft's Time Travel Debugger
Language: C++ - Size: 753 KB - Last synced at: 3 months ago - Pushed at: over 1 year ago - Stars: 35 - Forks: 7
Koukyosyumei/Gymbo
gradient-based symbolic execution engine implemented from scratch
Language: C++ - Size: 10.1 MB - Last synced at: 3 months ago - Pushed at: about 2 years ago - Stars: 34 - Forks: 0
ucsb-seclab/sasi
Signedness-Agnostic Strided-Interval
Language: C++ - Size: 24.6 MB - Last synced at: over 1 year ago - Pushed at: over 6 years ago - Stars: 34 - Forks: 9
Intelligent-CAT-Lab/AlphaTrans
Artifact repository for the paper "AlphaTrans: A Neuro-Symbolic Compositional Approach for Repository-Level Code Translation and Validation", In Proceedings of The ACM Conference on Foundations of Software Engineering (FSE 2025), Trondheim, Norway, June 2025
Language: Java - Size: 49.2 MB - Last synced at: 5 days ago - Pushed at: 7 days ago - Stars: 32 - Forks: 5
Lekssays/codebadger
A containerized Model Context Protocol (MCP) server providing static code analysis using Joern's Code Property Graph (CPG) with support for Java, C/C++, JavaScript, Python, Go, Kotlin, C#, Ghidra, Jimple, PHP, Ruby, and Swift.
Language: Python - Size: 815 KB - Last synced at: 10 days ago - Pushed at: 12 days ago - Stars: 30 - Forks: 3
agustingianni/instrumentation
Assorted pintools
Language: C++ - Size: 771 KB - Last synced at: 8 months ago - Pushed at: over 5 years ago - Stars: 30 - Forks: 7
Enna1/LLVM-Clang-Examples
A collection of code based on LLVM/Clang compilation libraries and tools
Language: C++ - Size: 6.94 MB - Last synced at: over 2 years ago - Pushed at: almost 6 years ago - Stars: 30 - Forks: 3
ALFA-group/adversarial-code-generation
[ICLR 2021] "Generating Adversarial Computer Programs using Optimized Obfuscations" by Shashank Srikant, Sijia Liu, Tamara Mitrovska, Shiyu Chang, Quanfu Fan, Gaoyuan Zhang, and Una-May O'Reilly
Language: Python - Size: 16.2 MB - Last synced at: 4 months ago - Pushed at: about 4 years ago - Stars: 29 - Forks: 5
UnitTestBot/usvm
Universal Symbolic Virtual Machine
Language: Kotlin - Size: 134 MB - Last synced at: about 1 month ago - Pushed at: about 1 month ago - Stars: 27 - Forks: 25
Colton1skees/TritonTranslator
Standalone static version of Triton's x86/x64 translator
Language: C++ - Size: 495 KB - Last synced at: 3 months ago - Pushed at: 9 months ago - Stars: 27 - Forks: 8
focs-lab/rapid
Dynamic Analysis for Concurrent Programs
Language: Java - Size: 32.8 MB - Last synced at: 13 days ago - Pushed at: about 1 year ago - Stars: 27 - Forks: 11
wei-le/programanalysiscourse
COM S 413/513 and CPR E 513 Program Analysis @ Iowa State University
Language: C - Size: 110 MB - Last synced at: about 2 years ago - Pushed at: about 2 years ago - Stars: 26 - Forks: 6
jiezhoucs/must-read
Lists of must-read papers (mainly security papers)
Size: 338 KB - Last synced at: over 1 year ago - Pushed at: over 1 year ago - Stars: 25 - Forks: 0
danhper/evm-analyzer
Code for Smart Contract Vulnerabilities: Vulnerable Does Not Imply Exploited
Language: OCaml - Size: 286 KB - Last synced at: 9 months ago - Pushed at: about 5 years ago - Stars: 24 - Forks: 3
purseclab/lightblue
An automatic framework to remove unneeded and unsafe code from Bluetooth stacks of Android and Linux, using both source code analysis (LLVM) and binary analysis (angr).
Language: C++ - Size: 169 MB - Last synced at: over 1 year ago - Pushed at: over 3 years ago - Stars: 22 - Forks: 2
BinaryAnalysisPlatform/bap-python
BAP python bindings
Language: Python - Size: 67.4 KB - Last synced at: 29 days ago - Pushed at: about 2 years ago - Stars: 21 - Forks: 12