diff --git a/tools/aconfig/protos/aconfig.proto b/tools/aconfig/protos/aconfig.proto
index 65817ca..d95fd50 100644
--- a/tools/aconfig/protos/aconfig.proto
+++ b/tools/aconfig/protos/aconfig.proto
@@ -20,9 +20,15 @@
 
 package android.aconfig;
 
+enum permission {
+  READ_ONLY = 1;
+  READ_WRITE = 2;
+}
+
 message value {
   required bool value = 1;
-  optional uint32 since = 2;
+  required permission permission = 2;
+  optional uint32 since = 3;
 }
 
 message flag {
@@ -38,6 +44,7 @@
 message override {
   required string id = 1;
   required bool value = 2;
+  required permission permission = 3;
 };
 
 message override_config {
diff --git a/tools/aconfig/src/aconfig.rs b/tools/aconfig/src/aconfig.rs
index 22fcb88..dc185f0 100644
--- a/tools/aconfig/src/aconfig.rs
+++ b/tools/aconfig/src/aconfig.rs
@@ -15,25 +15,46 @@
  */
 
 use anyhow::{anyhow, Context, Error, Result};
+use protobuf::{Enum, EnumOrUnknown};
+use serde::{Deserialize, Serialize};
 
 use crate::protos::{
-    ProtoAndroidConfig, ProtoFlag, ProtoOverride, ProtoOverrideConfig, ProtoValue,
+    ProtoAndroidConfig, ProtoFlag, ProtoOverride, ProtoOverrideConfig, ProtoPermission, ProtoValue,
 };
 
+#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Copy)]
+pub enum Permission {
+    ReadOnly,
+    ReadWrite,
+}
+
+impl TryFrom<EnumOrUnknown<ProtoPermission>> for Permission {
+    type Error = Error;
+
+    fn try_from(proto: EnumOrUnknown<ProtoPermission>) -> Result<Self, Self::Error> {
+        match ProtoPermission::from_i32(proto.value()) {
+            Some(ProtoPermission::READ_ONLY) => Ok(Permission::ReadOnly),
+            Some(ProtoPermission::READ_WRITE) => Ok(Permission::ReadWrite),
+            None => Err(anyhow!("unknown permission enum value {}", proto.value())),
+        }
+    }
+}
+
 #[derive(Debug, PartialEq, Eq)]
 pub struct Value {
     value: bool,
+    permission: Permission,
     since: Option<u32>,
 }
 
 #[allow(dead_code)] // only used in unit tests
 impl Value {
-    pub fn new(value: bool, since: u32) -> Value {
-        Value { value, since: Some(since) }
+    pub fn new(value: bool, permission: Permission, since: u32) -> Value {
+        Value { value, permission, since: Some(since) }
     }
 
-    pub fn default(value: bool) -> Value {
-        Value { value, since: None }
+    pub fn default(value: bool, permission: Permission) -> Value {
+        Value { value, permission, since: None }
     }
 }
 
@@ -44,7 +65,11 @@
         let Some(value) = proto.value else {
             return Err(anyhow!("missing 'value' field"));
         };
-        Ok(Value { value, since: proto.since })
+        let Some(proto_permission) = proto.permission else {
+            return Err(anyhow!("missing 'permission' field"));
+        };
+        let permission = proto_permission.try_into()?;
+        Ok(Value { value, permission, since: proto.since })
     }
 }
 
@@ -72,15 +97,17 @@
         proto.flag.into_iter().map(|proto_flag| proto_flag.try_into()).collect()
     }
 
-    pub fn resolve_value(&self, build_id: u32) -> bool {
+    pub fn resolve(&self, build_id: u32) -> (bool, Permission) {
         let mut value = self.values[0].value;
+        let mut permission = self.values[0].permission;
         for candidate in self.values.iter().skip(1) {
             let since = candidate.since.expect("invariant: non-defaults values have Some(since)");
             if since <= build_id {
                 value = candidate.value;
+                permission = candidate.permission;
             }
         }
-        value
+        (value, permission)
     }
 }
 
@@ -120,6 +147,7 @@
 pub struct Override {
     pub id: String,
     pub value: bool,
+    pub permission: Permission,
 }
 
 impl Override {
@@ -145,7 +173,11 @@
         let Some(value) = proto.value else {
             return Err(anyhow!("missing 'value' field"));
         };
-        Ok(Override { id, value })
+        let Some(proto_permission) = proto.permission else {
+            return Err(anyhow!("missing 'permission' field"));
+        };
+        let permission = proto_permission.try_into()?;
+        Ok(Override { id, value, permission })
     }
 }
 
@@ -158,7 +190,10 @@
         let expected = Flag {
             id: "1234".to_owned(),
             description: "Description of the flag".to_owned(),
-            values: vec![Value::default(false), Value::new(true, 8)],
+            values: vec![
+                Value::default(false, Permission::ReadOnly),
+                Value::new(true, Permission::ReadWrite, 8),
+            ],
         };
 
         let s = r#"
@@ -166,9 +201,11 @@
         description: "Description of the flag"
         value {
             value: false
+            permission: READ_ONLY
         }
         value {
             value: true
+            permission: READ_WRITE
             since: 8
         }
         "#;
@@ -190,6 +227,7 @@
         description: "Description of the flag"
         value {
             value: true
+            permission: READ_ONLY
         }
         "#;
         let error = Flag::try_from_text_proto(s).unwrap_err();
@@ -200,9 +238,11 @@
         description: "Description of the flag"
         value {
             value: true
+            permission: READ_ONLY
         }
         value {
             value: true
+            permission: READ_ONLY
         }
         "#;
         let error = Flag::try_from_text_proto(s).unwrap_err();
@@ -215,12 +255,12 @@
             Flag {
                 id: "a".to_owned(),
                 description: "A".to_owned(),
-                values: vec![Value::default(true)],
+                values: vec![Value::default(true, Permission::ReadOnly)],
             },
             Flag {
                 id: "b".to_owned(),
                 description: "B".to_owned(),
-                values: vec![Value::default(false)],
+                values: vec![Value::default(false, Permission::ReadWrite)],
             },
         ];
 
@@ -230,6 +270,7 @@
             description: "A"
             value {
                 value: true
+                permission: READ_ONLY
             }
         }
         flag {
@@ -237,6 +278,7 @@
             description: "B"
             value {
                 value: false
+                permission: READ_WRITE
             }
         }
         "#;
@@ -247,11 +289,13 @@
 
     #[test]
     fn test_override_try_from_text_proto_list() {
-        let expected = Override { id: "1234".to_owned(), value: true };
+        let expected =
+            Override { id: "1234".to_owned(), value: true, permission: Permission::ReadOnly };
 
         let s = r#"
         id: "1234"
         value: true
+        permission: READ_ONLY
         "#;
         let actual = Override::try_from_text_proto(s).unwrap();
 
@@ -259,26 +303,26 @@
     }
 
     #[test]
-    fn test_resolve_value() {
+    fn test_flag_resolve() {
         let flag = Flag {
             id: "a".to_owned(),
             description: "A".to_owned(),
             values: vec![
-                Value::default(true),
-                Value::new(false, 10),
-                Value::new(true, 20),
-                Value::new(false, 30),
+                Value::default(false, Permission::ReadOnly),
+                Value::new(false, Permission::ReadWrite, 10),
+                Value::new(true, Permission::ReadOnly, 20),
+                Value::new(true, Permission::ReadWrite, 30),
             ],
         };
-        assert!(flag.resolve_value(0));
-        assert!(flag.resolve_value(9));
-        assert!(!flag.resolve_value(10));
-        assert!(!flag.resolve_value(11));
-        assert!(!flag.resolve_value(19));
-        assert!(flag.resolve_value(20));
-        assert!(flag.resolve_value(21));
-        assert!(flag.resolve_value(29));
-        assert!(!flag.resolve_value(30));
-        assert!(!flag.resolve_value(10_000));
+        assert_eq!((false, Permission::ReadOnly), flag.resolve(0));
+        assert_eq!((false, Permission::ReadOnly), flag.resolve(9));
+        assert_eq!((false, Permission::ReadWrite), flag.resolve(10));
+        assert_eq!((false, Permission::ReadWrite), flag.resolve(11));
+        assert_eq!((false, Permission::ReadWrite), flag.resolve(19));
+        assert_eq!((true, Permission::ReadOnly), flag.resolve(20));
+        assert_eq!((true, Permission::ReadOnly), flag.resolve(21));
+        assert_eq!((true, Permission::ReadOnly), flag.resolve(29));
+        assert_eq!((true, Permission::ReadWrite), flag.resolve(30));
+        assert_eq!((true, Permission::ReadWrite), flag.resolve(10_000));
     }
 }
diff --git a/tools/aconfig/src/cache.rs b/tools/aconfig/src/cache.rs
index d27459d..f7b0f2d 100644
--- a/tools/aconfig/src/cache.rs
+++ b/tools/aconfig/src/cache.rs
@@ -18,18 +18,19 @@
 use serde::{Deserialize, Serialize};
 use std::io::{Read, Write};
 
-use crate::aconfig::{Flag, Override};
+use crate::aconfig::{Flag, Override, Permission};
 use crate::commands::Source;
 
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
 pub struct Item {
     pub id: String,
     pub description: String,
     pub value: bool,
+    pub permission: Permission,
     pub debug: Vec<String>,
 }
 
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
 pub struct Cache {
     build_id: u32,
     items: Vec<Item>,
@@ -56,12 +57,13 @@
                 source,
             ));
         }
-        let value = flag.resolve_value(self.build_id);
+        let (value, permission) = flag.resolve(self.build_id);
         self.items.push(Item {
             id: flag.id.clone(),
             description: flag.description,
             value,
-            debug: vec![format!("{}:{}", source, value)],
+            permission,
+            debug: vec![format!("{}:{} {:?}", source, value, permission)],
         });
         Ok(())
     }
@@ -71,7 +73,10 @@
             return Err(anyhow!("failed to override flag {}: unknown flag", override_.id));
         };
         existing_item.value = override_.value;
-        existing_item.debug.push(format!("{}:{}", source, override_.value));
+        existing_item.permission = override_.permission;
+        existing_item
+            .debug
+            .push(format!("{}:{} {:?}", source, override_.value, override_.permission));
         Ok(())
     }
 
@@ -85,7 +90,7 @@
 #[cfg(test)]
 mod tests {
     use super::*;
-    use crate::aconfig::Value;
+    use crate::aconfig::{Permission, Value};
 
     #[test]
     fn test_add_flag() {
@@ -96,7 +101,7 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(true)],
+                    values: vec![Value::default(true, Permission::ReadOnly)],
                 },
             )
             .unwrap();
@@ -106,7 +111,7 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(false)],
+                    values: vec![Value::default(false, Permission::ReadOnly)],
                 },
             )
             .unwrap_err();
@@ -118,13 +123,17 @@
 
     #[test]
     fn test_add_override() {
-        fn check_value(cache: &Cache, id: &str, expected: bool) -> bool {
-            cache.iter().find(|&item| item.id == id).unwrap().value == expected
+        fn check(cache: &Cache, id: &str, expected: (bool, Permission)) -> bool {
+            let item = cache.iter().find(|&item| item.id == id).unwrap();
+            item.value == expected.0 && item.permission == expected.1
         }
 
         let mut cache = Cache::new(1);
         let error = cache
-            .add_override(Source::Memory, Override { id: "foo".to_string(), value: true })
+            .add_override(
+                Source::Memory,
+                Override { id: "foo".to_string(), value: true, permission: Permission::ReadOnly },
+            )
             .unwrap_err();
         assert_eq!(&format!("{:?}", error), "failed to override flag foo: unknown flag");
 
@@ -134,20 +143,28 @@
                 Flag {
                     id: "foo".to_string(),
                     description: "desc".to_string(),
-                    values: vec![Value::default(true)],
+                    values: vec![Value::default(true, Permission::ReadOnly)],
                 },
             )
             .unwrap();
-        assert!(check_value(&cache, "foo", true));
+        dbg!(&cache);
+        assert!(check(&cache, "foo", (true, Permission::ReadOnly)));
 
         cache
-            .add_override(Source::Memory, Override { id: "foo".to_string(), value: false })
+            .add_override(
+                Source::Memory,
+                Override { id: "foo".to_string(), value: false, permission: Permission::ReadWrite },
+            )
             .unwrap();
-        assert!(check_value(&cache, "foo", false));
+        dbg!(&cache);
+        assert!(check(&cache, "foo", (false, Permission::ReadWrite)));
 
         cache
-            .add_override(Source::Memory, Override { id: "foo".to_string(), value: true })
+            .add_override(
+                Source::Memory,
+                Override { id: "foo".to_string(), value: true, permission: Permission::ReadWrite },
+            )
             .unwrap();
-        assert!(check_value(&cache, "foo", true));
+        assert!(check(&cache, "foo", (true, Permission::ReadWrite)));
     }
 }
diff --git a/tools/aconfig/src/commands.rs b/tools/aconfig/src/commands.rs
index 4976fb2..bc22363 100644
--- a/tools/aconfig/src/commands.rs
+++ b/tools/aconfig/src/commands.rs
@@ -103,6 +103,7 @@
             description: "Description of a"
             value {
                 value: true
+                permission: READ_ONLY
             }
         }
         "#;
@@ -111,6 +112,7 @@
         override {
             id: "a"
             value: false
+            permission: READ_ONLY
         }
         "#;
         let overrides = vec![Input { source: Source::Memory, reader: Box::new(o.as_bytes()) }];
diff --git a/tools/aconfig/src/protos.rs b/tools/aconfig/src/protos.rs
index 3c156b3..e9a1ab5 100644
--- a/tools/aconfig/src/protos.rs
+++ b/tools/aconfig/src/protos.rs
@@ -42,6 +42,9 @@
 #[cfg(not(feature = "cargo"))]
 pub use aconfig_protos::aconfig::Override as ProtoOverride;
 
+#[cfg(not(feature = "cargo"))]
+pub use aconfig_protos::aconfig::Permission as ProtoPermission;
+
 // ---- When building with cargo ----
 #[cfg(feature = "cargo")]
 include!(concat!(env!("OUT_DIR"), "/aconfig_proto/mod.rs"));
@@ -61,6 +64,9 @@
 #[cfg(feature = "cargo")]
 pub use aconfig::Override as ProtoOverride;
 
+#[cfg(feature = "cargo")]
+pub use aconfig::Permission as ProtoPermission;
+
 // ---- Common for both the Android tool-chain and cargo ----
 use anyhow::Result;
 
