diff --git a/{{project-name}}-common/Cargo.toml b/{{project-name}}-common/Cargo.toml
index 6cd39be..d7532fc 100644
--- a/{{project-name}}-common/Cargo.toml
+++ b/{{project-name}}-common/Cargo.toml
@@ -8,7 +8,7 @@ default = []
 user = ["aya"]
 
 [dependencies]
-aya = { git = "https://github.com/aya-rs/aya", optional = true }
+aya = { version = "0.12", optional = true }
 
 [lib]
 path = "src/lib.rs"
diff --git a/{{project-name}}-ebpf/Cargo.toml b/{{project-name}}-ebpf/Cargo.toml
index 17c08d7..95b15cc 100644
--- a/{{project-name}}-ebpf/Cargo.toml
+++ b/{{project-name}}-ebpf/Cargo.toml
@@ -4,8 +4,8 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
-aya-bpf = { git = "https://github.com/aya-rs/aya" }
-aya-log-ebpf = { git = "https://github.com/aya-rs/aya" }
+aya-ebpf = "0.1.0"
+aya-log-ebpf = "0.1.0"
 {{ project-name }}-common = { path = "../{{ project-name }}-common" }
 
 [[bin]]
diff --git a/{{project-name}}-ebpf/src/main.rs b/{{project-name}}-ebpf/src/main.rs
index 0f13e39..77995c0 100644
--- a/{{project-name}}-ebpf/src/main.rs
+++ b/{{project-name}}-ebpf/src/main.rs
@@ -2,7 +2,7 @@
 #![no_main]
 {% case program_type -%}
 {%- when "kprobe" %}
-use aya_bpf::{macros::kprobe, programs::ProbeContext};
+use aya_ebpf::{macros::kprobe, programs::ProbeContext};
 use aya_log_ebpf::info;
 
 #[kprobe]
@@ -18,7 +18,7 @@ fn try_{{crate_name}}(ctx: ProbeContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "kretprobe" %}
-use aya_bpf::{macros::kretprobe, programs::ProbeContext};
+use aya_ebpf::{macros::kretprobe, programs::ProbeContext};
 use aya_log_ebpf::info;
 
 #[kretprobe]
@@ -34,7 +34,7 @@ fn try_{{crate_name}}(ctx: ProbeContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "fentry" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::fentry,
     programs::FEntryContext,
 };
@@ -53,7 +53,7 @@ fn try_{{crate_name}}(ctx: FEntryContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "fexit" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::fexit,
     programs::FExitContext,
 };
@@ -72,7 +72,7 @@ fn try_{{crate_name}}(ctx: FExitContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "uprobe" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::uprobe,
     programs::ProbeContext,
 };
@@ -91,7 +91,7 @@ fn try_{{crate_name}}(ctx: ProbeContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "uretprobe" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::uretprobe,
     programs::ProbeContext,
 };
@@ -110,7 +110,7 @@ fn try_{{crate_name}}(ctx: ProbeContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "sock_ops" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::sock_ops,
     programs::SockOpsContext,
 };
@@ -129,7 +129,7 @@ fn try_{{crate_name}}(ctx: SockOpsContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "sk_msg" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::{map, sk_msg},
     maps::SockHash,
     programs::SkMsgContext,
@@ -154,7 +154,7 @@ fn try_{{crate_name}}(ctx: SkMsgContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "xdp" %}
-use aya_bpf::{bindings::xdp_action, macros::xdp, programs::XdpContext};
+use aya_ebpf::{bindings::xdp_action, macros::xdp, programs::XdpContext};
 use aya_log_ebpf::info;
 
 #[xdp]
@@ -170,7 +170,7 @@ fn try_{{crate_name}}(ctx: XdpContext) -> Result<u32, u32> {
     Ok(xdp_action::XDP_PASS)
 }
 {%- when "classifier" %}
-use aya_bpf::{macros::classifier, programs::TcContext};
+use aya_ebpf::{macros::classifier, programs::TcContext};
 use aya_log_ebpf::info;
 
 #[classifier]
@@ -186,7 +186,7 @@ fn try_{{crate_name}}(ctx: TcContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "cgroup_skb" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::cgroup_skb,
     programs::SkBuffContext,
 };
@@ -205,7 +205,7 @@ fn try_{{crate_name}}(ctx: SkBuffContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "tracepoint" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::tracepoint,
     programs::TracePointContext,
 };
@@ -224,7 +224,7 @@ fn try_{{crate_name}}(ctx: TracePointContext) -> Result<u32, u32> {
     Ok(0)
 }
 {%- when "lsm" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::lsm,
     programs::LsmContext,
 };
@@ -243,7 +243,7 @@ fn try_{{lsm_hook}}(ctx: LsmContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "tp_btf" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::btf_tracepoint,
     programs::BtfTracePointContext,
 };
@@ -262,7 +262,7 @@ fn try_{{tracepoint_name}}(ctx: BtfTracePointContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "socket_filter" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::socket_filter,
     programs::SkBuffContext,
 };
@@ -272,7 +272,7 @@ pub fn {{crate_name}}(_ctx: SkBuffContext) -> i64 {
     return 0
 }
 {%- when "cgroup_sysctl" %}
-use aya_bpf::{
+use aya_ebpf::{
     macros::cgroup_sysctl,
     programs::SysctlContext,
 };
@@ -291,7 +291,7 @@ fn try_{{crate_name}}(ctx: SysctlContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "cgroup_sockopt" %}
-use aya_bpf::{macros::cgroup_sockopt, programs::SockoptContext};
+use aya_ebpf::{macros::cgroup_sockopt, programs::SockoptContext};
 use aya_log_ebpf::info;
 
 #[cgroup_sockopt({{sockopt_target}})]
@@ -307,7 +307,7 @@ fn try_{{crate_name}}(ctx: SockoptContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "raw_tracepoint" %}
-use aya_bpf::{macros::raw_tracepoint, programs::RawTracePointContext};
+use aya_ebpf::{macros::raw_tracepoint, programs::RawTracePointContext};
 use aya_log_ebpf::info;
 
 #[raw_tracepoint(tracepoint="{{tracepoint_name}}")]
@@ -323,8 +323,8 @@ fn try_{{crate_name}}(ctx: RawTracePointContext) -> Result<i32, i32> {
     Ok(0)
 }
 {%- when "perf_event" %}
-use aya_bpf::{
-    helpers::bpf_get_smp_processor_id, macros::perf_event, programs::PerfEventContext, BpfContext,
+use aya_ebpf::{
+    helpers::bpf_get_smp_processor_id, macros::perf_event, programs::PerfEventContext, EbpfContext,
 };
 use aya_log_ebpf::info;
 
diff --git a/{{project-name}}/Cargo.toml b/{{project-name}}/Cargo.toml
index a869e6e..a6a655d 100644
--- a/{{project-name}}/Cargo.toml
+++ b/{{project-name}}/Cargo.toml
@@ -5,8 +5,8 @@ edition = "2021"
 publish = false
 
 [dependencies]
-aya = { git = "https://github.com/aya-rs/aya", features = ["async_tokio"] }
-aya-log = { git = "https://github.com/aya-rs/aya" }
+aya = "0.12"
+aya-log = "0.2"
 {% if program_types_with_opts contains program_type -%}
 clap = { version = "4.1", features = ["derive"] }
 {% endif -%}
diff --git a/{{project-name}}/src/main.rs b/{{project-name}}/src/main.rs
index 756fd87..b7ceca5 100644
--- a/{{project-name}}/src/main.rs
+++ b/{{project-name}}/src/main.rs
@@ -123,11 +123,11 @@ async fn main() -> Result<(), anyhow::Error> {
     program.attach(cgroup)?;
     {%- when "sk_msg" -%}
     let sock_map: SockHash::<_, SockKey> = bpf.map("{{sock_map}}").unwrap().try_into()?;
-    let map_fd = sock_map.fd()?;
+    let map_fd = sock_map.fd().try_clone()?;
 
     let prog: &mut SkMsg = bpf.program_mut("{{crate_name}}").unwrap().try_into()?;
     prog.load()?;
-    prog.attach(map_fd)?;
+    prog.attach(&map_fd)?;
     // insert sockets to the map using sock_map.insert here, or from a sock_ops program
     {%- when "xdp" -%}
     let program: &mut Xdp = bpf.program_mut("{{crate_name}}").unwrap().try_into()?;
@@ -186,6 +186,7 @@ async fn main() -> Result<(), anyhow::Error> {
             perf_event::perf_sw_ids::PERF_COUNT_SW_CPU_CLOCK as u64,
             perf_event::PerfEventScope::AllProcessesOneCpu { cpu },
             perf_event::SamplePolicy::Frequency(1),
+            true,
         )?;
     }
     {%- when "raw_tracepoint" -%}